diff --git a/Server/src/main/java/JGS/CasperEvent/domain/event/controller/adminController/AdminController.java b/Server/src/main/java/JGS/CasperEvent/domain/event/controller/adminController/AdminController.java index 8d65a24b..9392d61d 100644 --- a/Server/src/main/java/JGS/CasperEvent/domain/event/controller/adminController/AdminController.java +++ b/Server/src/main/java/JGS/CasperEvent/domain/event/controller/adminController/AdminController.java @@ -12,7 +12,6 @@ import JGS.CasperEvent.domain.event.dto.ResponseDto.rushEventResponseDto.AdminRushEventResponseDto; import JGS.CasperEvent.domain.event.dto.ResponseDto.rushEventResponseDto.LotteryEventWinnerListResponseDto; import JGS.CasperEvent.domain.event.dto.ResponseDto.rushEventResponseDto.RushEventParticipantsListResponseDto; -import JGS.CasperEvent.domain.event.repository.eventRepository.LotteryEventRepository; import JGS.CasperEvent.domain.event.service.adminService.AdminService; import JGS.CasperEvent.global.response.ResponseDto; import jakarta.validation.Valid; diff --git a/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/LotteryParticipantsRepository.java b/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/LotteryParticipantsRepository.java index afa38bb3..b2a2327c 100644 --- a/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/LotteryParticipantsRepository.java +++ b/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/LotteryParticipantsRepository.java @@ -2,9 +2,11 @@ import JGS.CasperEvent.domain.event.entity.participants.LotteryParticipants; import JGS.CasperEvent.global.entity.BaseUser; +import io.lettuce.core.dynamic.annotation.Param; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.Optional; @@ -13,6 +15,10 @@ public interface LotteryParticipantsRepository extends JpaRepository { Optional findByBaseUser(BaseUser baseUser); - Page findByBaseUser_Id(String id, Pageable pageable); + @Query("SELECT p FROM LotteryParticipants p WHERE p.baseUser.id LIKE :id%") + Page findByBaseUser_Id(@Param("id") String id, Pageable pageable); + + @Query("SELECT COUNT(p) FROM LotteryParticipants p WHERE p.baseUser.id LIKE :id%") + long countByBaseUser_Id(@Param("id") String id); } diff --git a/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/LotteryWinnerRepository.java b/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/LotteryWinnerRepository.java index 72ba907c..e1738855 100644 --- a/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/LotteryWinnerRepository.java +++ b/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/LotteryWinnerRepository.java @@ -1,12 +1,17 @@ package JGS.CasperEvent.domain.event.repository.participantsRepository; import JGS.CasperEvent.domain.event.entity.participants.LotteryWinners; +import io.lettuce.core.dynamic.annotation.Param; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository public interface LotteryWinnerRepository extends JpaRepository { - Page findByPhoneNumber(String phoneNumber, Pageable pageable); -} + @Query("SELECT w FROM LotteryWinners w WHERE w.phoneNumber LIKE :phoneNumber%") + Page findByPhoneNumber(@Param("phoneNumber") String phoneNumber, Pageable pageable); + + @Query("SELECT COUNT(w) FROM LotteryWinners w WHERE w.phoneNumber LIKE :phoneNumber%") + long countByPhoneNumber(@Param("phoneNumber") String phoneNumber);} diff --git a/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/RushParticipantsRepository.java b/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/RushParticipantsRepository.java index 81f272a2..e5b7e37a 100644 --- a/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/RushParticipantsRepository.java +++ b/Server/src/main/java/JGS/CasperEvent/domain/event/repository/participantsRepository/RushParticipantsRepository.java @@ -33,11 +33,13 @@ long findUserRankByEventIdAndUserIdAndOptionId(@Param("eventId") Long eventId, Page findByRushEvent_RushEventId(Long rushEventId, Pageable pageable); - Page findByRushEvent_RushEventIdAndBaseUser_Id(Long rushEventId, String baseUser_id, Pageable pageable); + @Query("SELECT p FROM RushParticipants p WHERE p.rushEvent.rushEventId = :rushEventId AND p.baseUser.id LIKE :baseUserId%") + Page findByRushEvent_RushEventIdAndBaseUser_Id(@Param("rushEventId") Long rushEventId, @Param("baseUserId") String baseUserId, Pageable pageable); Page findByRushEvent_RushEventIdAndOptionId(Long rushEventId, int optionId, Pageable pageable); - Page findByRushEvent_RushEventIdAndOptionIdAndBaseUser_Id(Long rushEventId, int optionId, String baseUser_id, Pageable pageable); + @Query("SELECT p FROM RushParticipants p WHERE p.rushEvent.rushEventId = :rushEventId AND p.optionId = :optionId AND p.baseUser.id LIKE :baseUserId%") + Page findByRushEvent_RushEventIdAndOptionIdAndBaseUser_Id(@Param("rushEventId") Long rushEventId, @Param("optionId") int optionId, @Param("baseUserId") String baseUserId, Pageable pageable); @Query("SELECT rp FROM RushParticipants rp " + @@ -50,7 +52,7 @@ Page findWinnerByEventIdAndOptionId( @Query("SELECT rp FROM RushParticipants rp " + "WHERE rp.rushEvent.rushEventId = :eventId " + "AND rp.optionId = :optionId " + - "AND rp.baseUser.id = :phoneNumber " + + "AND rp.baseUser.id LIKE :phoneNumber% " + "ORDER BY rp.id ASC ") Page findWinnerByEventIdAndOptionIdAndPhoneNumber( @Param("eventId") Long eventId, @Param("optionId") int optionId, @Param("phoneNumber") String phoneNumber, Pageable pageable @@ -64,14 +66,15 @@ Page findWinnerByEventIdAndOptionIdAndPhoneNumber( @Query("SELECT rp FROM RushParticipants rp " + "WHERE rp.rushEvent.rushEventId = :eventId " + - "AND rp.baseUser.id = :phoneNumber " + + "AND rp.baseUser.id LIKE :phoneNumber% " + "ORDER BY rp.id ASC ") Page findByWinnerByEventIdAndPhoneNumber(@Param("eventId") Long eventId, @Param("phoneNumber") String phoneNumber, Pageable pageable); - long countByRushEvent_RushEventIdAndOptionIdAndBaseUser_Id(long rushEventId, int optionId, String id); + @Query("SELECT COUNT(p) FROM RushParticipants p WHERE p.rushEvent.rushEventId = :rushEventId AND p.optionId = :optionId AND p.baseUser.id LIKE :baseUserId%") + long countByRushEvent_RushEventIdAndOptionIdAndBaseUser_Id(@Param("rushEventId") Long rushEventId, @Param("optionId") int optionId, @Param("baseUserId") String baseUserId); long countByRushEvent_RushEventId(long rushEventId); - long countByRushEvent_RushEventIdAndBaseUser_Id(long rushEventId, String phoneNumber); - -} + @Query("SELECT COUNT(p) FROM RushParticipants p WHERE p.rushEvent.rushEventId = :rushEventId AND p.baseUser.id LIKE :baseUserId%") + long countByRushEvent_RushEventIdAndBaseUser_Id(@Param("rushEventId") Long rushEventId, @Param("baseUserId") String baseUserId); +} \ No newline at end of file diff --git a/Server/src/main/java/JGS/CasperEvent/domain/event/service/adminService/AdminService.java b/Server/src/main/java/JGS/CasperEvent/domain/event/service/adminService/AdminService.java index eb0c46c3..6ea49128 100644 --- a/Server/src/main/java/JGS/CasperEvent/domain/event/service/adminService/AdminService.java +++ b/Server/src/main/java/JGS/CasperEvent/domain/event/service/adminService/AdminService.java @@ -102,8 +102,14 @@ public LotteryEventParticipantsListResponseDto getLotteryEventParticipants(int s Pageable pageable = PageRequest.of(page, size); Page lotteryParticipantsPage = null; - if (phoneNumber.isEmpty()) lotteryParticipantsPage = lotteryParticipantsRepository.findAll(pageable); - else lotteryParticipantsPage = lotteryParticipantsRepository.findByBaseUser_Id(phoneNumber, pageable); + long count; + if (phoneNumber.isEmpty()) { + lotteryParticipantsPage = lotteryParticipantsRepository.findAll(pageable); + count = lotteryParticipantsRepository.count(); + } else { + lotteryParticipantsPage = lotteryParticipantsRepository.findByBaseUser_Id(phoneNumber, pageable); + count = lotteryParticipantsRepository.countByBaseUser_Id(phoneNumber); + } List lotteryEventParticipantsResponseDtoList = new ArrayList<>(); @@ -113,7 +119,7 @@ public LotteryEventParticipantsListResponseDto getLotteryEventParticipants(int s ); } Boolean isLastPage = !lotteryParticipantsPage.hasNext(); - return new LotteryEventParticipantsListResponseDto(lotteryEventParticipantsResponseDtoList, isLastPage, lotteryParticipantsRepository.count()); + return new LotteryEventParticipantsListResponseDto(lotteryEventParticipantsResponseDtoList, isLastPage, count); } public AdminRushEventResponseDto createRushEvent(RushEventRequestDto rushEventRequestDto, MultipartFile prizeImg, MultipartFile leftOptionImg, MultipartFile rightOptionImg) { @@ -209,7 +215,6 @@ public RushEventParticipantsListResponseDto getRushEventParticipants(long rushEv } Boolean isLastPage = !rushParticipantsPage.hasNext(); - // todo 전체 참여자 아닌 옵션별 참여자로 수정하기 return new RushEventParticipantsListResponseDto(rushEventParticipantResponseDtoList, isLastPage, count); } @@ -318,7 +323,7 @@ private LotteryEvent getCurrentLotteryEvent() { @Transactional public ResponseDto pickLotteryEventWinners() { - if(lotteryWinnerRepository.count() > 1) throw new CustomException(CustomErrorCode.LOTTERY_EVENT_ALREADY_DRAWN); + if (lotteryWinnerRepository.count() > 1) throw new CustomException(CustomErrorCode.LOTTERY_EVENT_ALREADY_DRAWN); LotteryEvent lotteryEvent = getCurrentLotteryEvent(); int winnerCount = lotteryEvent.getWinnerCount(); @@ -334,13 +339,19 @@ public ResponseDto pickLotteryEventWinners() { return new ResponseDto("추첨이 완료되었습니다."); } - public LotteryEventWinnerListResponseDto getLotteryEventWinners(int size, int page, String phoneNumber){ + public LotteryEventWinnerListResponseDto getLotteryEventWinners(int size, int page, String phoneNumber) { Pageable pageable = PageRequest.of(page, size); - if(lotteryWinnerRepository.count() == 0) throw new CustomException(CustomErrorCode.LOTTERY_EVENT_NOT_DRAWN); + if (lotteryWinnerRepository.count() == 0) throw new CustomException(CustomErrorCode.LOTTERY_EVENT_NOT_DRAWN); Page lotteryWinnersPage = null; - if (phoneNumber.isEmpty()) lotteryWinnersPage = lotteryWinnerRepository.findAll(pageable); - else lotteryWinnersPage = lotteryWinnerRepository.findByPhoneNumber(phoneNumber, pageable); + long count; + if (phoneNumber.isEmpty()) { + lotteryWinnersPage = lotteryWinnerRepository.findAll(pageable); + count = lotteryWinnerRepository.count(); + } else { + lotteryWinnersPage = lotteryWinnerRepository.findByPhoneNumber(phoneNumber, pageable); + count = lotteryWinnerRepository.countByPhoneNumber(phoneNumber); + } List lotteryEventWinnerResponseDto = new ArrayList<>(); @@ -350,7 +361,7 @@ public LotteryEventWinnerListResponseDto getLotteryEventWinners(int size, int pa ); } Boolean isLastPage = !lotteryWinnersPage.hasNext(); - return new LotteryEventWinnerListResponseDto(lotteryEventWinnerResponseDto, isLastPage, lotteryWinnerRepository.count()); + return new LotteryEventWinnerListResponseDto(lotteryEventWinnerResponseDto, isLastPage, count); } @Transactional