From 500d2116e0f7a3a12a9c45b5b9d196c3a37f4837 Mon Sep 17 00:00:00 2001 From: kimyw1018 Date: Thu, 2 Apr 2026 10:04:44 +0900 Subject: [PATCH 1/9] =?UTF-8?q?[REFACTOR/#310]=20mapping=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=ED=8C=8C=EC=9D=BC=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StudentAdminController.java | 6 +++--- .../{mapping => admin}/dto/StoreUsageWithPaper.java | 2 +- .../server/domain/admin/dto/StudentAdminRequestDTO.java | 5 +++++ .../{mapping => admin}/dto/StudentAdminResponseDTO.java | 2 +- .../domain/{mapping => admin}/entity/StudentAdmin.java | 3 +-- .../repository/StudentAdminRepository.java | 7 +++---- .../{mapping => admin}/service/StudentAdminService.java | 4 ++-- .../service/StudentAdminServiceImpl.java | 8 ++++---- .../server/domain/mapping/dto/StudentAdminRequestDTO.java | 5 ----- 9 files changed, 20 insertions(+), 22 deletions(-) rename src/main/java/com/assu/server/domain/{mapping => admin}/controller/StudentAdminController.java (95%) rename src/main/java/com/assu/server/domain/{mapping => admin}/dto/StoreUsageWithPaper.java (75%) create mode 100644 src/main/java/com/assu/server/domain/admin/dto/StudentAdminRequestDTO.java rename src/main/java/com/assu/server/domain/{mapping => admin}/dto/StudentAdminResponseDTO.java (98%) rename src/main/java/com/assu/server/domain/{mapping => admin}/entity/StudentAdmin.java (87%) rename src/main/java/com/assu/server/domain/{mapping => admin}/repository/StudentAdminRepository.java (86%) rename src/main/java/com/assu/server/domain/{mapping => admin}/service/StudentAdminService.java (80%) rename src/main/java/com/assu/server/domain/{mapping => admin}/service/StudentAdminServiceImpl.java (94%) delete mode 100644 src/main/java/com/assu/server/domain/mapping/dto/StudentAdminRequestDTO.java diff --git a/src/main/java/com/assu/server/domain/mapping/controller/StudentAdminController.java b/src/main/java/com/assu/server/domain/admin/controller/StudentAdminController.java similarity index 95% rename from src/main/java/com/assu/server/domain/mapping/controller/StudentAdminController.java rename to src/main/java/com/assu/server/domain/admin/controller/StudentAdminController.java index e2c44822..6ec802bd 100644 --- a/src/main/java/com/assu/server/domain/mapping/controller/StudentAdminController.java +++ b/src/main/java/com/assu/server/domain/admin/controller/StudentAdminController.java @@ -1,7 +1,7 @@ -package com.assu.server.domain.mapping.controller; +package com.assu.server.domain.admin.controller; -import com.assu.server.domain.mapping.dto.StudentAdminResponseDTO; -import com.assu.server.domain.mapping.service.StudentAdminService; +import com.assu.server.domain.admin.dto.StudentAdminResponseDTO; +import com.assu.server.domain.admin.service.StudentAdminService; import com.assu.server.global.apiPayload.BaseResponse; import com.assu.server.global.apiPayload.code.status.SuccessStatus; import com.assu.server.global.util.PrincipalDetails; diff --git a/src/main/java/com/assu/server/domain/mapping/dto/StoreUsageWithPaper.java b/src/main/java/com/assu/server/domain/admin/dto/StoreUsageWithPaper.java similarity index 75% rename from src/main/java/com/assu/server/domain/mapping/dto/StoreUsageWithPaper.java rename to src/main/java/com/assu/server/domain/admin/dto/StoreUsageWithPaper.java index 0035feae..451b5889 100644 --- a/src/main/java/com/assu/server/domain/mapping/dto/StoreUsageWithPaper.java +++ b/src/main/java/com/assu/server/domain/admin/dto/StoreUsageWithPaper.java @@ -1,4 +1,4 @@ -package com.assu.server.domain.mapping.dto; +package com.assu.server.domain.admin.dto; public record StoreUsageWithPaper( Long paperId, diff --git a/src/main/java/com/assu/server/domain/admin/dto/StudentAdminRequestDTO.java b/src/main/java/com/assu/server/domain/admin/dto/StudentAdminRequestDTO.java new file mode 100644 index 00000000..c6150a97 --- /dev/null +++ b/src/main/java/com/assu/server/domain/admin/dto/StudentAdminRequestDTO.java @@ -0,0 +1,5 @@ +package com.assu.server.domain.admin.dto; + +public class StudentAdminRequestDTO { + +} diff --git a/src/main/java/com/assu/server/domain/mapping/dto/StudentAdminResponseDTO.java b/src/main/java/com/assu/server/domain/admin/dto/StudentAdminResponseDTO.java similarity index 98% rename from src/main/java/com/assu/server/domain/mapping/dto/StudentAdminResponseDTO.java rename to src/main/java/com/assu/server/domain/admin/dto/StudentAdminResponseDTO.java index 47520a0f..f801725a 100644 --- a/src/main/java/com/assu/server/domain/mapping/dto/StudentAdminResponseDTO.java +++ b/src/main/java/com/assu/server/domain/admin/dto/StudentAdminResponseDTO.java @@ -1,4 +1,4 @@ -package com.assu.server.domain.mapping.dto; +package com.assu.server.domain.admin.dto; import com.assu.server.domain.admin.entity.Admin; import com.assu.server.domain.partnership.entity.Paper; diff --git a/src/main/java/com/assu/server/domain/mapping/entity/StudentAdmin.java b/src/main/java/com/assu/server/domain/admin/entity/StudentAdmin.java similarity index 87% rename from src/main/java/com/assu/server/domain/mapping/entity/StudentAdmin.java rename to src/main/java/com/assu/server/domain/admin/entity/StudentAdmin.java index c0bc842e..920a1a98 100644 --- a/src/main/java/com/assu/server/domain/mapping/entity/StudentAdmin.java +++ b/src/main/java/com/assu/server/domain/admin/entity/StudentAdmin.java @@ -1,8 +1,7 @@ -package com.assu.server.domain.mapping.entity; +package com.assu.server.domain.admin.entity; import com.assu.server.domain.common.entity.BaseEntity; import com.assu.server.domain.user.entity.Student; -import com.assu.server.domain.admin.entity.Admin; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/com/assu/server/domain/mapping/repository/StudentAdminRepository.java b/src/main/java/com/assu/server/domain/admin/repository/StudentAdminRepository.java similarity index 86% rename from src/main/java/com/assu/server/domain/mapping/repository/StudentAdminRepository.java rename to src/main/java/com/assu/server/domain/admin/repository/StudentAdminRepository.java index 6a5a3c5c..024e3900 100644 --- a/src/main/java/com/assu/server/domain/mapping/repository/StudentAdminRepository.java +++ b/src/main/java/com/assu/server/domain/admin/repository/StudentAdminRepository.java @@ -1,8 +1,7 @@ -package com.assu.server.domain.mapping.repository; +package com.assu.server.domain.admin.repository; -import com.assu.server.domain.mapping.dto.StoreUsageWithPaper; -import com.assu.server.domain.mapping.dto.StudentAdminResponseDTO; -import com.assu.server.domain.mapping.entity.StudentAdmin; +import com.assu.server.domain.admin.dto.StoreUsageWithPaper; +import com.assu.server.domain.admin.entity.StudentAdmin; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/com/assu/server/domain/mapping/service/StudentAdminService.java b/src/main/java/com/assu/server/domain/admin/service/StudentAdminService.java similarity index 80% rename from src/main/java/com/assu/server/domain/mapping/service/StudentAdminService.java rename to src/main/java/com/assu/server/domain/admin/service/StudentAdminService.java index 9504e7e8..084529e7 100644 --- a/src/main/java/com/assu/server/domain/mapping/service/StudentAdminService.java +++ b/src/main/java/com/assu/server/domain/admin/service/StudentAdminService.java @@ -1,6 +1,6 @@ -package com.assu.server.domain.mapping.service; +package com.assu.server.domain.admin.service; -import com.assu.server.domain.mapping.dto.StudentAdminResponseDTO; +import com.assu.server.domain.admin.dto.StudentAdminResponseDTO; public interface StudentAdminService { StudentAdminResponseDTO.CountAdminAuthResponseDTO getCountAdminAuth(Long memberId); diff --git a/src/main/java/com/assu/server/domain/mapping/service/StudentAdminServiceImpl.java b/src/main/java/com/assu/server/domain/admin/service/StudentAdminServiceImpl.java similarity index 94% rename from src/main/java/com/assu/server/domain/mapping/service/StudentAdminServiceImpl.java rename to src/main/java/com/assu/server/domain/admin/service/StudentAdminServiceImpl.java index 1db0d166..fb8d8895 100644 --- a/src/main/java/com/assu/server/domain/mapping/service/StudentAdminServiceImpl.java +++ b/src/main/java/com/assu/server/domain/admin/service/StudentAdminServiceImpl.java @@ -1,10 +1,10 @@ -package com.assu.server.domain.mapping.service; +package com.assu.server.domain.admin.service; import com.assu.server.domain.admin.entity.Admin; import com.assu.server.domain.admin.repository.AdminRepository; -import com.assu.server.domain.mapping.dto.StoreUsageWithPaper; -import com.assu.server.domain.mapping.dto.StudentAdminResponseDTO; -import com.assu.server.domain.mapping.repository.StudentAdminRepository; +import com.assu.server.domain.admin.dto.StoreUsageWithPaper; +import com.assu.server.domain.admin.dto.StudentAdminResponseDTO; +import com.assu.server.domain.admin.repository.StudentAdminRepository; import com.assu.server.domain.partnership.entity.Paper; import com.assu.server.domain.partnership.repository.PaperRepository; import com.assu.server.global.apiPayload.code.status.ErrorStatus; diff --git a/src/main/java/com/assu/server/domain/mapping/dto/StudentAdminRequestDTO.java b/src/main/java/com/assu/server/domain/mapping/dto/StudentAdminRequestDTO.java deleted file mode 100644 index b4f2c060..00000000 --- a/src/main/java/com/assu/server/domain/mapping/dto/StudentAdminRequestDTO.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.assu.server.domain.mapping.dto; - -public class StudentAdminRequestDTO { - -} From fec4b0e47fb032c8cbcc04dc5e58adff9972bc77 Mon Sep 17 00:00:00 2001 From: kimyw1018 Date: Mon, 25 May 2026 22:46:50 +0900 Subject: [PATCH 2/9] =?UTF-8?q?[REFACTOR/#310]=20=EB=AA=85=EC=84=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assu/server/domain/admin/controller/AdminController.java | 2 +- .../java/com/assu/server/domain/admin/dto/AdminResponseDTO.java | 2 +- .../server/domain/partner/controller/PartnerController.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/assu/server/domain/admin/controller/AdminController.java b/src/main/java/com/assu/server/domain/admin/controller/AdminController.java index b64aabde..e42c0b84 100644 --- a/src/main/java/com/assu/server/domain/admin/controller/AdminController.java +++ b/src/main/java/com/assu/server/domain/admin/controller/AdminController.java @@ -31,7 +31,7 @@ public class AdminController { " - `partnerAddress` (String): 제휴업체 주소\n" + " - `partnerDetailAddress` (String): 제휴업체 상세주소\n" + " - `partnerName` (String): 제휴업체 상호명\n" + - " - `partnerUrl` (String): 제휴업체 카카오맵 URL\n" + + " - `partnerUrl` (String): 제휴업체 프로필 이미지 URL (S3 주소)\n" + " - `partnerPhone` (String): 제휴업체 전화번호\n") @GetMapping("/partner-recommend") public BaseResponse randomPartnerRecommend( diff --git a/src/main/java/com/assu/server/domain/admin/dto/AdminResponseDTO.java b/src/main/java/com/assu/server/domain/admin/dto/AdminResponseDTO.java index 04d6bf80..613f26ad 100644 --- a/src/main/java/com/assu/server/domain/admin/dto/AdminResponseDTO.java +++ b/src/main/java/com/assu/server/domain/admin/dto/AdminResponseDTO.java @@ -17,7 +17,7 @@ public record AdminResponseDTO ( @Schema(description = "제휴업체 상세주소", example = "2층 201호") String partnerDetailAddress, - @Schema(description = "제휴업체 URL", example = "https://www.beer.co.kr") + @Schema(description = "제휴업체 프로필 이미지 URL (S3 주소)", example = "https://assu-bucket.s3.amazonaws.com/profile.png") String partnerUrl, @Schema(description = "제휴업체 전화번호", example = "02-123-4567") diff --git a/src/main/java/com/assu/server/domain/partner/controller/PartnerController.java b/src/main/java/com/assu/server/domain/partner/controller/PartnerController.java index 17ceb7e5..4f0b4683 100644 --- a/src/main/java/com/assu/server/domain/partner/controller/PartnerController.java +++ b/src/main/java/com/assu/server/domain/partner/controller/PartnerController.java @@ -29,7 +29,7 @@ public class PartnerController { " - `adminAddress` (String): 관리자 주소\n" + " - `adminDetailAddress` (String): 관리자 상세주소\n" + " - `adminName` (String): 관리자 상호명\n" + - " - `adminUrl` (String): 관리자 카카오맵 URL\n" + + " - `adminUrl` (String): 관리자 프로필 이미지 URL (S3 주소)\n" + " - `adminPhone` (String): 관리자 전화번호\n") @GetMapping("/admin-recommend") public BaseResponse randomAdminRecommend( From 50937b6b3fcc5175522f0ee55bf1d5204174bcda Mon Sep 17 00:00:00 2001 From: kimyw1018 Date: Mon, 25 May 2026 23:16:25 +0900 Subject: [PATCH 3/9] =?UTF-8?q?[FIX/#344]=20=EC=BF=BC=EB=A6=AC=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/admin/repository/AdminRepository.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java b/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java index f0e5d692..cfed5603 100644 --- a/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java +++ b/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java @@ -29,7 +29,7 @@ List findMatchingAdmins(@Param("university") University university, @Param("department") Department department, @Param("major") Major major); - // 후보 수 카운트: 해당 partner와 ACTIVE 제휴가 없는 admin 수 + // 후보 수 카운트 @Query(value = """ SELECT COUNT(*) FROM admin a @@ -37,12 +37,11 @@ WHERE NOT EXISTS ( SELECT 1 FROM paper pa WHERE pa.admin_id = a.id AND pa.partner_id = :partnerId - AND pa.is_activated = 'ACTIVE' + AND CAST(pa.is_activated AS VARCHAR) = 'ACTIVE' ) """, nativeQuery = true) long countPartner(@Param("partnerId") Long partnerId); - // 랜덤 오프셋으로 1~N건 가져오기 (LIMIT :offset, :limit) @Query(value = """ SELECT a.* FROM admin a @@ -50,21 +49,21 @@ WHERE NOT EXISTS ( SELECT 1 FROM paper pa WHERE pa.admin_id = a.id AND pa.partner_id = :partnerId - AND pa.is_activated = 'ACTIVE' + AND CAST(pa.is_activated AS VARCHAR) = 'ACTIVE' ) LIMIT :offset, :limit """, nativeQuery = true) List findPartnerWithOffset(@Param("partnerId") Long partnerId, - @Param("offset") int offset, - @Param("limit") int limit); + @Param("offset") int offset, + @Param("limit") int limit); @Query(""" SELECT DISTINCT a FROM Admin a LEFT JOIN FETCH a.member WHERE a.point IS NOT NULL - AND function('ST_Contains', function('ST_GeomFromText', :wkt, 4326), a.point) = true - """) + AND ST_Contains(ST_GeomFromText(:wkt, 4326), a.point) = true + """) List findAllWithinViewportWithMember(@Param("wkt") String wkt, Pageable pageable); @Query(""" From 29ee3c908e2273d7473adf618f41a2a14ec5d021 Mon Sep 17 00:00:00 2001 From: kimyw1018 Date: Mon, 25 May 2026 23:28:29 +0900 Subject: [PATCH 4/9] =?UTF-8?q?[FIX/#344]=20Pageable=EA=B5=AC=EC=A1=B0?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/repository/AdminRepository.java | 42 +++++++------- .../admin/service/AdminServiceImpl.java | 26 +++++---- .../partner/repository/PartnerRepository.java | 55 ++++++++++--------- .../partner/service/PartnerServiceImpl.java | 6 +- 4 files changed, 66 insertions(+), 63 deletions(-) diff --git a/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java b/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java index cfed5603..f74fe87f 100644 --- a/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java +++ b/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java @@ -29,33 +29,31 @@ List findMatchingAdmins(@Param("university") University university, @Param("department") Department department, @Param("major") Major major); - // 후보 수 카운트 - @Query(value = """ - SELECT COUNT(*) - FROM admin a + // 후보 수 카운트 + @Query(""" + SELECT COUNT(a) + FROM Admin a WHERE NOT EXISTS ( - SELECT 1 FROM paper pa - WHERE pa.admin_id = a.id - AND pa.partner_id = :partnerId - AND CAST(pa.is_activated AS VARCHAR) = 'ACTIVE' + SELECT 1 FROM Paper pa + WHERE pa.admin = a + AND pa.partner.id = :partnerId + AND pa.isActivated = com.assu.server.domain.common.enums.ActivationStatus.ACTIVE ) - """, nativeQuery = true) - long countPartner(@Param("partnerId") Long partnerId); + """) + long countPartner(@Param("partnerId") Long partnerId); - @Query(value = """ - SELECT a.* - FROM admin a + // 랜덤 오프셋 조회 (네이티브 빼고 Pageable 적용) + @Query(""" + SELECT a + FROM Admin a WHERE NOT EXISTS ( - SELECT 1 FROM paper pa - WHERE pa.admin_id = a.id - AND pa.partner_id = :partnerId - AND CAST(pa.is_activated AS VARCHAR) = 'ACTIVE' + SELECT 1 FROM Paper pa + WHERE pa.admin = a + AND pa.partner.id = :partnerId + AND pa.isActivated = com.assu.server.domain.common.enums.ActivationStatus.ACTIVE ) - LIMIT :offset, :limit - """, nativeQuery = true) - List findPartnerWithOffset(@Param("partnerId") Long partnerId, - @Param("offset") int offset, - @Param("limit") int limit); + """) + List findPartnerWithOffset(@Param("partnerId") Long partnerId, Pageable pageable); @Query(""" SELECT DISTINCT a diff --git a/src/main/java/com/assu/server/domain/admin/service/AdminServiceImpl.java b/src/main/java/com/assu/server/domain/admin/service/AdminServiceImpl.java index 055742b1..bc81213c 100644 --- a/src/main/java/com/assu/server/domain/admin/service/AdminServiceImpl.java +++ b/src/main/java/com/assu/server/domain/admin/service/AdminServiceImpl.java @@ -11,6 +11,8 @@ import com.assu.server.global.apiPayload.code.status.ErrorStatus; import com.assu.server.global.exception.DatabaseException; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -24,14 +26,11 @@ public class AdminServiceImpl implements AdminService { private final AdminRepository adminRepository; private final PartnerRepository partnerRepository; - @Override - @Transactional - public List findMatchingAdmins(University university, Department department, Major major){ - - List adminList = adminRepository.findMatchingAdmins(university, department, major); - - return adminList; - } + @Override + @Transactional + public List findMatchingAdmins(University university, Department department, Major major){ + return adminRepository.findMatchingAdmins(university, department, major); + } @Override @Transactional(readOnly = true) @@ -47,12 +46,15 @@ public AdminResponseDTO suggestRandomPartner(Long adminId) { int offset = ThreadLocalRandom.current().nextInt((int)total); - Partner picked = partnerRepository.findUnpartneredActiveByAdminWithOffset(admin.getId(), offset); - if(picked == null) { + Pageable pageable = PageRequest.of(offset, 1); + List pickedList = partnerRepository.findUnpartneredActiveByAdminWithOffset(admin.getId(), pageable); + + if (pickedList.isEmpty()) { throw new DatabaseException(ErrorStatus.NO_AVAILABLE_PARTNER); } + Partner picked = pickedList.get(0); + return AdminResponseDTO.from(picked); } - -} +} \ No newline at end of file diff --git a/src/main/java/com/assu/server/domain/partner/repository/PartnerRepository.java b/src/main/java/com/assu/server/domain/partner/repository/PartnerRepository.java index 7ac8ac32..0d1a7f4e 100644 --- a/src/main/java/com/assu/server/domain/partner/repository/PartnerRepository.java +++ b/src/main/java/com/assu/server/domain/partner/repository/PartnerRepository.java @@ -1,6 +1,7 @@ package com.assu.server.domain.partner.repository; import com.assu.server.domain.partner.entity.Partner; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -11,41 +12,43 @@ public interface PartnerRepository extends JpaRepository { boolean existsByPhoneNum(String phoneNum); - // 현재 admin과 'ACTIVE' 상태로 제휴 중인 partner를 제외한 후보 수 - @Query(value = """ - SELECT COUNT(*) - FROM partner p - LEFT JOIN paper pa - ON pa.partner_id = p.id - AND pa.admin_id = :adminId - AND pa.is_activated = 'ACTIVE' - WHERE pa.id IS NULL - """, nativeQuery = true) + // 미제휴 제휴업체 수 조회 + @Query(""" + SELECT COUNT(p) + FROM Partner p + WHERE NOT EXISTS ( + SELECT 1 FROM Paper pa + WHERE pa.partner = p + AND pa.admin.id = :adminId + AND pa.isActivated = com.assu.server.domain.common.enums.ActivationStatus.ACTIVE + ) + """) long countUnpartneredActiveByAdmin(@Param("adminId") Long adminId); - // 위 후보들 중에서 offset 하나만 가져오기 (랜덤 오프셋으로 1건) - @Query(value = """ - SELECT p.* - FROM partner p - LEFT JOIN paper pa - ON pa.partner_id = p.id - AND pa.admin_id = :adminId - AND pa.is_activated = 'ACTIVE' - WHERE pa.id IS NULL - LIMIT :offset, 1 - """, nativeQuery = true) - Partner findUnpartneredActiveByAdminWithOffset(@Param("adminId") Long adminId, - @Param("offset") int offset); + // 미제휴 제휴업체 랜덤 오프셋 조회 + @Query(""" + SELECT p + FROM Partner p + WHERE NOT EXISTS ( + SELECT 1 FROM Paper pa + WHERE pa.partner = p + AND pa.admin.id = :adminId + AND pa.isActivated = com.assu.server.domain.common.enums.ActivationStatus.ACTIVE + ) + """) + List findUnpartneredActiveByAdminWithOffset(@Param("adminId") Long adminId, Pageable pageable); + // 반경 내 제휴업체 조회 @Query(""" SELECT DISTINCT p FROM Partner p LEFT JOIN FETCH p.member WHERE p.point IS NOT NULL - AND function('ST_Contains', function('ST_GeomFromText', :wkt, 4326), p.point) = true + AND ST_Contains(ST_GeomFromText(:wkt, 4326), p.point) = true """) List findAllWithinViewportWithMember(@Param("wkt") String wkt); + // 키워드 검색 @Query(""" SELECT DISTINCT p FROM Partner p @@ -55,6 +58,4 @@ WHERE LOWER(p.name) LIKE LOWER(CONCAT('%', :keyword, '%')) List searchPartnerByKeywordWithMember( @Param("keyword") String keyword ); - - -} +} \ No newline at end of file diff --git a/src/main/java/com/assu/server/domain/partner/service/PartnerServiceImpl.java b/src/main/java/com/assu/server/domain/partner/service/PartnerServiceImpl.java index 6340f945..9892a918 100644 --- a/src/main/java/com/assu/server/domain/partner/service/PartnerServiceImpl.java +++ b/src/main/java/com/assu/server/domain/partner/service/PartnerServiceImpl.java @@ -11,6 +11,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import java.util.List; import java.util.concurrent.ThreadLocalRandom; @@ -41,8 +43,8 @@ public PartnerResponseDTO getRandomAdmin(Long partnerId) { offset = ThreadLocalRandom.current().nextInt(0, (int)(total - limit + 1)); } - List picked = adminRepository.findPartnerWithOffset(partner.getId(), offset, limit); - + Pageable pageable = PageRequest.of(offset, limit); + List picked = adminRepository.findPartnerWithOffset(partner.getId(), pageable); List admins = picked.stream() .map(PartnerResponseDTO.AdminLiteDTO::from) .collect(Collectors.toList()); From a385e2045a46d1849470e2c6aea7e6a40544ad7f Mon Sep 17 00:00:00 2001 From: kimyw1018 Date: Mon, 25 May 2026 23:34:35 +0900 Subject: [PATCH 5/9] =?UTF-8?q?[FIX/#344]=20ENUM=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EA=B2=BD=EB=A1=9C=20=ED=8C=8C=EC=8B=B1=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/admin/repository/AdminRepository.java | 2 +- .../server/domain/admin/service/AdminServiceImpl.java | 4 ++-- .../domain/partner/repository/PartnerRepository.java | 10 ++++------ 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java b/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java index f74fe87f..16d878af 100644 --- a/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java +++ b/src/main/java/com/assu/server/domain/admin/repository/AdminRepository.java @@ -42,7 +42,7 @@ WHERE NOT EXISTS ( """) long countPartner(@Param("partnerId") Long partnerId); - // 랜덤 오프셋 조회 (네이티브 빼고 Pageable 적용) + // 랜덤 오프셋 조회 @Query(""" SELECT a FROM Admin a diff --git a/src/main/java/com/assu/server/domain/admin/service/AdminServiceImpl.java b/src/main/java/com/assu/server/domain/admin/service/AdminServiceImpl.java index bc81213c..50b937c7 100644 --- a/src/main/java/com/assu/server/domain/admin/service/AdminServiceImpl.java +++ b/src/main/java/com/assu/server/domain/admin/service/AdminServiceImpl.java @@ -39,7 +39,7 @@ public AdminResponseDTO suggestRandomPartner(Long adminId) { Admin admin = adminRepository.findById(adminId) .orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_ADMIN)); - long total = partnerRepository.countUnpartneredActiveByAdmin(admin.getId()); + long total = partnerRepository.countUnpartneredActiveByAdmin(admin.getId(), com.assu.server.domain.common.enums.ActivationStatus.ACTIVE); if (total <= 0) { throw new DatabaseException(ErrorStatus.NO_AVAILABLE_PARTNER); } @@ -47,7 +47,7 @@ public AdminResponseDTO suggestRandomPartner(Long adminId) { int offset = ThreadLocalRandom.current().nextInt((int)total); Pageable pageable = PageRequest.of(offset, 1); - List pickedList = partnerRepository.findUnpartneredActiveByAdminWithOffset(admin.getId(), pageable); + List pickedList = partnerRepository.findUnpartneredActiveByAdminWithOffset(admin.getId(), com.assu.server.domain.common.enums.ActivationStatus.ACTIVE, pageable); if (pickedList.isEmpty()) { throw new DatabaseException(ErrorStatus.NO_AVAILABLE_PARTNER); diff --git a/src/main/java/com/assu/server/domain/partner/repository/PartnerRepository.java b/src/main/java/com/assu/server/domain/partner/repository/PartnerRepository.java index 0d1a7f4e..ecc86fa7 100644 --- a/src/main/java/com/assu/server/domain/partner/repository/PartnerRepository.java +++ b/src/main/java/com/assu/server/domain/partner/repository/PartnerRepository.java @@ -12,7 +12,6 @@ public interface PartnerRepository extends JpaRepository { boolean existsByPhoneNum(String phoneNum); - // 미제휴 제휴업체 수 조회 @Query(""" SELECT COUNT(p) FROM Partner p @@ -20,12 +19,11 @@ WHERE NOT EXISTS ( SELECT 1 FROM Paper pa WHERE pa.partner = p AND pa.admin.id = :adminId - AND pa.isActivated = com.assu.server.domain.common.enums.ActivationStatus.ACTIVE + AND pa.isActivated = :status ) """) - long countUnpartneredActiveByAdmin(@Param("adminId") Long adminId); + long countUnpartneredActiveByAdmin(@Param("adminId") Long adminId, @Param("status") com.assu.server.domain.common.enums.ActivationStatus status); - // 미제휴 제휴업체 랜덤 오프셋 조회 @Query(""" SELECT p FROM Partner p @@ -33,10 +31,10 @@ WHERE NOT EXISTS ( SELECT 1 FROM Paper pa WHERE pa.partner = p AND pa.admin.id = :adminId - AND pa.isActivated = com.assu.server.domain.common.enums.ActivationStatus.ACTIVE + AND pa.isActivated = :status ) """) - List findUnpartneredActiveByAdminWithOffset(@Param("adminId") Long adminId, Pageable pageable); + List findUnpartneredActiveByAdminWithOffset(@Param("adminId") Long adminId, @Param("status") com.assu.server.domain.common.enums.ActivationStatus status, Pageable pageable); // 반경 내 제휴업체 조회 @Query(""" From a61e25d4b8eb8155265cf04fefe24c0327757879 Mon Sep 17 00:00:00 2001 From: kimyw1018 Date: Mon, 25 May 2026 23:50:13 +0900 Subject: [PATCH 6/9] =?UTF-8?q?[FIX/#344]=20=EA=B2=BD=EB=A1=9C=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/domain/admin/repository/StudentAdminRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/assu/server/domain/admin/repository/StudentAdminRepository.java b/src/main/java/com/assu/server/domain/admin/repository/StudentAdminRepository.java index 024e3900..1082a9e0 100644 --- a/src/main/java/com/assu/server/domain/admin/repository/StudentAdminRepository.java +++ b/src/main/java/com/assu/server/domain/admin/repository/StudentAdminRepository.java @@ -33,7 +33,7 @@ Long countTodayUsersByAdmin( ); @Query(""" - SELECT new com.assu.server.domain.mapping.dto.StoreUsageWithPaper( + SELECT new com.assu.server.domain.admin.dto.StoreUsageWithPaper( p.id, p.store.id, p.store.name, COUNT(pu.id) ) FROM PartnershipUsage pu From 3a3d3401c8d9a13e3ac526dc144f10f082939551 Mon Sep 17 00:00:00 2001 From: Hogeun Lee Date: Wed, 3 Jun 2026 16:56:47 +0900 Subject: [PATCH 7/9] =?UTF-8?q?[FEAT/#346]=20=EA=B8=B0=EC=A1=B4=20config?= =?UTF-8?q?=20=EA=B2=BD=EB=A1=9C=20=EB=B0=8F=20=EB=A0=88=ED=8F=AC=EC=A7=80?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EB=AA=85=20=EB=B3=80=EA=B2=BD=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ASSU_config -> ASSU_BE_config로 레포명 수정 - ASSU_config -> config 디렉토리로 로컬 저장 경로 변경 --- .gitmodules | 9 ++++++--- Dockerfile | 2 +- build.gradle | 6 +++--- ASSU_config => config | 0 4 files changed, 10 insertions(+), 7 deletions(-) rename ASSU_config => config (100%) diff --git a/.gitmodules b/.gitmodules index 44636311..ffc773e8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ -[submodule "ASSU_config"] - path = ASSU_config - url = https://github.com/ASSU-dev/ASSU_config.git +[submodule "config"] + path = config + url = https://github.com/ASSU-dev/ASSU_BE_config.git +[submodule "manifest"] + path = manifest + url = https://github.com/ASSU-dev/ASSU_BE_manifest.git diff --git a/Dockerfile b/Dockerfile index 517ccb88..99c8958e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ WORKDIR /build COPY --from=dependencies /build /build COPY src src -COPY ASSU_config ASSU_config +COPY config config RUN ./gradlew bootJar -x test --build-cache --no-daemon diff --git a/build.gradle b/build.gradle index 5892b8b3..b513f91d 100644 --- a/build.gradle +++ b/build.gradle @@ -117,9 +117,9 @@ tasks.named('test') { } tasks.register('copyPrivateConfig', Copy) { - from './ASSU_config/local' - from './ASSU_config/dev' - from './ASSU_config/prod' + from './config/local' + from './config/dev' + from './config/prod' into 'src/main/resources' diff --git a/ASSU_config b/config similarity index 100% rename from ASSU_config rename to config From 39bcc257589f9fc6e1ec0a1e0dd9dec7124e37f8 Mon Sep 17 00:00:00 2001 From: Hogeun Lee Date: Wed, 3 Jun 2026 16:58:07 +0900 Subject: [PATCH 8/9] =?UTF-8?q?[FEAT/#346]=20Manifest=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=20=EB=B0=8F=20=EC=84=9C=EB=B8=8C=EB=AA=A8=EB=93=88=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest | 1 + 1 file changed, 1 insertion(+) create mode 160000 manifest diff --git a/manifest b/manifest new file mode 160000 index 00000000..fda86ada --- /dev/null +++ b/manifest @@ -0,0 +1 @@ +Subproject commit fda86adac189e9d4214c9bdf2bc73d44444023be From 1e60f1738a49916ee82d8af2301ff98c03a112a0 Mon Sep 17 00:00:00 2001 From: Hogeun Lee Date: Wed, 3 Jun 2026 16:59:24 +0900 Subject: [PATCH 9/9] =?UTF-8?q?[FEAT/#346]=20Redis=20/=20RabbitMQ=20Manife?= =?UTF-8?q?st=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest b/manifest index fda86ada..8fcb0e58 160000 --- a/manifest +++ b/manifest @@ -1 +1 @@ -Subproject commit fda86adac189e9d4214c9bdf2bc73d44444023be +Subproject commit 8fcb0e58c6a8c9095d89f7f1446f9a01fdffee41