From 7f954358e1287c2bb533ca0b35208fa1e67a4ef5 Mon Sep 17 00:00:00 2001 From: chaewonkim Date: Thu, 22 Aug 2024 17:48:02 +0900 Subject: [PATCH 1/2] [feat] #100 create edit meeting name logic --- .../server/controller/MeetingController.java | 10 ++++++++++ .../org/kkumulkkum/server/domain/Meeting.java | 4 ++++ .../server/service/meeting/MeetingEditor.java | 18 ++++++++++++++++++ .../server/service/meeting/MeetingService.java | 10 ++++++++++ 4 files changed, 42 insertions(+) create mode 100644 src/main/java/org/kkumulkkum/server/service/meeting/MeetingEditor.java diff --git a/src/main/java/org/kkumulkkum/server/controller/MeetingController.java b/src/main/java/org/kkumulkkum/server/controller/MeetingController.java index 3839c07..106b04a 100644 --- a/src/main/java/org/kkumulkkum/server/controller/MeetingController.java +++ b/src/main/java/org/kkumulkkum/server/controller/MeetingController.java @@ -70,4 +70,14 @@ public ResponseEntity getMembers( return ResponseEntity.ok(meetingService.getMembers(meetingId, exclude, userId)); } + @IsMemberByMeetingId(meetingIdParamIndex = 0) + @PatchMapping("/v1/meetings/{meetingId}") + public ResponseEntity updateMeeting( + @PathVariable final Long meetingId, + @Valid @RequestBody final MeetingCreateDto meetingCreateDto + ) { + meetingService.updateMeeting(meetingId, meetingCreateDto); + return ResponseEntity.ok().build(); + } + } diff --git a/src/main/java/org/kkumulkkum/server/domain/Meeting.java b/src/main/java/org/kkumulkkum/server/domain/Meeting.java index 7aace77..7dbb3d4 100644 --- a/src/main/java/org/kkumulkkum/server/domain/Meeting.java +++ b/src/main/java/org/kkumulkkum/server/domain/Meeting.java @@ -31,4 +31,8 @@ public Meeting(String name, String invitationCode) { this.name = name; this.invitationCode = invitationCode; } + + public void updateMeetingName(String name) { + this.name = name; + } } diff --git a/src/main/java/org/kkumulkkum/server/service/meeting/MeetingEditor.java b/src/main/java/org/kkumulkkum/server/service/meeting/MeetingEditor.java new file mode 100644 index 0000000..c67cc2a --- /dev/null +++ b/src/main/java/org/kkumulkkum/server/service/meeting/MeetingEditor.java @@ -0,0 +1,18 @@ +package org.kkumulkkum.server.service.meeting; + +import lombok.RequiredArgsConstructor; +import org.kkumulkkum.server.domain.Meeting; +import org.kkumulkkum.server.dto.meeting.request.MeetingCreateDto; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MeetingEditor { + + public void updateMeetingName( + final Meeting meeting, + final MeetingCreateDto meetingCreateDto + ) { + meeting.updateMeetingName(meetingCreateDto.name()); + } +} diff --git a/src/main/java/org/kkumulkkum/server/service/meeting/MeetingService.java b/src/main/java/org/kkumulkkum/server/service/meeting/MeetingService.java index 4c7d8c8..78e06e7 100644 --- a/src/main/java/org/kkumulkkum/server/service/meeting/MeetingService.java +++ b/src/main/java/org/kkumulkkum/server/service/meeting/MeetingService.java @@ -33,6 +33,7 @@ public class MeetingService { private final UserRetriever userRetriever; private final MemberSaver memberSaver; private final MemberRetreiver memberRetreiver; + private final MeetingEditor meetingEditor; @Transactional public CreatedMeetingDto createMeeting( @@ -95,6 +96,15 @@ public MembersDto getMembers(final Long meetingId, final String exclude, final L return MembersDto.from(members); } + @Transactional + public void updateMeeting( + final Long meetingId, + final MeetingCreateDto meetingCreateDto + ) { + Meeting meeting = meetingRetriever.findById(meetingId); + meetingEditor.updateMeetingName(meeting, meetingCreateDto); + } + private String generateInvitationCode() { String invitationCode; From 435348271c013c736ed5f9a7753dcb8191f40829 Mon Sep 17 00:00:00 2001 From: chaewonkim Date: Thu, 22 Aug 2024 17:56:49 +0900 Subject: [PATCH 2/2] [feat] #100 create leave meeting logic --- .../server/controller/MeetingController.java | 10 ++++++++ .../server/repository/PromiseRepository.java | 2 ++ .../service/meeting/MeetingRemover.java | 16 +++++++++++++ .../service/meeting/MeetingService.java | 24 +++++++++++++++++++ .../server/service/member/MemberRemover.java | 4 ++++ .../service/promise/PromiseRemover.java | 4 ++++ 6 files changed, 60 insertions(+) create mode 100644 src/main/java/org/kkumulkkum/server/service/meeting/MeetingRemover.java diff --git a/src/main/java/org/kkumulkkum/server/controller/MeetingController.java b/src/main/java/org/kkumulkkum/server/controller/MeetingController.java index 106b04a..87f7c72 100644 --- a/src/main/java/org/kkumulkkum/server/controller/MeetingController.java +++ b/src/main/java/org/kkumulkkum/server/controller/MeetingController.java @@ -80,4 +80,14 @@ public ResponseEntity updateMeeting( return ResponseEntity.ok().build(); } + @IsMemberByMeetingId(meetingIdParamIndex = 1) + @DeleteMapping("/v1/meetings/{meetingId}") + public ResponseEntity leaveMeeting( + @UserId final Long userId, + @PathVariable final Long meetingId + ) { + meetingService.leaveMeeting(userId, meetingId); + return ResponseEntity.ok().build(); + } + } diff --git a/src/main/java/org/kkumulkkum/server/repository/PromiseRepository.java b/src/main/java/org/kkumulkkum/server/repository/PromiseRepository.java index 8152b46..b35aab8 100644 --- a/src/main/java/org/kkumulkkum/server/repository/PromiseRepository.java +++ b/src/main/java/org/kkumulkkum/server/repository/PromiseRepository.java @@ -68,4 +68,6 @@ public interface PromiseRepository extends JpaRepository { WHERE pt.promise.id = :promiseId AND m.user.id = :userId""") Promise findByUserIdAndPromiseId(Long userId, Long promiseId); + + void deleteByMeetingId(Long meetingId); } diff --git a/src/main/java/org/kkumulkkum/server/service/meeting/MeetingRemover.java b/src/main/java/org/kkumulkkum/server/service/meeting/MeetingRemover.java new file mode 100644 index 0000000..a368041 --- /dev/null +++ b/src/main/java/org/kkumulkkum/server/service/meeting/MeetingRemover.java @@ -0,0 +1,16 @@ +package org.kkumulkkum.server.service.meeting; + +import lombok.RequiredArgsConstructor; +import org.kkumulkkum.server.repository.MeetingRepository; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MeetingRemover { + + private final MeetingRepository meetingRepository; + + public void deleteById(final Long meetingId) { + meetingRepository.deleteById(meetingId); + } +} diff --git a/src/main/java/org/kkumulkkum/server/service/meeting/MeetingService.java b/src/main/java/org/kkumulkkum/server/service/meeting/MeetingService.java index 78e06e7..03acbf7 100644 --- a/src/main/java/org/kkumulkkum/server/service/meeting/MeetingService.java +++ b/src/main/java/org/kkumulkkum/server/service/meeting/MeetingService.java @@ -14,8 +14,11 @@ import org.kkumulkkum.server.dto.member.response.MembersDto; import org.kkumulkkum.server.exception.MeetingException; import org.kkumulkkum.server.exception.code.MeetingErrorCode; +import org.kkumulkkum.server.service.member.MemberRemover; import org.kkumulkkum.server.service.member.MemberRetreiver; import org.kkumulkkum.server.service.member.MemberSaver; +import org.kkumulkkum.server.service.participant.ParticipantRemover; +import org.kkumulkkum.server.service.promise.PromiseRemover; import org.kkumulkkum.server.service.user.UserRetriever; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,6 +37,10 @@ public class MeetingService { private final MemberSaver memberSaver; private final MemberRetreiver memberRetreiver; private final MeetingEditor meetingEditor; + private final ParticipantRemover participantRemover; + private final MemberRemover memberRemover; + private final PromiseRemover promiseRemover; + private final MeetingRemover meetingRemover; @Transactional public CreatedMeetingDto createMeeting( @@ -105,6 +112,23 @@ public void updateMeeting( meetingEditor.updateMeetingName(meeting, meetingCreateDto); } + @Transactional + public void leaveMeeting( + final Long userId, + final Long meetingId) { + //모임 나가면 참여한 약속도 다 나가기 + Member member = memberRetreiver.findByMeetingIdAndUserId(meetingId, userId); + participantRemover.deleteByMemberId(member.getId()); + memberRemover.deleteById(member.getId()); + + // 모임 내 참여 인원이 전부 탈퇴 or 나가기로 없을 경우(모임 사라지면) 약속도 다 삭제하기 + List remainingMembers = memberRetreiver.findAllByMeetingId(meetingId); + if(remainingMembers.isEmpty()) { + promiseRemover.deleteByMeetingId(meetingId); + meetingRemover.deleteById(meetingId); + } + } + private String generateInvitationCode() { String invitationCode; diff --git a/src/main/java/org/kkumulkkum/server/service/member/MemberRemover.java b/src/main/java/org/kkumulkkum/server/service/member/MemberRemover.java index aa60d01..31e9d14 100644 --- a/src/main/java/org/kkumulkkum/server/service/member/MemberRemover.java +++ b/src/main/java/org/kkumulkkum/server/service/member/MemberRemover.java @@ -16,4 +16,8 @@ public class MemberRemover { public void deleteAll(final List members) { memberRepository.deleteAll(members); } + + public void deleteById(final Long memberId) { + memberRepository.deleteById(memberId); + } } diff --git a/src/main/java/org/kkumulkkum/server/service/promise/PromiseRemover.java b/src/main/java/org/kkumulkkum/server/service/promise/PromiseRemover.java index e972c74..60a1b62 100644 --- a/src/main/java/org/kkumulkkum/server/service/promise/PromiseRemover.java +++ b/src/main/java/org/kkumulkkum/server/service/promise/PromiseRemover.java @@ -13,4 +13,8 @@ public class PromiseRemover { public void deleteById(final Long promiseId) { promiseRepository.deleteById(promiseId); } + + public void deleteByMeetingId(final Long meetingId) { + promiseRepository.deleteByMeetingId(meetingId); + } } \ No newline at end of file