diff --git a/build.gradle b/build.gradle index 5007991..3933d78 100644 --- a/build.gradle +++ b/build.gradle @@ -52,11 +52,14 @@ dependencies { implementation 'mysql:mysql-connector-java:8.0.32' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.projectlombok:lombok:1.18.24' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.mapstruct:mapstruct:1.5.3.Final' - annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final' + annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.1.Final' + implementation 'org.projectlombok:lombok-mapstruct-binding:0.2.0' + annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0' // OAuth implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' diff --git a/src/main/java/com/Alchive/backend/adapter/in/web/controller/UserController.java b/src/main/java/com/Alchive/backend/adapter/in/web/controller/UserController.java index 42bf4f6..a36820b 100644 --- a/src/main/java/com/Alchive/backend/adapter/in/web/controller/UserController.java +++ b/src/main/java/com/Alchive/backend/adapter/in/web/controller/UserController.java @@ -1,7 +1,9 @@ package com.Alchive.backend.adapter.in.web.controller; import com.Alchive.backend.adapter.in.web.dto.request.UserCreateRequestDTO; +import com.Alchive.backend.adapter.in.web.dto.request.UserUpdateRequestDTO; import com.Alchive.backend.adapter.in.web.dto.response.UserResponseDTO; +import com.Alchive.backend.application.command.ChangeUserDetailCommand; import com.Alchive.backend.application.command.SignUpCommand; import com.Alchive.backend.application.port.in.UserUseCase; import com.Alchive.backend.config.result.ResultCode; @@ -10,10 +12,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @Tag(name = "사용자", description = "사용자 관련 api입니다.") @RequestMapping("/api/v2/users") @@ -29,4 +28,26 @@ public ResponseEntity signUp(@RequestBody UserCreateRequestDTO u UserResponseDTO userResponseDTO = userUseCase.signUp(signUpCommand); return ResponseEntity.ok(ResultResponse.of(ResultCode.USER_CREATE_SUCCESS, userResponseDTO)); } + + @Operation(summary = "회원정보 수정", description = "회원 설명글과 자동 저장 설정을 변경하는 메서드입니다. ") + @PostMapping("/{id}") + public ResponseEntity updateUser(@RequestBody UserUpdateRequestDTO userUpdateRequestDTO, @PathVariable Long id) { + ChangeUserDetailCommand changeUserDetailCommand = ChangeUserDetailCommand.of(userUpdateRequestDTO); + UserResponseDTO userResponseDTO = userUseCase.changeUserDetail(id, changeUserDetailCommand); + return ResponseEntity.ok(ResultResponse.of(ResultCode.USER_UPDATE_SUCCESS, userResponseDTO)); + } + + @Operation(summary = "회원정보 조회", description = "회원정보를 조회하는 메서드입니다. ") + @GetMapping("/{id}") + public ResponseEntity getUser(@PathVariable Long id){ + UserResponseDTO userResponseDTO = userUseCase.viewUserDetail(id); + return ResponseEntity.ok(ResultResponse.of(ResultCode.USER_DETAIL_INFO_SUCCESS, userResponseDTO)); + } + + @Operation(summary = "회원 삭제", description = "회원을 삭제하는 메서드입니다. ") + @DeleteMapping("/{id}") + public ResponseEntity deleteUser(@PathVariable Long id) { + userUseCase.deleteUser(id); + return ResponseEntity.ok(ResultResponse.of(ResultCode.USER_DELETE_SUCCESS)); + } } diff --git a/src/main/java/com/Alchive/backend/adapter/in/web/dto/request/UserUpdateRequestDTO.java b/src/main/java/com/Alchive/backend/adapter/in/web/dto/request/UserUpdateRequestDTO.java new file mode 100644 index 0000000..f6d6b32 --- /dev/null +++ b/src/main/java/com/Alchive/backend/adapter/in/web/dto/request/UserUpdateRequestDTO.java @@ -0,0 +1,15 @@ +package com.Alchive.backend.adapter.in.web.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserUpdateRequestDTO { + private String userDescription; + private Boolean autoSave; +} diff --git a/src/main/java/com/Alchive/backend/adapter/out/persistence/adapter/UserPersistenceAdapter.java b/src/main/java/com/Alchive/backend/adapter/out/persistence/adapter/UserPersistenceAdapter.java index 1d3f1a3..0991e8f 100644 --- a/src/main/java/com/Alchive/backend/adapter/out/persistence/adapter/UserPersistenceAdapter.java +++ b/src/main/java/com/Alchive/backend/adapter/out/persistence/adapter/UserPersistenceAdapter.java @@ -2,25 +2,22 @@ import com.Alchive.backend.adapter.out.persistence.entity.UserEntity; import com.Alchive.backend.adapter.out.persistence.repository.UserRepository; -import com.Alchive.backend.application.port.out.user.CreateUserPort; -import com.Alchive.backend.application.port.out.user.ExistUserPort; -import com.Alchive.backend.application.port.out.user.FindUserPort; +import com.Alchive.backend.application.port.out.user.*; import com.Alchive.backend.config.error.exception.user.NoSuchUserIdException; -import com.Alchive.backend.mapper.UserMapper; +import com.Alchive.backend.mapper.IUserMapper; import com.Alchive.backend.model.User; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @RequiredArgsConstructor @Component -public class UserPersistenceAdapter implements CreateUserPort, FindUserPort, ExistUserPort { +public class UserPersistenceAdapter implements CreateUserPort, FindUserPort, ExistUserPort, UpdateUserPort, DeleteUserPort { private final UserRepository userRepository; - private final UserMapper userMapper; + private final IUserMapper userMapper; @Override public User createUser(User user) { - // UserEntity userEntity = userMapper.toEntity(user); - UserEntity userEntity = new UserEntity(user.getEmail(), user.getName()); + UserEntity userEntity = userMapper.toEntity(user); UserEntity savedUser = userRepository.save(userEntity); return userMapper.toDomain(savedUser); } @@ -32,6 +29,13 @@ public User findUserByEmail(String email) { return userMapper.toDomain(userEntity); } + @Override + public User findById(Long id) { + UserEntity userEntity = userRepository.findById(id) + .orElseThrow(NoSuchUserIdException::new); + return userMapper.toDomain(userEntity); + } + @Override public Boolean ExistByUserEmail(String email) { return userRepository.existsUserEntityByEmail(email); @@ -41,4 +45,15 @@ public Boolean ExistByUserEmail(String email) { public Boolean ExistByUserName(String name) { return userRepository.existsUserEntityByName(name); } + + @Override + public void updateUser(User user) { + userRepository.updateUser(user.getDescription(), user.getAutoSave(), user.getId()); + } + + @Override + public void deleteUser(User user) { + UserEntity userEntity = userMapper.toEntity(user); + userRepository.delete(userEntity); + } } diff --git a/src/main/java/com/Alchive/backend/adapter/out/persistence/entity/BaseEntity.java b/src/main/java/com/Alchive/backend/adapter/out/persistence/entity/BaseEntity.java index f623b61..4fa4917 100644 --- a/src/main/java/com/Alchive/backend/adapter/out/persistence/entity/BaseEntity.java +++ b/src/main/java/com/Alchive/backend/adapter/out/persistence/entity/BaseEntity.java @@ -3,13 +3,18 @@ import jakarta.persistence.Column; import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import java.time.LocalDateTime; +@SuperBuilder +@NoArgsConstructor @MappedSuperclass @Getter @EntityListeners(AuditingEntityListener.class) @@ -23,6 +28,7 @@ public abstract class BaseEntity { @Column(name = "updated_at") private LocalDateTime updatedAt; + @Builder.Default @Column(name = "is_deleted", nullable = false, columnDefinition = "bit(1) default 0") private Boolean isDeleted = false; diff --git a/src/main/java/com/Alchive/backend/adapter/out/persistence/entity/UserEntity.java b/src/main/java/com/Alchive/backend/adapter/out/persistence/entity/UserEntity.java index c8c6a69..213df3a 100644 --- a/src/main/java/com/Alchive/backend/adapter/out/persistence/entity/UserEntity.java +++ b/src/main/java/com/Alchive/backend/adapter/out/persistence/entity/UserEntity.java @@ -3,14 +3,15 @@ import com.Alchive.backend.model.User; import jakarta.persistence.*; import lombok.*; +import lombok.experimental.SuperBuilder; import org.hibernate.annotations.ColumnDefault; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; -@Builder -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@NoArgsConstructor +@SuperBuilder @Getter +@NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) @Entity @SQLDelete(sql = "UPDATE user SET is_deleted = true WHERE id = ?") @Where(clause = "is_deleted = false") @@ -31,12 +32,6 @@ public class UserEntity extends BaseEntity { private String description; @Column(name = "auto_save", nullable = false) - @ColumnDefault("true") + @Builder.Default private Boolean autoSave = true; - - @Builder - public UserEntity (String email, String name) { - this.email = email; - this.name = name; - } } \ No newline at end of file diff --git a/src/main/java/com/Alchive/backend/adapter/out/persistence/repository/UserRepository.java b/src/main/java/com/Alchive/backend/adapter/out/persistence/repository/UserRepository.java index 02dd907..609bcc7 100644 --- a/src/main/java/com/Alchive/backend/adapter/out/persistence/repository/UserRepository.java +++ b/src/main/java/com/Alchive/backend/adapter/out/persistence/repository/UserRepository.java @@ -2,6 +2,10 @@ import com.Alchive.backend.adapter.out.persistence.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.security.core.parameters.P; import java.util.Optional; @@ -10,4 +14,7 @@ public interface UserRepository extends JpaRepository { Optional findUserEntityByName(String email); Boolean existsUserEntityByEmail(String email); Boolean existsUserEntityByName(String name); + @Modifying(clearAutomatically = true) + @Query("UPDATE UserEntity userEntity SET userEntity.description = :description, userEntity.autoSave = :autoSave WHERE userEntity.id = :id") + void updateUser(@Param(value = "description") String description, @Param(value = "autoSave") Boolean autoSave, @Param(value = "id") Long id); } diff --git a/src/main/java/com/Alchive/backend/application/command/ChangeUserDetailCommand.java b/src/main/java/com/Alchive/backend/application/command/ChangeUserDetailCommand.java new file mode 100644 index 0000000..d622536 --- /dev/null +++ b/src/main/java/com/Alchive/backend/application/command/ChangeUserDetailCommand.java @@ -0,0 +1,23 @@ +package com.Alchive.backend.application.command; + +import com.Alchive.backend.adapter.in.web.dto.request.UserUpdateRequestDTO; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +@AllArgsConstructor +public class ChangeUserDetailCommand { + private final String description; + @NotBlank + private final Boolean autoSave; + + public static ChangeUserDetailCommand of(UserUpdateRequestDTO userUpdateRequestDTO) { + return ChangeUserDetailCommand.builder() + .description(userUpdateRequestDTO.getUserDescription()) + .autoSave(userUpdateRequestDTO.getAutoSave()) + .build(); + } +} diff --git a/src/main/java/com/Alchive/backend/application/command/SignUpCommand.java b/src/main/java/com/Alchive/backend/application/command/SignUpCommand.java index 974ca81..9e97cec 100644 --- a/src/main/java/com/Alchive/backend/application/command/SignUpCommand.java +++ b/src/main/java/com/Alchive/backend/application/command/SignUpCommand.java @@ -8,11 +8,8 @@ @AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter public class SignUpCommand { - private Long id; private String email; private String name; - private String description; - private Boolean autoSave; public static SignUpCommand of(UserCreateRequestDTO userCreateRequestDTO) { return SignUpCommand.builder() diff --git a/src/main/java/com/Alchive/backend/application/port/in/UserUseCase.java b/src/main/java/com/Alchive/backend/application/port/in/UserUseCase.java index e18d7f9..fb17dd5 100644 --- a/src/main/java/com/Alchive/backend/application/port/in/UserUseCase.java +++ b/src/main/java/com/Alchive/backend/application/port/in/UserUseCase.java @@ -1,8 +1,13 @@ package com.Alchive.backend.application.port.in; import com.Alchive.backend.adapter.in.web.dto.response.UserResponseDTO; +import com.Alchive.backend.application.command.ChangeUserDetailCommand; import com.Alchive.backend.application.command.SignUpCommand; +import com.Alchive.backend.model.User; public interface UserUseCase { UserResponseDTO signUp(SignUpCommand signUpCommand); + UserResponseDTO changeUserDetail(Long id, ChangeUserDetailCommand changeDescriptionCommand); + UserResponseDTO viewUserDetail(Long id); + void deleteUser(Long id); } diff --git a/src/main/java/com/Alchive/backend/application/port/out/user/DeleteUserPort.java b/src/main/java/com/Alchive/backend/application/port/out/user/DeleteUserPort.java new file mode 100644 index 0000000..ed4ff0c --- /dev/null +++ b/src/main/java/com/Alchive/backend/application/port/out/user/DeleteUserPort.java @@ -0,0 +1,7 @@ +package com.Alchive.backend.application.port.out.user; + +import com.Alchive.backend.model.User; + +public interface DeleteUserPort { + void deleteUser(User user); +} diff --git a/src/main/java/com/Alchive/backend/application/port/out/user/FindUserPort.java b/src/main/java/com/Alchive/backend/application/port/out/user/FindUserPort.java index 0dc8e29..8d8b7d4 100644 --- a/src/main/java/com/Alchive/backend/application/port/out/user/FindUserPort.java +++ b/src/main/java/com/Alchive/backend/application/port/out/user/FindUserPort.java @@ -4,4 +4,5 @@ public interface FindUserPort { User findUserByEmail(String email); + User findById(Long id); } diff --git a/src/main/java/com/Alchive/backend/application/port/out/user/UpdateUserPort.java b/src/main/java/com/Alchive/backend/application/port/out/user/UpdateUserPort.java new file mode 100644 index 0000000..3f66b74 --- /dev/null +++ b/src/main/java/com/Alchive/backend/application/port/out/user/UpdateUserPort.java @@ -0,0 +1,7 @@ +package com.Alchive.backend.application.port.out.user; + +import com.Alchive.backend.model.User; + +public interface UpdateUserPort { + void updateUser(User user); +} diff --git a/src/main/java/com/Alchive/backend/application/service/UserService.java b/src/main/java/com/Alchive/backend/application/service/UserService.java index 9556cee..3ae89c0 100644 --- a/src/main/java/com/Alchive/backend/application/service/UserService.java +++ b/src/main/java/com/Alchive/backend/application/service/UserService.java @@ -1,12 +1,12 @@ package com.Alchive.backend.application.service; import com.Alchive.backend.adapter.in.web.dto.response.UserResponseDTO; +import com.Alchive.backend.application.command.ChangeUserDetailCommand; import com.Alchive.backend.application.command.SignUpCommand; import com.Alchive.backend.application.port.in.UserUseCase; -import com.Alchive.backend.application.port.out.user.CreateUserPort; -import com.Alchive.backend.application.port.out.user.ExistUserPort; -import com.Alchive.backend.application.port.out.user.FindUserPort; -import com.Alchive.backend.mapper.UserMapper; +import com.Alchive.backend.application.port.out.user.*; +import com.Alchive.backend.config.jwt.JwtTokenProvider; +import com.Alchive.backend.mapper.IUserMapper; import com.Alchive.backend.model.User; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -16,33 +16,65 @@ @Slf4j @RequiredArgsConstructor @Service -@Transactional(readOnly = true) public class UserService implements UserUseCase { - private final UserMapper userMapper; + private final IUserMapper userMapper; + private final JwtTokenProvider jwtTokenProvider; + private final CreateUserPort createUserPort; private final FindUserPort findUserPort; private final ExistUserPort existUserPort; + private final UpdateUserPort updateUserPort; + private final DeleteUserPort deleteUserPort; @Transactional @Override public UserResponseDTO signUp(SignUpCommand signUpCommand) { // 회원가입 요청 도메인 생성 - User user = userMapper.commandToDomain(signUpCommand); - log.info("도메인 생성 완료"); - // 비즈니스 로직 호출 + User user = new User(); Boolean isEmailExist = existUserPort.ExistByUserEmail(user.getEmail()); Boolean isNameExist = existUserPort.ExistByUserName(user.getName()); - user.createUser(user.getEmail(), user.getName(), isEmailExist, isNameExist); - log.info("비즈니스 로직 호출 완료"); + // 비즈니스 로직 호출 + user.createUser(signUpCommand.getEmail(), signUpCommand.getName(), isEmailExist, isNameExist); // 회원정보 저장 User savedUser = createUserPort.createUser(user); - log.info("엔티티 저장 완료"); + + // 토큰 발급 + String accessToken = jwtTokenProvider.createAccessToken(user.getEmail()); + String refreshToken = jwtTokenProvider.createRefreshToken(user.getEmail()); + // 저장된 회원 도메인을 응답 DTO로 변환 - return userMapper.domainToResponseDTO(user); + log.info("access Token: ", accessToken); + log.info("refresh Token: ", refreshToken); + return userMapper.domainToResponseDTO(savedUser); } public User findByEmail(String email) { User user = findUserPort.findUserByEmail(email); return user; } + + @Transactional + @Override + public UserResponseDTO changeUserDetail(Long id, ChangeUserDetailCommand changeDescriptionCommand) { + User targetUser = findUserPort.findById(id); + + targetUser.changeUserDetail(changeDescriptionCommand.getDescription(), changeDescriptionCommand.getAutoSave()); + // JPA update + updateUserPort.updateUser(targetUser); + + return userMapper.domainToResponseDTO(targetUser); + } + + @Override + public UserResponseDTO viewUserDetail(Long id) { + User user = findUserPort.findById(id); + return userMapper.domainToResponseDTO(user); + } + + @Transactional + @Override + public void deleteUser(Long id) { + User user = findUserPort.findById(id); + deleteUserPort.deleteUser(user); + } } diff --git a/src/main/java/com/Alchive/backend/config/jwt/JwtAuthenticationFilter.java b/src/main/java/com/Alchive/backend/config/jwt/JwtAuthenticationFilter.java index 2293a7f..c5abb62 100644 --- a/src/main/java/com/Alchive/backend/config/jwt/JwtAuthenticationFilter.java +++ b/src/main/java/com/Alchive/backend/config/jwt/JwtAuthenticationFilter.java @@ -42,7 +42,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { Map.entry("/api/v2/users/username/{name}", List.of("GET")), Map.entry("/api/v2/sns/{snsId}", List.of("GET")), Map.entry("/api/v2/slack/reminder", List.of("GET")), - Map.entry("/api/v2/slack/added", List.of("GET")) + Map.entry("/api/v2/slack/added", List.of("GET")), + Map.entry("/api/v2/jwt", List.of("GET")) ); // EXCLUDE_URL과 메서드에 일치할 경우 현재 필터를 진행하지 않고 다음 필터 진행 diff --git a/src/main/java/com/Alchive/backend/mapper/UserMapper.java b/src/main/java/com/Alchive/backend/mapper/IUserMapper.java similarity index 61% rename from src/main/java/com/Alchive/backend/mapper/UserMapper.java rename to src/main/java/com/Alchive/backend/mapper/IUserMapper.java index c921353..9489658 100644 --- a/src/main/java/com/Alchive/backend/mapper/UserMapper.java +++ b/src/main/java/com/Alchive/backend/mapper/IUserMapper.java @@ -5,16 +5,25 @@ import com.Alchive.backend.application.command.SignUpCommand; import com.Alchive.backend.model.User; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; import org.mapstruct.ReportingPolicy; -@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) -public interface UserMapper { - // 응답 도메인 -> 회원가입 응답 DTO +@Mapper(componentModel = "spring") +public interface IUserMapper { + // 도메인 -> 회원가입 응답 DTO UserResponseDTO domainToResponseDTO(User user); - // domain -> entity - UserEntity toEntity(User user); + // command -> domain User commandToDomain(SignUpCommand signUpCommand); + // entity -> domain User toDomain(UserEntity userEntity); + + // domain -> entity + @Mapping(target = "autoSave", ignore = true) + @Mapping(target = "createdAt", ignore = true) + @Mapping(target = "updatedAt", ignore = true) + @Mapping(target = "isDeleted", ignore = true) + UserEntity toEntity(User user); } diff --git a/src/main/java/com/Alchive/backend/model/BaseModel.java b/src/main/java/com/Alchive/backend/model/BaseModel.java index 0fc309e..3042b09 100644 --- a/src/main/java/com/Alchive/backend/model/BaseModel.java +++ b/src/main/java/com/Alchive/backend/model/BaseModel.java @@ -1,9 +1,22 @@ package com.Alchive.backend.model; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + import java.time.LocalDateTime; +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Getter public abstract class BaseModel { private LocalDateTime createdAt; private LocalDateTime updatedAt; private Boolean isDeleted; + + public void softDelete() { + this.isDeleted = true; + } } diff --git a/src/main/java/com/Alchive/backend/model/User.java b/src/main/java/com/Alchive/backend/model/User.java index fd67540..d989d5f 100644 --- a/src/main/java/com/Alchive/backend/model/User.java +++ b/src/main/java/com/Alchive/backend/model/User.java @@ -4,8 +4,9 @@ import com.Alchive.backend.config.error.exception.user.UserEmailExistException; import com.Alchive.backend.config.error.exception.user.UserNameExistException; import lombok.*; +import lombok.experimental.SuperBuilder; -@Builder +@SuperBuilder @Getter @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PRIVATE) @@ -16,15 +17,6 @@ public class User extends BaseModel { private String description; private Boolean autoSave; - // factory method - public static User of(String email, String name) { - return User.builder() - .email(email) - .name(name) - .build(); - } - - public void createUser(String email, String name, Boolean isEmailExist, Boolean isNameExist) { if (isEmailExist) { throw new UserEmailExistException(); @@ -36,15 +28,9 @@ public void createUser(String email, String name, Boolean isEmailExist, Boolean this.name = name; } - public void getUserDetail() { - - } - - public void changeUserDetail() { - - } - - public void deleteUser() { - + public void changeUserDetail(String description, Boolean autoSave) { + // User authentication 과정 추가 + this.description = description; + this.autoSave = autoSave; } } diff --git a/src/test/java/com/Alchive/backend/service/UserTest.java b/src/test/java/com/Alchive/backend/service/UserTest.java index 22021b5..e131e4b 100644 --- a/src/test/java/com/Alchive/backend/service/UserTest.java +++ b/src/test/java/com/Alchive/backend/service/UserTest.java @@ -1,5 +1,7 @@ package com.Alchive.backend.service; +import com.Alchive.backend.config.error.exception.user.UserEmailExistException; +import com.Alchive.backend.config.error.exception.user.UserNameExistException; import com.Alchive.backend.model.User; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; @@ -8,7 +10,7 @@ public class UserTest { @DisplayName("사용자 생성 - 성공") @Test - public void userCreateTest() { + public void userCreateTestSuccess() { User sut = new User(); sut.createUser("test@gmail.com", "test", false, false); @@ -16,4 +18,34 @@ public void userCreateTest() { Assertions.assertEquals("test@gmail.com", sut.getEmail()); Assertions.assertEquals("test", sut.getName()); } + + @DisplayName("사용자 생성 - 메일 중복 실패") + @Test + public void userCreateTestFailByEmailOverlap() { + User sut = new User(); + + Assertions.assertThrows(UserEmailExistException.class, () -> sut.createUser("test@gmail.com", "test", true, false)); + } + + @DisplayName("사용자 생성 - 사용자명 중복 실패") + @Test + public void userCreateTestFailByNameOverlap() { + User sut = new User(); + + Assertions.assertThrows(UserNameExistException.class, () -> sut.createUser("test@gmail.com", "test", false, true)); + } + + @DisplayName("사용자 업데이트 - 성공") + @Test + public void userUpdateTestSuccess() { + User sut = User.builder() + .description("this is test user!") + .autoSave(true) + .build(); + + sut.changeUserDetail("hello test", false); + + Assertions.assertEquals("hello test", sut.getDescription()); + Assertions.assertEquals(false, sut.getAutoSave()); + } }