-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUserFileRepository.php
97 lines (77 loc) · 1.87 KB
/
UserFileRepository.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
class UserFileRepository implements UserRepositoryInterface
{
/**
* @inheritDoc
*/
public function getUser(int $userId)
{
$users = $this->getUsers();
foreach ($users as $user) {
if ($user->id == $userId) {
return $user;
}
}
return null;
}
/**
* @inheritDoc
*/
public function saveUser(string $name)
{
$pathname = $this->getPathname();
$users = $this->getUsers();
$userId = count($users) + 1;
$newUser = new UserModel;
$newUser->id = $userId;
$newUser->name = $name;
$users[] = $newUser;
$userArray = [];
foreach ($users as $user) {
$userArray[] = $user->toArray();
}
$json = json_encode($userArray, JSON_PRETTY_PRINT);
file_put_contents($pathname, $json);
return $userId;
}
/**
* @inheritDoc
*/
public function getUsers()
{
$users = [];
$pathname = $this->getPathname();
// Load existing users
if (is_file($pathname)) {
$json = file_get_contents($pathname);
$rawUsers = json_decode($json, true);
foreach ($rawUsers as $rawUser) {
$user = new UserModel;
$user->id = $rawUser['id'];
$user->name = $rawUser['name'];
$users[] = $user;
}
}
return $users;
}
/**
* @inheritDoc
*/
private function getPathname()
{
return __DIR__ . '/users.json';
}
/**
* @inheritDoc
*/
public function isNameTake(string $name): bool
{
$users = $this->getUsers();
foreach ($users as $user) {
if ($user->name === $name) {
return true;
}
}
return false;
}
}