From d62022a9613bef99f463b93cfb3e59159736b171 Mon Sep 17 00:00:00 2001 From: SSung023 Date: Sun, 27 Apr 2025 21:37:13 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=81=AC=EB=A3=A8=20=ED=83=88=ED=87=B4?= =?UTF-8?q?=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 인증된 사용자가 특정 크루에 대해 탈퇴하는 API 개발 - 크루 내 역할이 LEADER가 아닌 경우에만 가능 - LEADER인 경우 LEADER_CANNOT_EXPEL 예외 발생 --- .../business/crew/controller/CrewController.java | 9 ++++++++- .../herewe/business/crew/facade/CrewFacade.java | 2 ++ .../business/crew/facade/DefaultCrewFacade.java | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/genius/herewe/business/crew/controller/CrewController.java b/src/main/java/com/genius/herewe/business/crew/controller/CrewController.java index babbd67..57f03bf 100644 --- a/src/main/java/com/genius/herewe/business/crew/controller/CrewController.java +++ b/src/main/java/com/genius/herewe/business/crew/controller/CrewController.java @@ -43,7 +43,7 @@ public class CrewController implements CrewApi { @GetMapping("/profile/{crewId}") public SingleResponse inquiryCrewProfile(@HereWeUser User user, - @PathVariable Long crewId) { + @PathVariable Long crewId) { CrewProfileResponse crewProfileResponse = crewFacade.inquiryCrewProfile(user.getId(), crewId); return new SingleResponse<>(HttpStatus.OK, crewProfileResponse); } @@ -126,4 +126,11 @@ public CommonResponse expelCrew( return CommonResponse.ok(); } + + @DeleteMapping("/{crewId}/members/me") + public CommonResponse quitCrew(@HereWeUser User user, + @PathVariable Long crewId) { + crewFacade.quitCrew(user.getId(), crewId); + return CommonResponse.ok(); + } } diff --git a/src/main/java/com/genius/herewe/business/crew/facade/CrewFacade.java b/src/main/java/com/genius/herewe/business/crew/facade/CrewFacade.java index 3dd4396..c60865f 100644 --- a/src/main/java/com/genius/herewe/business/crew/facade/CrewFacade.java +++ b/src/main/java/com/genius/herewe/business/crew/facade/CrewFacade.java @@ -27,4 +27,6 @@ public interface CrewFacade { void deleteCrew(Long crewId); void expelCrew(Long userId, CrewExpelRequest expelRequest); + + void quitCrew(Long userId, Long crewId); } diff --git a/src/main/java/com/genius/herewe/business/crew/facade/DefaultCrewFacade.java b/src/main/java/com/genius/herewe/business/crew/facade/DefaultCrewFacade.java index 47e18fc..62e9213 100644 --- a/src/main/java/com/genius/herewe/business/crew/facade/DefaultCrewFacade.java +++ b/src/main/java/com/genius/herewe/business/crew/facade/DefaultCrewFacade.java @@ -125,4 +125,19 @@ public void expelCrew(Long userId, CrewExpelRequest expelRequest) { crewMemberService.delete(crewMember); crew.updateParticipantCount(-1); } + + @Override + @Transactional + public void quitCrew(Long userId, Long crewId) { + User user = userService.findById(userId); + Crew crew = crewService.findById(crewId); + + CrewMember crewMember = crewMemberService.find(userId, crewId); + if (crewMember.getRole() == CrewRole.LEADER) { + throw new BusinessException(LEADER_CANNOT_EXPEL); + } + + crewMemberService.delete(crewMember); + crew.updateParticipantCount(-1); + } }