diff --git a/src/main/java/com/techeer/fashioncloud/domain/user/controller/UserController.java b/src/main/java/com/techeer/fashioncloud/domain/user/controller/UserController.java index 4579433..20b1f87 100644 --- a/src/main/java/com/techeer/fashioncloud/domain/user/controller/UserController.java +++ b/src/main/java/com/techeer/fashioncloud/domain/user/controller/UserController.java @@ -64,4 +64,15 @@ public ResponseEntity getMyInfo( return ResponseEntity.ok(ResultResponse.of(ResponseCode.USER_INFO_GET_SUCCESS, myInfo)); } + + @DeleteMapping("/withdrawal") + @PreAuthorize("hasAnyRole('USER', 'ADMIN')") + @Operation(summary = "회원 탈퇴", description = "회원탈퇴를 진행한다") + public ResponseEntity Withdrawal( + @LoginUser User loginUser + ) { + userService.deleteUser(loginUser.getId()); + + return ResponseEntity.ok(ResultResponse.of(ResponseCode.USER_DELETE_SUCCESS)); + } } \ No newline at end of file diff --git a/src/main/java/com/techeer/fashioncloud/domain/user/entity/User.java b/src/main/java/com/techeer/fashioncloud/domain/user/entity/User.java index e8fde8d..badb65f 100644 --- a/src/main/java/com/techeer/fashioncloud/domain/user/entity/User.java +++ b/src/main/java/com/techeer/fashioncloud/domain/user/entity/User.java @@ -22,6 +22,7 @@ @DynamicInsert @Where(clause = "deleted_at IS NULL") @SQLDelete(sql = "UPDATE users SET deleted_at = CURRENT_TIMESTAMP WHERE id = ?") + @Table(name = "users") public class User extends BaseEntity { @@ -48,6 +49,9 @@ public class User extends BaseEntity { @Column(length = 100) private String address; + @Column(length = 30, columnDefinition = "boolean default false") + private Boolean isDeleted; + @Enumerated(EnumType.STRING) @ColumnDefault("USER") @NotNull @@ -69,4 +73,5 @@ public class User extends BaseEntity { public void setUserRole(ROLE role) { this.role = role; } + } \ No newline at end of file diff --git a/src/main/java/com/techeer/fashioncloud/domain/user/repository/UserRepository.java b/src/main/java/com/techeer/fashioncloud/domain/user/repository/UserRepository.java index ba003da..a04162b 100644 --- a/src/main/java/com/techeer/fashioncloud/domain/user/repository/UserRepository.java +++ b/src/main/java/com/techeer/fashioncloud/domain/user/repository/UserRepository.java @@ -1,8 +1,13 @@ package com.techeer.fashioncloud.domain.user.repository; +import com.techeer.fashioncloud.domain.user.dto.response.FollowInfoResponseDto; import com.techeer.fashioncloud.domain.user.entity.User; 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 java.util.List; import java.util.Optional; public interface UserRepository extends JpaRepository { @@ -11,4 +16,10 @@ public interface UserRepository extends JpaRepository { Optional findByEmail(String email); boolean existsByEmail(String email); + + @Modifying(clearAutomatically = true) + @Query("update User u set u.isDeleted=true where u.id=:id") + void deleteUser(@Param("id") Long id); + + } diff --git a/src/main/java/com/techeer/fashioncloud/domain/user/service/UserService.java b/src/main/java/com/techeer/fashioncloud/domain/user/service/UserService.java index 3547fb6..08cccae 100644 --- a/src/main/java/com/techeer/fashioncloud/domain/user/service/UserService.java +++ b/src/main/java/com/techeer/fashioncloud/domain/user/service/UserService.java @@ -89,6 +89,17 @@ public UserInfoResponse getUserInfo(Long userId) { .createdAt(user.getCreatedAt()) .updatedAt(user.getUpdatedAt()) .build(); + } + @Transactional + public void deleteUser(Long userId) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); + + userRepository.deleteUser(user.getId()); + userRepository.delete(user); + + + } private boolean checkFollowed(User fromUser, User toUser) { diff --git a/src/main/java/com/techeer/fashioncloud/global/response/ResponseCode.java b/src/main/java/com/techeer/fashioncloud/global/response/ResponseCode.java index bd6fc1e..126726f 100644 --- a/src/main/java/com/techeer/fashioncloud/global/response/ResponseCode.java +++ b/src/main/java/com/techeer/fashioncloud/global/response/ResponseCode.java @@ -30,6 +30,7 @@ public enum ResponseCode { USER_UNFOLLOW_SUCCESS(201, "유저 언팔로우 성공"), USER_FOLLOW_LIST_GET_SUCCESS(200, "유저 팔로우 리스트 조회 성공"), USER_INFO_GET_SUCCESS(200, "유저 정보 조회 성공"), + USER_DELETE_SUCCESS(200,"회원 탈퇴 성공"), ADDRESS_GET_SUCCESS(200, "주소 조회 성공"),