diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/repository/ChallengeGroupRepository.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/repository/ChallengeGroupRepository.java index 3b5d5b45..e5d3124c 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/repository/ChallengeGroupRepository.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/repository/ChallengeGroupRepository.java @@ -13,4 +13,6 @@ public interface ChallengeGroupRepository extends JpaRepository findDistinctChallengeGroupByChallengeAndGroupMembersMember( Challenge challenge, Member member); + + Optional findByLeaderIdAndCreateTimeIsNull(long leaderId); } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/GroupServiceImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/GroupServiceImpl.java index e3b6c19c..d7a3d41b 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/GroupServiceImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/challenge/service/GroupServiceImpl.java @@ -111,31 +111,35 @@ public long createGroup(String key) { } long leaderId = getLeaderIdFromKey(key); LocalDateTime createTime = LocalDateTime.now(); - ChallengeGroup group = ChallengeGroup.builder() + Optional designGroup = challengeGroupRepository.findByLeaderIdAndCreateTimeIsNull( + leaderId); + ChallengeGroup group = designGroup.orElseGet(() -> ChallengeGroup.builder() .challenge(challenge) .leaderId(leaderId) .groupType(GroupType.FREE) .headCount(members.size()) .completeStatus(false) - .createTime(createTime) - .build(); + .build()); + group.setCreateTime(createTime); challengeGroupRepository.save(group); - List groupMembers = members.stream().map(Long::parseLong) - .map(memberRepository::findById) - .filter(Optional::isPresent) - .map(Optional::get) - .map(member -> GroupMember.builder().member(member).challengeGroup(group).build()) - .toList(); - groupMembers.forEach(member -> { + if (designGroup.isEmpty()) { + List groupMembers = members.stream().map(Long::parseLong) + .map(memberRepository::findById) + .filter(Optional::isPresent) + .map(Optional::get) + .map(member -> GroupMember.builder().member(member).challengeGroup(group).build()) + .toList(); + groupMemberRepository.saveAll(groupMembers); + } + members.forEach(member -> { SseDTO sseDTO = SseDTO.builder() .eventType(SseType.CREATE_GROUP) - .receiverId(member.getMember().getId()) + .receiverId(Long.valueOf(member)) .time(createTime) .build(); sseService.send(sseDTO); }); - groupMemberRepository.saveAll(groupMembers); - challenge.updateHeadCount(groupMembers.size()); + challenge.updateHeadCount(members.size()); updateGroupCount(members, challenge.getOrganization().getId(), group.getGroupType()); redisUtil.delete(key); return group.getId();