Skip to content

Commit 6a3e963

Browse files
authored
Merge pull request #59 from BinaryStudioAcademy/feature/profile-page
Implement profile update
2 parents 3f04137 + bd1895b commit 6a3e963

File tree

29 files changed

+712
-130
lines changed

29 files changed

+712
-130
lines changed

backend/app/Action/Auth/RegisterAction.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public function execute(RegisterRequest $request): AuthenticationResponse
2424
$user = $this->userRepository->create([
2525
'email' => $request->getEmail(),
2626
'password' => $request->getPassword(),
27-
'name' => $request->getName(),
27+
'first_name' => $request->getFirstName(),
28+
'last_name' => $request->getLastName(),
2829
'nickname' => $request->getNickname()
2930
]);
3031
$token = auth()->login($user);

backend/app/Action/Auth/RegisterRequest.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,21 @@ final class RegisterRequest
88
{
99
private $email;
1010
private $password;
11-
private $name;
11+
private $firstName;
12+
private $lastName;
1213
private $nickname;
1314

1415
public function __construct(
1516
string $email,
1617
string $password,
17-
string $name,
18+
string $firstName,
19+
string $lastName,
1820
string $nickname
1921
) {
2022
$this->email = $email;
2123
$this->password = $password;
22-
$this->name = $name;
24+
$this->firstName = $firstName;
25+
$this->lastName = $lastName;
2326
$this->nickname = $nickname;
2427
}
2528

@@ -33,9 +36,14 @@ public function getPassword(): string
3336
return $this->password;
3437
}
3538

36-
public function getName(): string
39+
public function getFirstName(): string
3740
{
38-
return $this->name;
41+
return $this->firstName;
42+
}
43+
44+
public function getLastName(): string
45+
{
46+
return $this->lastName;
3947
}
4048

4149
public function getNickname(): string

backend/app/Action/Auth/UpdateProfileAction.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public function execute(UpdateProfileRequest $request): UpdateProfileResponse
2121
$user = Auth::user();
2222

2323
$user->email = $request->getEmail() ?: $user->email;
24-
$user->name = $request->getName() ?: $user->name;
24+
$user->first_name = $request->getFirstName() ?: $user->first_name;
25+
$user->last_name = $request->getLastName() ?: $user->last_name;
2526
$user->nickname = $request->getNickname() ?: $user->nickname;
2627

2728
$user = $this->userRepository->save($user);

backend/app/Action/Auth/UpdateProfileRequest.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,19 @@
77
final class UpdateProfileRequest
88
{
99
private $email;
10-
private $name;
10+
private $firstName;
11+
private $lastName;
1112
private $nickname;
1213

1314
public function __construct(
1415
?string $email,
15-
?string $name,
16+
?string $firstName,
17+
?string $lastName,
1618
?string $nickname
1719
) {
1820
$this->email = $email;
19-
$this->name = $name;
21+
$this->firstName = $firstName;
22+
$this->lastName = $lastName;
2023
$this->nickname = $nickname;
2124
}
2225

@@ -25,9 +28,14 @@ public function getEmail(): ?string
2528
return $this->email;
2629
}
2730

28-
public function getName(): ?string
31+
public function getFirstName(): ?string
2932
{
30-
return $this->name;
33+
return $this->firstName;
34+
}
35+
36+
public function getLastName(): ?string
37+
{
38+
return $this->lastName;
3139
}
3240

3341
public function getNickname(): ?string

backend/app/Action/Auth/UploadProfileImageAction.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ public function execute(UploadProfileImageRequest $request): UploadProfileImageR
3333
$user->id,
3434
'public'
3535
);
36-
$user->profile_image = $disk->url($filePath);
36+
37+
// added timestamp to url to let browser know that image was changed
38+
$user->profile_image = $disk->url($filePath) . '?t=' . time();
3739

3840
$user = $this->userRepository->save($user);
3941

backend/app/Entity/User.php

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ final class User extends Authenticatable implements JWTSubject
3333
* @var array
3434
*/
3535
protected $fillable = [
36-
'name',
36+
'first_name',
37+
'last_name',
3738
'nickname',
3839
'email',
3940
'password',
@@ -79,13 +80,22 @@ public function setPasswordAttribute($password)
7980
}
8081
}
8182

