From 159fb06c04f7778568863a908d98d454fc4f98a6 Mon Sep 17 00:00:00 2001 From: Minjae An <101340860+Minjae-An@users.noreply.github.com> Date: Tue, 14 May 2024 17:33:11 +0900 Subject: [PATCH] =?UTF-8?q?[=ED=9C=B4=EB=A9=B4=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD]=20=ED=9C=B4=EB=A9=B4=20=EC=A7=80=EC=B9=AD?= =?UTF-8?q?=20=EC=9A=A9=EC=96=B4=20inactive=EB=A1=9C=20=EC=9D=BC=EA=B4=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95(#57)=20(#82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 휴면 해제 비즈니스 로직 추가(#57) * feat: 휴면 해제 API 추가(#57) * refactor: 코드 정렬(#57) * feat: 휴면 상태가 아닌 사용자 예외 추가(#57) * feat: 휴면 해제 비즈니스 로직 수정(#57) 휴면 상태가 아닌 사용자에 대해서는 업데이트하지 않고 예외 처리토록 구성 * feat: 사용자 연관 API, 정상 처리시 응답 코드 200으로 일괄 변경(#57) * feat: 요청 DTO 이름 적절히 변경(#57) - 기존 이름은 휴면 해제도 가능하다는 의미를 포함하지 못한다고 판단 - 해당 DTO를 통해 휴면, 휴면 해제 요청이 모두 가능하다는 의미를 표현하기 위해 변경 * feat: 불필요하게 추가되었던 휴면 해제 관련 로직 삭제(#57) * feat: 휴면 상태 변경 연관 로직 수정(#57) dormant와 inactive로 휴면 상태를 다르게 지칭한 부분, inactive로 일괄 수정 * feat: 사용하지 않는 예외 삭제(#57) * docs: 휴면 상태 변경 API, 명세 내용 수정(#57) --- .../mypage/controller/MyPageController.java | 14 +- ...a => UserChangeInactiveStatusRequest.java} | 6 +- .../be/mypage/service/MyPageService.java | 6 +- .../be/user/controller/UserController.java | 204 +++++++++--------- 4 files changed, 116 insertions(+), 114 deletions(-) rename be/src/main/java/yeonba/be/mypage/dto/request/{UserDormantRequest.java => UserChangeInactiveStatusRequest.java} (74%) diff --git a/be/src/main/java/yeonba/be/mypage/controller/MyPageController.java b/be/src/main/java/yeonba/be/mypage/controller/MyPageController.java index a6270e9e..e54b2821 100644 --- a/be/src/main/java/yeonba/be/mypage/controller/MyPageController.java +++ b/be/src/main/java/yeonba/be/mypage/controller/MyPageController.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import yeonba.be.mypage.dto.request.UserAllowNotificationsRequest; -import yeonba.be.mypage.dto.request.UserDormantRequest; +import yeonba.be.mypage.dto.request.UserChangeInactiveStatusRequest; import yeonba.be.mypage.dto.request.UserUpdateProfileRequest; import yeonba.be.mypage.dto.request.UserUpdateUnwantedAcquaintancesRequest; import yeonba.be.mypage.dto.response.BlockedUsersResponse; @@ -148,14 +148,14 @@ public ResponseEntity> unblockUser( .body(new CustomResponse<>()); } - @Operation(summary = "휴면 계정 전환", description = "계정의 휴면 상태를 전환할 수 있습니다.") - @ApiResponse(responseCode = "200", description = "휴면 상태 전환 요청 정상 처리") - @PatchMapping("/users/dormant") - public ResponseEntity> dormantUser( + @Operation(summary = "휴면 상태 변경", description = "회원의 휴면 상태를 변경할 수 있습니다.") + @ApiResponse(responseCode = "200", description = "휴면 상태 변경 요청 정상 처리") + @PatchMapping("/users/inactive") + public ResponseEntity> changeUserInactiveStatus( @RequestAttribute("userId") long userId, - @Valid @RequestBody UserDormantRequest request) { + @Valid @RequestBody UserChangeInactiveStatusRequest request) { - myPageService.changeDormantStatus(userId, request); + myPageService.changeInactiveStatus(userId, request); return ResponseEntity .ok() diff --git a/be/src/main/java/yeonba/be/mypage/dto/request/UserDormantRequest.java b/be/src/main/java/yeonba/be/mypage/dto/request/UserChangeInactiveStatusRequest.java similarity index 74% rename from be/src/main/java/yeonba/be/mypage/dto/request/UserDormantRequest.java rename to be/src/main/java/yeonba/be/mypage/dto/request/UserChangeInactiveStatusRequest.java index ec2b8c2b..2e4fcd3b 100644 --- a/be/src/main/java/yeonba/be/mypage/dto/request/UserDormantRequest.java +++ b/be/src/main/java/yeonba/be/mypage/dto/request/UserChangeInactiveStatusRequest.java @@ -4,12 +4,14 @@ import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; @Getter +@NoArgsConstructor @AllArgsConstructor -public class UserDormantRequest { +public class UserChangeInactiveStatusRequest { @Schema(description = "휴면 계정 상태", example = "true") @NotNull(message = "휴면 계정 상태는 필수 입력 값입니다.") - private boolean status; + private boolean inactive; } diff --git a/be/src/main/java/yeonba/be/mypage/service/MyPageService.java b/be/src/main/java/yeonba/be/mypage/service/MyPageService.java index c1172459..905a4a4d 100644 --- a/be/src/main/java/yeonba/be/mypage/service/MyPageService.java +++ b/be/src/main/java/yeonba/be/mypage/service/MyPageService.java @@ -14,7 +14,7 @@ import software.amazon.awssdk.services.s3.model.PutObjectRequest; import yeonba.be.exception.GeneralException; import yeonba.be.exception.UserException; -import yeonba.be.mypage.dto.request.UserDormantRequest; +import yeonba.be.mypage.dto.request.UserChangeInactiveStatusRequest; import yeonba.be.mypage.dto.request.UserUpdateProfileRequest; import yeonba.be.mypage.dto.response.BlockedUserResponse; import yeonba.be.mypage.dto.response.BlockedUsersResponse; @@ -210,10 +210,10 @@ public void unblockUser(long userId, long blockedUserId) { } @Transactional - public void changeDormantStatus(long userId, UserDormantRequest request) { + public void changeInactiveStatus(long userId, UserChangeInactiveStatusRequest request) { User user = userQuery.findById(userId); - user.changeInactiveStatus(request.isStatus()); + user.changeInactiveStatus(request.isInactive()); } @Transactional diff --git a/be/src/main/java/yeonba/be/user/controller/UserController.java b/be/src/main/java/yeonba/be/user/controller/UserController.java index 19177b06..1260b01f 100644 --- a/be/src/main/java/yeonba/be/user/controller/UserController.java +++ b/be/src/main/java/yeonba/be/user/controller/UserController.java @@ -29,106 +29,106 @@ @RequiredArgsConstructor public class UserController { - private final BlockService blockService; - private final FavoriteService favoriteService; - private final ReportService reportService; - private final UserService userService; - - @Operation( - summary = "이성(다른 사용자) 목록 조회", - description = "조건에 따라 다른 사용자 프로필 목록을 조회할 수 있습니다." - ) - @ApiResponse( - responseCode = "200", - description = "이성 목록 정상 조회" - ) - @GetMapping("/users") - public ResponseEntity> users( - @ParameterObject UserQueryRequest request) { - - return ResponseEntity - .ok() - .body(new CustomResponse<>()); - } - - - @Operation(summary = "다른 사용자 프로필 조회", description = "다른 사용자의 프로필을 조회할 수 있습니다.") - @ApiResponse(responseCode = "200", description = "사용자 프로필 정상 조회") - @GetMapping("/users/{userId}") - public ResponseEntity> profile( - @RequestAttribute("userId") long userId, - @Parameter(description = "조회대상 사용자 ID", example = "1") - @PathVariable("userId") long targetUserId) { - - UserProfileResponse response = userService.getTargetUserProfile(userId, targetUserId); - - return ResponseEntity - .ok() - .body(new CustomResponse<>(response)); - } - - @Operation(summary = "즐겨찾기 등록", description = "다른 사용자를 자신의 즐겨찾기에 등록할 수 있습니다.") - @ApiResponse(responseCode = "202", description = "즐겨찾기 등록 정상 처리") - @PostMapping("/favorites/{userId}") - public ResponseEntity> registerFavorite( - @RequestAttribute("userId") long userId, - @Parameter(description = "즐겨찾기에 등록될 사용자 ID", example = "1") - @PathVariable("userId") long favoriteUserId) { - - favoriteService.addFavorite(userId, favoriteUserId); - - return ResponseEntity - .accepted() - .body(new CustomResponse<>()); - } - - @Operation(summary = "즐겨찾기 삭제", description = "즐겨찾기에 등록한 사용자를 삭제합니다.") - @ApiResponse(responseCode = "202", description = "즐겨찾기 삭제 정상 처리") - @DeleteMapping("/favorites/{userId}") - public ResponseEntity> deleteFavorite( - @RequestAttribute("userId") long userId, - @Parameter(description = "즐겨찾기에서 삭제할 사용자 ID", example = "1") - @PathVariable("userId") long favoriteUserId) { - - favoriteService.deleteFavorite(userId, favoriteUserId); - - return ResponseEntity - .accepted() - .body(new CustomResponse<>()); - } - - - @Operation(summary = "사용자 신고", description = "다른 사용자를 신고할 수 있습니다.") - @ApiResponse(responseCode = "202", description = "신고 정상 처리") - @PostMapping("/users/{userId}/report") - public ResponseEntity> report( - @RequestAttribute("userId") long userId, - @Parameter(description = "신고 대상 사용자 ID", example = "1") - @PathVariable("userId") long reportedUserId, - @RequestBody UserReportRequest request) { - - reportService.makeReport( - userId, - reportedUserId, - request); - - return ResponseEntity - .accepted() - .body(new CustomResponse<>()); - } - - @Operation(summary = "차단하기", description = "다른 사용자를 차단할 수 있습니다.") - @ApiResponse(responseCode = "202", description = "차단 요청 정상 처리") - @PostMapping("/users/{userId}/block") - public ResponseEntity> block( - @RequestAttribute("userId") long userId, - @Parameter(description = "차단하는 사용자 ID", example = "1") - @PathVariable("userId") long blockedUserId) { - - blockService.block(userId, blockedUserId); - - return ResponseEntity - .accepted() - .body(new CustomResponse<>()); - } + private final BlockService blockService; + private final FavoriteService favoriteService; + private final ReportService reportService; + private final UserService userService; + + @Operation( + summary = "이성(다른 사용자) 목록 조회", + description = "조건에 따라 다른 사용자 프로필 목록을 조회할 수 있습니다." + ) + @ApiResponse( + responseCode = "200", + description = "이성 목록 정상 조회" + ) + @GetMapping("/users") + public ResponseEntity> users( + @ParameterObject UserQueryRequest request) { + + return ResponseEntity + .ok() + .body(new CustomResponse<>()); + } + + + @Operation(summary = "다른 사용자 프로필 조회", description = "다른 사용자의 프로필을 조회할 수 있습니다.") + @ApiResponse(responseCode = "200", description = "사용자 프로필 정상 조회") + @GetMapping("/users/{userId}") + public ResponseEntity> profile( + @RequestAttribute("userId") long userId, + @Parameter(description = "조회대상 사용자 ID", example = "1") + @PathVariable("userId") long targetUserId) { + + UserProfileResponse response = userService.getTargetUserProfile(userId, targetUserId); + + return ResponseEntity + .ok() + .body(new CustomResponse<>(response)); + } + + @Operation(summary = "즐겨찾기 등록", description = "다른 사용자를 자신의 즐겨찾기에 등록할 수 있습니다.") + @ApiResponse(responseCode = "200", description = "즐겨찾기 등록 정상 처리") + @PostMapping("/favorites/{userId}") + public ResponseEntity> registerFavorite( + @RequestAttribute("userId") long userId, + @Parameter(description = "즐겨찾기에 등록될 사용자 ID", example = "1") + @PathVariable("userId") long favoriteUserId) { + + favoriteService.addFavorite(userId, favoriteUserId); + + return ResponseEntity + .accepted() + .body(new CustomResponse<>()); + } + + @Operation(summary = "즐겨찾기 삭제", description = "즐겨찾기에 등록한 사용자를 삭제합니다.") + @ApiResponse(responseCode = "200", description = "즐겨찾기 삭제 정상 처리") + @DeleteMapping("/favorites/{userId}") + public ResponseEntity> deleteFavorite( + @RequestAttribute("userId") long userId, + @Parameter(description = "즐겨찾기에서 삭제할 사용자 ID", example = "1") + @PathVariable("userId") long favoriteUserId) { + + favoriteService.deleteFavorite(userId, favoriteUserId); + + return ResponseEntity + .accepted() + .body(new CustomResponse<>()); + } + + + @Operation(summary = "사용자 신고", description = "다른 사용자를 신고할 수 있습니다.") + @ApiResponse(responseCode = "200", description = "신고 정상 처리") + @PostMapping("/users/{userId}/report") + public ResponseEntity> report( + @RequestAttribute("userId") long userId, + @Parameter(description = "신고 대상 사용자 ID", example = "1") + @PathVariable("userId") long reportedUserId, + @RequestBody UserReportRequest request) { + + reportService.makeReport( + userId, + reportedUserId, + request); + + return ResponseEntity + .accepted() + .body(new CustomResponse<>()); + } + + @Operation(summary = "차단하기", description = "다른 사용자를 차단할 수 있습니다.") + @ApiResponse(responseCode = "200", description = "차단 요청 정상 처리") + @PostMapping("/users/{userId}/block") + public ResponseEntity> block( + @RequestAttribute("userId") long userId, + @Parameter(description = "차단하는 사용자 ID", example = "1") + @PathVariable("userId") long blockedUserId) { + + blockService.block(userId, blockedUserId); + + return ResponseEntity + .accepted() + .body(new CustomResponse<>()); + } }