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); + } }