82-
public function changeName(string $name): void
83+
public function changeFirstName(string $firstName): void
8384
{
84-
if (empty($name)) {
85-
throw new InvalidArgumentException('User name cannot be empty.');
85+
if (empty($firstName)) {
86+
throw new InvalidArgumentException('User first name cannot be empty.');
8687
}
8788

88-
$this->attributes['name'] = $name;
89+
$this->attributes['first_name'] = $firstName;
90+
}
91+
92+
public function changeLastName(string $lastName): void
93+
{
94+
if (empty($lastName)) {
95+
throw new InvalidArgumentException('User last name cannot be empty.');
96+
}
97+
98+
$this->attributes['last_name'] = $lastName;
8999
}
90100

91101
public function changeNickName(string $nickname): void
@@ -106,9 +116,14 @@ public function changeAvatar(string $avatarUrl): void
106116
$this->attributes['profile_image'] = $avatarUrl;
107117
}
108118

109-
public function getName(): string
119+
public function getFirstName(): string
120+
{
121+
return $this->first_name;
122+
}
123+
124+
public function getLastName(): string
110125
{
111-
return $this->name;
126+
return $this->last_name;
112127
}
113128

114129
public function getNickName(): string

backend/app/Http/Controllers/Api/Auth/AuthController.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,11 @@ public function register(
3636
AuthenticationResponseArrayPresenter $authenticationResponseArrayPresenter
3737
) {
3838
$request = new RegisterRequest(
39-
$httpRequest->email,
40-
$httpRequest->password,
41-
$httpRequest->name,
42-
$httpRequest->nickname
39+
$httpRequest->get('email'),
40+
$httpRequest->get('password'),
41+
$httpRequest->get('first_name'),
42+
$httpRequest->get('last_name'),
43+
$httpRequest->get('nickname')
4344
);
4445
$response = $action->execute($request);
4546

@@ -82,7 +83,8 @@ public function update(
8283
$response = $action->execute(
8384
new UpdateProfileRequest(
8485
$httpRequest->get('email'),
85-
$httpRequest->get('name'),
86+
$httpRequest->get('first_name'),
87+
$httpRequest->get('last_name'),
8688
$httpRequest->get('nickname')
8789
)
8890
);

backend/app/Http/Presenter/User/UserArrayPresenter.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ public function present(User $user): array
1515
return [
1616
'id' => $user->getId(),
1717
'email' => $user->getEmail(),
18-
'name' => $user->getName(),
18+
'first_name' => $user->getFirstName(),
19+
'last_name' => $user->getLastName(),
1920
'nickname' => $user->getNickName(),
2021
'avatar' => $user->getAvatar()
2122
];

backend/app/Http/Request/Api/Auth/RegisterHttpRequest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public function rules(): array
1818
return [
1919
'email' => 'required|email|unique:users',
2020
'password' => 'required|min:6|string',
21-
'name' => 'required|string|min:2',
21+
'first_name' => 'required|string|min:2',
22+
'last_name' => 'required|string|min:2',
2223
'nickname' => 'required|string|min:2|unique:users'
2324
];
2425
}

backend/app/Http/Request/Api/Auth/UpdateProfileHttpRequest.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
namespace App\Http\Request\Api\Auth;
66

77
use App\Http\Request\ApiFormRequest;
8+
use Illuminate\Support\Facades\Auth;
9+
use Illuminate\Validation\Rule;
810

911
final class UpdateProfileHttpRequest extends ApiFormRequest
1012
{
@@ -16,9 +18,17 @@ final class UpdateProfileHttpRequest extends ApiFormRequest
1618
public function rules(): array
1719
{
1820
return [
19-
'email' => 'email|unique:users',
20-
'name' => 'string|min:2',
21-
'nickname' => 'string|min:2|unique:users'
21+
'email' => [
22+
'email',
23+
Rule::unique('users')->ignore(Auth::id())
24+
],
25+
'first_name' => 'string|min:2',
26+
'last_name' => 'string|min:2',
27+
'nickname' => [
28+
'string',
29+
'min:2',
30+
Rule::unique('users')->ignore(Auth::id())
31+
]
2232
];
2333
}
2434
}

0 commit comments

Comments
 (0)