diff --git a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/schedule/controller/MeetingScheduleController.java b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/schedule/controller/MeetingScheduleController.java index a5f105ea..9997fd0d 100644 --- a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/schedule/controller/MeetingScheduleController.java +++ b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/schedule/controller/MeetingScheduleController.java @@ -65,7 +65,6 @@ public ResponseDto inviteMeetingParticipants( @PathVariable Long meetingScheduleId, @Valid @RequestBody MeetingScheduleRequest.PostMeetingParticipantsDto request, @AuthenticationPrincipal SecurityUserDetails memberInfo) { - validateParticipantCount(request.getParticipants().size()); validateUniqueParticipantIds(memberInfo.getUserId(), request.getParticipants()); meetingScheduleUsecase.createMeetingParticipants(meetingScheduleId, request, memberInfo); return ResponseDto.onSuccess("모임 초대 성공"); diff --git a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/schedule/service/ParticipantManageService.java b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/schedule/service/ParticipantManageService.java index 4a852774..13444123 100644 --- a/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/schedule/service/ParticipantManageService.java +++ b/application/external-api-v2/src/main/java/com/namo/spring/application/external/api/schedule/service/ParticipantManageService.java @@ -1,7 +1,6 @@ package com.namo.spring.application.external.api.schedule.service; import com.namo.spring.application.external.api.record.enums.DiaryFilter; -import com.namo.spring.application.external.api.schedule.dto.MeetingScheduleRequest; import com.namo.spring.application.external.global.utils.PeriodValidationUtils; import com.namo.spring.core.common.code.status.ErrorStatus; import com.namo.spring.db.mysql.domains.schedule.entity.Participant; @@ -9,6 +8,7 @@ import com.namo.spring.db.mysql.domains.schedule.exception.ParticipantException; import com.namo.spring.db.mysql.domains.schedule.exception.ScheduleException; import com.namo.spring.db.mysql.domains.schedule.service.ParticipantService; +import com.namo.spring.db.mysql.domains.schedule.type.ParticipantRole; import com.namo.spring.db.mysql.domains.schedule.type.Period; import com.namo.spring.db.mysql.domains.user.entity.Friendship; import com.namo.spring.db.mysql.domains.user.entity.Member; @@ -26,6 +26,8 @@ import java.util.List; import java.util.stream.Collectors; +import static com.namo.spring.application.external.global.utils.MeetingParticipantValidationUtils.validateParticipantCount; + @Slf4j @Service @RequiredArgsConstructor @@ -39,6 +41,8 @@ public void createScheduleOwner(Member member, Schedule schedule, Long categoryI } public void createMeetingParticipants(Member owner, Schedule schedule, List memberIds){ + // 방장의 인원 제외하고 참여자 계산 + validateParticipantCount(schedule.getParticipantCount() - 1 + memberIds.size()); List participants = getFriendshipValidatedParticipants(owner.getId(), memberIds); participantMaker.makeMeetingScheduleParticipants(schedule, participants); List participantNicknames = new ArrayList<>(); @@ -56,6 +60,22 @@ public List getFriendshipValidatedParticipants(Long ownerId, List return friends; } + /** + * 모임 일정에 대한 모든 참여자의 ID를 반환합니다, + * 반환 값에는 활성, 비활성 모든 상태의 참여자가 포함됩니다. + * 모임 일정 초대 인원 수를 검증하기 위해 사용합니다. + * + * @param scheduleId + * @return 모임 일정에 대한 모든 참여자의 ID 배열 + */ + public List getScheduleParticipantIds(Long scheduleId) { + return participantService.readParticipantsByScheduleId(scheduleId).stream() + .filter(participant -> participant.getIsOwner() == ParticipantRole.NON_OWNER.getValue()) + .map(Participant::getMember) + .map(Member::getId) + .collect(Collectors.toList()); + } + /** * scheduleId와 memberId로 찾은 * Participant 객체를 Member, Schedule과 함께 로딩하여 반환합니다. @@ -74,14 +94,6 @@ public void deleteParticipant(Participant participant, Schedule schedule) { schedule.removeParticipant(participant.getMember().getNickname()); } - public void updateMeetingScheduleParticipants(Long ownerId, Schedule schedule, - MeetingScheduleRequest.PatchMeetingScheduleDto dto) { - if (!dto.getParticipantsToAdd().isEmpty()) { - List participantsToAdd = getFriendshipValidatedParticipants(ownerId, dto.getParticipantsToAdd()); - participantMaker.makeMeetingScheduleParticipants(schedule, participantsToAdd); - } - } - private void removeParticipants(Schedule schedule, List participants) { List users = participants.stream().map(Participant::getUser).collect(Collectors.toList()); schedule.removeParticipants(users.stream().map(User::getNickname).collect(Collectors.toList()));