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 23510183..96d2ec56 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 @@ -15,6 +15,8 @@ import com.quiz.ourclass.domain.notice.dto.SseDTO; import com.quiz.ourclass.domain.notice.dto.SseType; import com.quiz.ourclass.domain.notice.service.SseService; +import com.quiz.ourclass.domain.organization.entity.Relationship; +import com.quiz.ourclass.domain.organization.repository.RelationshipRepository; import com.quiz.ourclass.global.exception.ErrorCode; import com.quiz.ourclass.global.exception.GlobalException; import com.quiz.ourclass.global.util.RedisUtil; @@ -37,6 +39,7 @@ public class GroupServiceImpl implements GroupService { private final GroupMemberRepository groupMemberRepository; private final MemberRepository memberRepository; private final ChallengeRepository challengeRepository; + private final RelationshipRepository relationshipRepository; private final UserAccessUtil accessUtil; private final RedisUtil redisUtil; private final static String REDIS_GROUP_KEY = "CHALLENGE_LEADER:"; @@ -114,10 +117,28 @@ public long createGroup(String key) { sseService.send(sseDTO); }); groupMemberRepository.saveAll(groupMembers); + updateGroupCount(members, challenge.getOrganization().getId(), group.getGroupType()); redisUtil.delete(key); return group.getId(); } + private void updateGroupCount(Set members, long orgId, GroupType groupType) { + List memberIds = members.stream().map(Long::parseLong).sorted().toList(); + for (int i = 0; i < memberIds.size() - 1; i++) { + for (int j = i + 1; j < memberIds.size(); j++) { + Relationship relationship = relationshipRepository.findByOrganizationIdAndMember1IdAndMember2Id( + orgId, memberIds.get(i), memberIds.get(j)) + .orElseThrow(() -> new GlobalException(ErrorCode.RELATION_NOT_FOUND)); + if (groupType.equals(GroupType.FREE)) { + relationship.updateFreeGroupCount(); + } else { + relationship.updateDesignGroupCount(); + } + } + } + } + + @Transactional @Override public void deleteMatchingMember(String key, Long memberId) { diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/entity/Relationship.java b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/entity/Relationship.java index 0f0c96d6..f0dcb7b4 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/entity/Relationship.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/entity/Relationship.java @@ -24,10 +24,21 @@ public class Relationship { Member member2; int relationPoint; int tagGreetingCount; - int groupCount; + int designGroupCount; + int freeGroupCount; public int updateTagGreetingCount() { this.tagGreetingCount += 1; return this.tagGreetingCount; } + + public int updateDesignGroupCount() { + this.designGroupCount += 1; + return this.designGroupCount; + } + + public int updateFreeGroupCount() { + this.freeGroupCount += 1; + return this.freeGroupCount; + } } diff --git a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/MemberOrgServiceImpl.java b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/MemberOrgServiceImpl.java index 30791386..9adb9388 100644 --- a/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/MemberOrgServiceImpl.java +++ b/backEnd/src/main/java/com/quiz/ourclass/domain/organization/service/MemberOrgServiceImpl.java @@ -85,7 +85,7 @@ public RelationResponse getMemberRelation(long id, RelationRequest relationReque .memberId(targetMember.getId()) .memberName(targetMember.getName()) .relationPoint(relationship.getRelationPoint()) - .groupCount(relationship.getGroupCount()) + .groupCount(relationship.getDesignGroupCount() + relationship.getFreeGroupCount()) .tagGreetingCount(relationship.getTagGreetingCount()) .receiveCount(receiveCount) .sendCount(sendCount).build();