diff --git a/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberJdbcRepository.java b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberJdbcRepository.java new file mode 100644 index 000000000..9a7b2e8b5 --- /dev/null +++ b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberJdbcRepository.java @@ -0,0 +1,9 @@ +package co.kirikiri.persistence.goalroom; + +import co.kirikiri.domain.goalroom.GoalRoomMember; +import java.util.List; + +public interface GoalRoomMemberJdbcRepository { + + void saveAllInBatch(final List goalRoomMembers); +} diff --git a/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberJdbcRepositoryImpl.java b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberJdbcRepositoryImpl.java new file mode 100644 index 000000000..28758b191 --- /dev/null +++ b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberJdbcRepositoryImpl.java @@ -0,0 +1,30 @@ +package co.kirikiri.persistence.goalroom; + +import co.kirikiri.domain.goalroom.GoalRoomMember; +import java.util.List; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +@Repository +public class GoalRoomMemberJdbcRepositoryImpl implements GoalRoomMemberJdbcRepository { + + private final JdbcTemplate jdbcTemplate; + + public GoalRoomMemberJdbcRepositoryImpl(final JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + @Override + public void saveAllInBatch(final List goalRoomMembers) { + final String sql = "INSERT INTO goal_room_member " + + "(goal_room_id, member_id, role, joined_at, accomplishment_rate) " + + "VALUES (?, ?, ?, ?, ?)"; + jdbcTemplate.batchUpdate(sql, goalRoomMembers, goalRoomMembers.size(), ((ps, goalRoomMember) -> { + ps.setLong(1, goalRoomMember.getGoalRoom().getId()); + ps.setLong(2, goalRoomMember.getMember().getId()); + ps.setString(3, goalRoomMember.getRole().name()); + ps.setObject(4, goalRoomMember.getJoinedAt()); + ps.setDouble(5, goalRoomMember.getAccomplishmentRate()); + })); + } +} diff --git a/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberRepository.java b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberRepository.java index 88246c784..aa1f912c8 100644 --- a/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberRepository.java +++ b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomMemberRepository.java @@ -3,13 +3,14 @@ import co.kirikiri.domain.goalroom.GoalRoom; import co.kirikiri.domain.goalroom.GoalRoomMember; import co.kirikiri.domain.member.vo.Identifier; +import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import java.util.List; -import java.util.Optional; -public interface GoalRoomMemberRepository extends JpaRepository, GoalRoomMemberQueryRepository { +public interface GoalRoomMemberRepository extends JpaRepository, + GoalRoomMemberQueryRepository, GoalRoomMemberJdbcRepository { @Query("select gm from GoalRoomMember gm " + "inner join fetch gm.goalRoom g " diff --git a/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomPendingMemberRepository.java b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomPendingMemberRepository.java index 1c8913d9f..cdd2d45db 100644 --- a/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomPendingMemberRepository.java +++ b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomPendingMemberRepository.java @@ -3,11 +3,12 @@ import co.kirikiri.domain.goalroom.GoalRoom; import co.kirikiri.domain.goalroom.GoalRoomPendingMember; import co.kirikiri.domain.member.vo.Identifier; +import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import java.util.List; -import java.util.Optional; public interface GoalRoomPendingMemberRepository extends JpaRepository, GoalRoomPendingMemberQueryRepository { @@ -28,4 +29,8 @@ Optional findByGoalRoomAndMemberIdentifier( + "where g=:goalRoom " + "and gp.member = m") List findAllByGoalRoom(@Param("goalRoom") final GoalRoom goalRoom); + + @Modifying + @Query("DELETE FROM GoalRoomPendingMember gp WHERE gp.id IN :ids") + void deleteAllByIdIn(@Param("ids") final List ids); } diff --git a/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomQueryRepositoryImpl.java b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomQueryRepositoryImpl.java index 086bb5e13..dad601666 100644 --- a/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomQueryRepositoryImpl.java +++ b/backend/kirikiri/src/main/java/co/kirikiri/persistence/goalroom/GoalRoomQueryRepositoryImpl.java @@ -127,6 +127,8 @@ public List findByRoadmap(final Roadmap roadmap) { @Override public List findAllRecruitingGoalRoomsByStartDateEarlierThan(final LocalDate date) { return selectFrom(goalRoom) + .innerJoin(goalRoom.goalRoomPendingMembers.values, goalRoomPendingMember) + .fetchJoin() .where(statusCond(GoalRoomStatus.RECRUITING)) .where(equalOrEarlierStartDateThan(date)) .fetch(); diff --git a/backend/kirikiri/src/main/java/co/kirikiri/service/scheduler/GoalRoomScheduler.java b/backend/kirikiri/src/main/java/co/kirikiri/service/scheduler/GoalRoomScheduler.java index 14313dc59..71792ac6b 100644 --- a/backend/kirikiri/src/main/java/co/kirikiri/service/scheduler/GoalRoomScheduler.java +++ b/backend/kirikiri/src/main/java/co/kirikiri/service/scheduler/GoalRoomScheduler.java @@ -1,8 +1,11 @@ package co.kirikiri.service.scheduler; +import co.kirikiri.domain.BaseEntity; import co.kirikiri.domain.goalroom.GoalRoom; import co.kirikiri.domain.goalroom.GoalRoomMember; import co.kirikiri.domain.goalroom.GoalRoomPendingMember; +import co.kirikiri.persistence.goalroom.GoalRoomMemberRepository; +import co.kirikiri.persistence.goalroom.GoalRoomPendingMemberRepository; import co.kirikiri.persistence.goalroom.GoalRoomRepository; import co.kirikiri.service.aop.ExceptionConvert; import java.time.LocalDate; @@ -19,6 +22,8 @@ public class GoalRoomScheduler { private final GoalRoomRepository goalRoomRepository; + private final GoalRoomPendingMemberRepository goalRoomPendingMemberRepository; + private final GoalRoomMemberRepository goalRoomMemberRepository; @Scheduled(cron = "0 0 0 * * *") public void startGoalRooms() { @@ -26,16 +31,16 @@ public void startGoalRooms() { LocalDate.now()); for (final GoalRoom goalRoom : goalRoomsToStart) { final List goalRoomPendingMembers = goalRoom.getGoalRoomPendingMembers().getValues(); - saveGoalRoomMemberFromPendingMembers(goalRoomPendingMembers, goalRoom); + saveGoalRoomMemberFromPendingMembers(goalRoomPendingMembers); goalRoom.start(); } } - private void saveGoalRoomMemberFromPendingMembers(final List goalRoomPendingMembers, - final GoalRoom goalRoom) { + private void saveGoalRoomMemberFromPendingMembers(final List goalRoomPendingMembers) { final List goalRoomMembers = makeGoalRoomMembers(goalRoomPendingMembers); - goalRoom.addAllGoalRoomMembers(goalRoomMembers); - goalRoom.deleteAllPendingMembers(); + goalRoomMemberRepository.saveAllInBatch(goalRoomMembers); + final List ids = makeGoalRoomPendingMemberIds(goalRoomPendingMembers); + goalRoomPendingMemberRepository.deleteAllByIdIn(ids); } private List makeGoalRoomMembers(final List goalRoomPendingMembers) { @@ -45,9 +50,14 @@ private List makeGoalRoomMembers(final List makeGoalRoomPendingMemberIds(final List goalRoomPendingMembers) { + return goalRoomPendingMembers.stream() + .map(BaseEntity::getId) + .toList(); } @Scheduled(cron = "0 0 4 * * *") diff --git a/backend/kirikiri/src/test/java/co/kirikiri/integration/GoalRoomSchedulerIntegrationTest.java b/backend/kirikiri/src/test/java/co/kirikiri/integration/GoalRoomSchedulerIntegrationTest.java index 962b53b67..f4f5e9399 100644 --- a/backend/kirikiri/src/test/java/co/kirikiri/integration/GoalRoomSchedulerIntegrationTest.java +++ b/backend/kirikiri/src/test/java/co/kirikiri/integration/GoalRoomSchedulerIntegrationTest.java @@ -26,7 +26,6 @@ import co.kirikiri.integration.helper.InitIntegrationTest; import co.kirikiri.persistence.goalroom.GoalRoomMemberRepository; import co.kirikiri.persistence.goalroom.GoalRoomPendingMemberRepository; -import co.kirikiri.service.scheduler.GoalRoomScheduler; import co.kirikiri.service.dto.auth.request.LoginRequest; import co.kirikiri.service.dto.goalroom.request.GoalRoomCreateRequest; import co.kirikiri.service.dto.goalroom.request.GoalRoomRoadmapNodeRequest; @@ -34,9 +33,10 @@ import co.kirikiri.service.dto.member.request.MemberJoinRequest; import co.kirikiri.service.dto.member.response.MemberGoalRoomResponse; import co.kirikiri.service.dto.roadmap.response.RoadmapResponse; -import org.junit.jupiter.api.Test; +import co.kirikiri.service.scheduler.GoalRoomScheduler; import java.io.IOException; import java.util.List; +import org.junit.jupiter.api.Test; class GoalRoomSchedulerIntegrationTest extends InitIntegrationTest { diff --git a/backend/kirikiri/src/test/java/co/kirikiri/integration/helper/TestTransactionService.java b/backend/kirikiri/src/test/java/co/kirikiri/integration/helper/TestTransactionService.java index 5d4b7ec6f..accf118e2 100644 --- a/backend/kirikiri/src/test/java/co/kirikiri/integration/helper/TestTransactionService.java +++ b/backend/kirikiri/src/test/java/co/kirikiri/integration/helper/TestTransactionService.java @@ -88,7 +88,7 @@ public TestTransactionService(final GoalRoomRepository goalRoomRepository, } public void 골룸_멤버를_저장한다(final List 골룸_멤버_리스트) { - goalRoomMemberRepository.saveAll(골룸_멤버_리스트); + goalRoomMemberRepository.saveAllInBatch(골룸_멤버_리스트); } public void 골룸의_상태와_종료날짜를_변경한다(final Long 골룸_아이디, final GoalRoomStatus 골룸_상태, final LocalDate 변경할_종료날짜) { diff --git a/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/CheckFeedRepositoryTest.java b/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/CheckFeedRepositoryTest.java index 54f04deca..f4eb535ee 100644 --- a/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/CheckFeedRepositoryTest.java +++ b/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/CheckFeedRepositoryTest.java @@ -34,10 +34,10 @@ import co.kirikiri.persistence.member.MemberRepository; import co.kirikiri.persistence.roadmap.RoadmapCategoryRepository; import co.kirikiri.persistence.roadmap.RoadmapRepository; -import org.junit.jupiter.api.Test; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; +import org.junit.jupiter.api.Test; @RepositoryTest class CheckFeedRepositoryTest { @@ -86,7 +86,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, final GoalRoomMember leader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom, creator); final GoalRoomMember joinedMember = new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), goalRoom, member); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode = goalRoom.getGoalRoomRoadmapNodes().getValues().get(0); 인증_피드를_저장한다(goalRoomRoadmapNode, joinedMember); @@ -120,7 +120,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, final GoalRoomMember leader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom, creator); final GoalRoomMember joinedMember = new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), goalRoom, member); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode = goalRoom.getGoalRoomRoadmapNodes().getValues().get(0); 인증_피드를_저장한다(goalRoomRoadmapNode, joinedMember); @@ -151,7 +151,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, final GoalRoomMember leader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom, creator); final GoalRoomMember joinedMember = new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), goalRoom, member); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode1 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(0); final GoalRoomRoadmapNode goalRoomRoadmapNode2 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(1); @@ -188,7 +188,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, member); final GoalRoomMember otherLeader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom2, creator); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode1 = goalRoom1.getGoalRoomRoadmapNodes().getValues().get(0); final GoalRoomRoadmapNode goalRoomRoadmapNode2 = goalRoom1.getGoalRoomRoadmapNodes().getValues().get(1); @@ -226,7 +226,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, final GoalRoomMember leader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom, creator); final GoalRoomMember joinedMember = new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), goalRoom, member); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode1 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(0); final GoalRoomRoadmapNode goalRoomRoadmapNode2 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(1); @@ -269,7 +269,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, final GoalRoomMember leader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom, creator); final GoalRoomMember joinedMember = new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), goalRoom, member); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode1 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(0); final GoalRoomRoadmapNode goalRoomRoadmapNode2 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(1); @@ -303,7 +303,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, final GoalRoomMember leader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom, creator); final GoalRoomMember joinedMember = new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), goalRoom, member); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode1 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(0); final GoalRoomRoadmapNode goalRoomRoadmapNode2 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(1); @@ -348,7 +348,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, final GoalRoomMember leader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom, creator); final GoalRoomMember joinedMember = new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), goalRoom, member); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode1 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(0); final GoalRoomRoadmapNode goalRoomRoadmapNode2 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(1); @@ -407,7 +407,7 @@ public CheckFeedRepositoryTest(final MemberRepository memberRepository, final GoalRoomMember leader = new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), goalRoom, creator); final GoalRoomMember joinedMember = new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), goalRoom, member); - goalRoomMemberRepository.saveAll(List.of(leader, joinedMember)); + goalRoomMemberRepository.saveAllInBatch(List.of(leader, joinedMember)); final GoalRoomRoadmapNode goalRoomRoadmapNode1 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(0); final GoalRoomRoadmapNode goalRoomRoadmapNode2 = goalRoom.getGoalRoomRoadmapNodes().getValues().get(1); diff --git a/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/GoalRoomMemberRepositoryTest.java b/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/GoalRoomMemberRepositoryTest.java index 7100454e9..5fed7fa95 100644 --- a/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/GoalRoomMemberRepositoryTest.java +++ b/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/GoalRoomMemberRepositoryTest.java @@ -33,12 +33,12 @@ import co.kirikiri.persistence.member.MemberRepository; import co.kirikiri.persistence.roadmap.RoadmapCategoryRepository; import co.kirikiri.persistence.roadmap.RoadmapRepository; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.Test; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; @RepositoryTest class GoalRoomMemberRepositoryTest { @@ -296,11 +296,13 @@ public GoalRoomMemberRepositoryTest(final MemberRepository memberRepository, private Member 크리에이터를_저장한다() { final MemberImage memberImage = new MemberImage("originalFileName", "serverFilePath", ImageContentType.JPG); final MemberProfile memberProfile = new MemberProfile(Gender.MALE, "kirikiri1@email.com"); - final Member creator = new Member(1L, new Identifier("cokirikiri"), null, new EncryptedPassword(new Password("password1!")), new Nickname("코끼리"), memberImage, memberProfile); + final Member creator = new Member(1L, new Identifier("cokirikiri"), null, + new EncryptedPassword(new Password("password1!")), new Nickname("코끼리"), memberImage, memberProfile); return memberRepository.save(creator); } - private Member 사용자를_생성한다(final String identifier, final String password, final String nickname, final String email) { + private Member 사용자를_생성한다(final String identifier, final String password, final String nickname, + final String email) { final MemberProfile memberProfile = new MemberProfile(Gender.MALE, email); final Member member = new Member(new Identifier(identifier), new EncryptedPassword(new Password(password)), new Nickname(nickname), diff --git a/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/GoalRoomToDoCheckRepositoryTest.java b/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/GoalRoomToDoCheckRepositoryTest.java index d62e38a7a..2d7ebd328 100644 --- a/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/GoalRoomToDoCheckRepositoryTest.java +++ b/backend/kirikiri/src/test/java/co/kirikiri/persistence/goalroom/GoalRoomToDoCheckRepositoryTest.java @@ -30,10 +30,10 @@ import co.kirikiri.persistence.member.MemberRepository; import co.kirikiri.persistence.roadmap.RoadmapCategoryRepository; import co.kirikiri.persistence.roadmap.RoadmapRepository; -import org.junit.jupiter.api.Test; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; +import org.junit.jupiter.api.Test; @RepositoryTest class GoalRoomToDoCheckRepositoryTest { diff --git a/backend/kirikiri/src/test/java/co/kirikiri/persistence/roadmap/RoadmapRepositoryTest.java b/backend/kirikiri/src/test/java/co/kirikiri/persistence/roadmap/RoadmapRepositoryTest.java index 3021665bd..83ab3ff56 100644 --- a/backend/kirikiri/src/test/java/co/kirikiri/persistence/roadmap/RoadmapRepositoryTest.java +++ b/backend/kirikiri/src/test/java/co/kirikiri/persistence/roadmap/RoadmapRepositoryTest.java @@ -37,11 +37,11 @@ import co.kirikiri.persistence.goalroom.GoalRoomRepository; import co.kirikiri.persistence.helper.RepositoryTest; import co.kirikiri.persistence.member.MemberRepository; -import org.junit.jupiter.api.Test; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; +import org.junit.jupiter.api.Test; @RepositoryTest class RoadmapRepositoryTest { @@ -249,13 +249,13 @@ public RoadmapRepositoryTest(final MemberRepository memberRepository, // gameRoadmap2 : 참가인원 1명 final List gameRoadmap2GoalRoomMembers = List.of( new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), gameRoadmap2GoalRoom, creator)); - goalRoomMemberRepository.saveAll(gameRoadmap2GoalRoomMembers); + goalRoomMemberRepository.saveAllInBatch(gameRoadmap2GoalRoomMembers); // travelRoadmap : 참가인원 2명 final List travelRoadmapGoalRoomMembers = List.of( new GoalRoomMember(GoalRoomRole.LEADER, LocalDateTime.now(), travelRoadmapGoalRoom, creator), new GoalRoomMember(GoalRoomRole.FOLLOWER, LocalDateTime.now(), travelRoadmapGoalRoom, follower)); - goalRoomMemberRepository.saveAll(travelRoadmapGoalRoomMembers); + goalRoomMemberRepository.saveAllInBatch(travelRoadmapGoalRoomMembers); final RoadmapCategory category = null; final RoadmapOrderType orderType = RoadmapOrderType.PARTICIPANT_COUNT; diff --git a/backend/kirikiri/src/test/java/co/kirikiri/service/GoalRoomSchedulerTest.java b/backend/kirikiri/src/test/java/co/kirikiri/service/GoalRoomSchedulerTest.java index 3fbbf325e..f4118210d 100644 --- a/backend/kirikiri/src/test/java/co/kirikiri/service/GoalRoomSchedulerTest.java +++ b/backend/kirikiri/src/test/java/co/kirikiri/service/GoalRoomSchedulerTest.java @@ -4,9 +4,8 @@ import static co.kirikiri.domain.goalroom.GoalRoomStatus.RUNNING; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyList; -import static org.mockito.Mockito.times; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -39,15 +38,15 @@ import co.kirikiri.persistence.goalroom.GoalRoomPendingMemberRepository; import co.kirikiri.persistence.goalroom.GoalRoomRepository; import co.kirikiri.service.scheduler.GoalRoomScheduler; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.Collections; -import java.util.List; @ExtendWith(MockitoExtension.class) class GoalRoomSchedulerTest { @@ -59,11 +58,11 @@ class GoalRoomSchedulerTest { @Mock private GoalRoomRepository goalRoomRepository; - @Mock - private GoalRoomMemberRepository goalRoomMemberRepository; - @Mock private GoalRoomPendingMemberRepository goalRoomPendingMemberRepository; + + @Mock + private GoalRoomMemberRepository goalRoomMemberRepository; @InjectMocks private GoalRoomScheduler goalRoomScheduler; @@ -83,9 +82,9 @@ class GoalRoomSchedulerTest { final Member follower2 = 사용자를_생성한다(3L, "identifier2", "password3!", "name2", "kirikiri@email.com"); final Member follower3 = 사용자를_생성한다(4L, "identifier3", "password4!", "name3", "kirikiri@email.com"); - final GoalRoomPendingMember goalRoomPendingMember = 골룸_대기자를_생성한다(goalRoom2, creator, GoalRoomRole.FOLLOWER); - final GoalRoomPendingMember goalRoomPendingMember1 = 골룸_대기자를_생성한다(goalRoom1, follower1, GoalRoomRole.FOLLOWER); - final GoalRoomPendingMember goalRoomPendingMember2 = 골룸_대기자를_생성한다(goalRoom1, follower2, GoalRoomRole.FOLLOWER); + 골룸_대기자를_생성한다(goalRoom2, creator, GoalRoomRole.FOLLOWER); + 골룸_대기자를_생성한다(goalRoom1, follower1, GoalRoomRole.FOLLOWER); + 골룸_대기자를_생성한다(goalRoom1, follower2, GoalRoomRole.FOLLOWER); goalRoom1.join(follower1); goalRoom1.join(follower2); @@ -130,9 +129,7 @@ class GoalRoomSchedulerTest { goalRoomScheduler.startGoalRooms(); // then - verify(goalRoomPendingMemberRepository, times(0)).findAllByGoalRoom(any()); - verify(goalRoomMemberRepository, times(0)).saveAll(anyList()); - verify(goalRoomPendingMemberRepository, times(0)).deleteAll(anyList()); + verify(goalRoomPendingMemberRepository, never()).deleteAllByIdIn(anyList()); assertAll( () -> assertThat(goalRoom1.getStatus()).isEqualTo(RECRUITING),