Skip to content

Commit

Permalink
feat: 유저 프로필 정보 수정 API 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
oliviarla committed Dec 14, 2023
1 parent 8144640 commit 58523bf
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.perfume.api.user.adapter.in.http.dto.LeaveUserDto;
import io.perfume.api.user.adapter.in.http.dto.UpdateEmailRequestDto;
import io.perfume.api.user.adapter.in.http.dto.UpdatePasswordRequestDto;
import io.perfume.api.user.adapter.in.http.dto.UpdateProfileRequestDto;
import io.perfume.api.user.adapter.in.http.dto.UserProfileDto;
import io.perfume.api.user.adapter.in.http.exception.UserNotAuthenticatedException;
import io.perfume.api.user.application.port.in.FindEncryptedUsernameUseCase;
Expand All @@ -13,6 +14,7 @@
import io.perfume.api.user.application.port.in.UpdateAccountUseCase;
import io.perfume.api.user.application.port.in.dto.UpdateEmailCommand;
import io.perfume.api.user.application.port.in.dto.UpdatePasswordCommand;
import io.perfume.api.user.application.port.in.dto.UpdateProfileCommand;
import io.perfume.api.user.application.port.in.dto.UserProfileResult;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
Expand Down Expand Up @@ -62,9 +64,8 @@ public ResponseEntity<Object> sendUsernameToUsersEmail(@RequestParam @Email Stri

@GetMapping("/me")
public UserProfileDto me(@AuthenticationPrincipal User user) {
if (user == null) {
throw new UserNotAuthenticatedException();
}
checkAuthenticatedUser(user);

long userId = Long.parseLong(user.getUsername());
UserProfileResult userProfileResult = findUserUseCase.findUserProfileById(userId);
return UserProfileDto.of(userProfileResult);
Expand All @@ -73,6 +74,8 @@ public UserProfileDto me(@AuthenticationPrincipal User user) {
@DeleteMapping("/user")
@ResponseStatus(HttpStatus.ACCEPTED)
public LeaveUserDto leaveUser(@AuthenticationPrincipal User user) {
checkAuthenticatedUser(user);

long userId = Long.parseLong(user.getUsername());
leaveUserUseCase.leave(userId);
return new LeaveUserDto(userId);
Expand All @@ -81,9 +84,10 @@ public LeaveUserDto leaveUser(@AuthenticationPrincipal User user) {
@PatchMapping("/account/email")
public void updateEmailByUser(
@AuthenticationPrincipal User user, @RequestBody UpdateEmailRequestDto updateEmailDto) {
checkAuthenticatedUser(user);

UpdateEmailCommand updateEmailCommand =
new UpdateEmailCommand(
Long.parseLong(user.getUsername()), updateEmailDto.verified(), updateEmailDto.email());
updateEmailDto.toCommand(Long.parseLong(user.getUsername()));

updateAccountUseCase.updateUserEmail(updateEmailCommand);
}
Expand All @@ -92,12 +96,29 @@ public void updateEmailByUser(
public void updatePasswordByUser(
@AuthenticationPrincipal User user,
@RequestBody UpdatePasswordRequestDto updatePasswordRequestDto) {
checkAuthenticatedUser(user);

UpdatePasswordCommand updatePasswordCommand =
new UpdatePasswordCommand(
Long.parseLong(user.getUsername()),
updatePasswordRequestDto.oldPassword(),
updatePasswordRequestDto.newPassword());
updatePasswordRequestDto.toCommand(Long.parseLong(user.getUsername()));

updateAccountUseCase.updateUserPassword(updatePasswordCommand);
}

@PatchMapping("/user/profile")
public void updateProfileByUser(
@AuthenticationPrincipal User user,
@RequestBody UpdateProfileRequestDto updateProfileRequestDto) {
checkAuthenticatedUser(user);

UpdateProfileCommand updateProfileCommand =
updateProfileRequestDto.toCommand(Long.parseLong(user.getUsername()));

updateAccountUseCase.updateUserProfile(updateProfileCommand);
}

private void checkAuthenticatedUser(User user) {
if (user == null || user.getUsername() == null) {
throw new UserNotAuthenticatedException();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.perfume.api.user.adapter.in.http.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.perfume.api.user.adapter.out.persistence.user.Sex;
import io.perfume.api.user.application.port.in.dto.UpdateProfileCommand;
import java.time.LocalDate;

public record UpdateProfileRequestDto(
String bio, @JsonFormat(pattern = "yyyyMMdd") LocalDate birthday, String sex) {
public UpdateProfileCommand toCommand(long userId) {
return new UpdateProfileCommand(
userId, bio, birthday, sex != null ? Sex.valueOf(sex.toUpperCase()) : null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@

import io.perfume.api.user.application.port.in.dto.UpdateEmailCommand;
import io.perfume.api.user.application.port.in.dto.UpdatePasswordCommand;
import io.perfume.api.user.application.port.in.dto.UpdateProfileCommand;

public interface UpdateAccountUseCase {
void updateUserEmail(UpdateEmailCommand updateEmailCommand);

void updateUserPassword(UpdatePasswordCommand updatePasswordCommand);

void updateUserProfile(UpdateProfileCommand updateProfileCommand);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package io.perfume.api.user.application.port.in.dto;

import io.perfume.api.user.adapter.out.persistence.user.Sex;
import java.time.LocalDate;

public record UpdateProfileCommand(Long userId, String bio, LocalDate birthday, Sex sex) {}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import io.perfume.api.user.application.port.in.UpdateAccountUseCase;
import io.perfume.api.user.application.port.in.dto.UpdateEmailCommand;
import io.perfume.api.user.application.port.in.dto.UpdatePasswordCommand;
import io.perfume.api.user.application.port.in.dto.UpdateProfileCommand;
import io.perfume.api.user.application.port.out.UserQueryRepository;
import io.perfume.api.user.application.port.out.UserRepository;
import io.perfume.api.user.domain.User;
Expand Down Expand Up @@ -40,4 +41,16 @@ public void updateUserPassword(UpdatePasswordCommand updatePasswordCommand) {
passwordEncoder, updatePasswordCommand.oldPassword(), updatePasswordCommand.newPassword());
userRepository.save(user);
}

@Override
public void updateUserProfile(UpdateProfileCommand updateProfileCommand) {
User user =
userQueryRepository
.loadUser(updateProfileCommand.userId())
.orElseThrow(() -> new UserNotFoundException(updateProfileCommand.userId()));

user.updateProfile(
updateProfileCommand.bio(), updateProfileCommand.birthday(), updateProfileCommand.sex());
userRepository.save(user);
}
}
12 changes: 12 additions & 0 deletions perfume-api/src/main/java/io/perfume/api/user/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -183,4 +183,16 @@ public void updatePassword(
}
this.password = passwordEncoder.encode(newPassword);
}

public void updateProfile(String bio, LocalDate birthday, Sex sex) {
if (bio != null) {
this.bio = bio;
}
if (birthday != null) {
this.birthday = birthday;
}
if (sex != null) {
this.sex = sex;
}
}
}

0 comments on commit 58523bf

Please sign in to comment.