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 2a438670..8a1eaeeb 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 @@ -67,16 +67,8 @@ AND ST_Contains(ST_GeomFromText(:wkt, 4326), a.point) select distinct a from Admin a where lower(a.name) like lower(concat('%', :keyword, '%')) - and exists ( - select 1 from Paper pc - where pc.admin = a - and pc.partner.id = :partnerId - and pc.isActivated = :status - ) """) - List searchPartneredByName( - @Param("partnerId") Long partnerId, - @Param("status") ActivationStatus status, + List searchAdminByKeyword( @Param("keyword") String keyword ); diff --git a/src/main/java/com/assu/server/domain/map/controller/MapController.java b/src/main/java/com/assu/server/domain/map/controller/MapController.java index 86f948b8..e22be087 100644 --- a/src/main/java/com/assu/server/domain/map/controller/MapController.java +++ b/src/main/java/com/assu/server/domain/map/controller/MapController.java @@ -47,7 +47,7 @@ public BaseResponse getLocations( @Operation( summary = "검색어 기반 장소 조회 API", - description = "검색어를 입력해주세요. (user → store 전체조회 / admin → 제휴중인 partner 조회 / partner → 제휴중인 admin 조회)" + description = "검색어를 입력해주세요. (user → store 전체조회 / admin → partner 전체조회 / partner → admin 전체조회)" ) @GetMapping("/search") public BaseResponse getLocationsByKeyword( diff --git a/src/main/java/com/assu/server/domain/map/dto/MapResponseDTO.java b/src/main/java/com/assu/server/domain/map/dto/MapResponseDTO.java index 195dacd1..8fc2b55d 100644 --- a/src/main/java/com/assu/server/domain/map/dto/MapResponseDTO.java +++ b/src/main/java/com/assu/server/domain/map/dto/MapResponseDTO.java @@ -23,6 +23,7 @@ public static class PartnerMapResponseDTO { private LocalDate partnershipEndDate; private Double latitude; private Double longitude; + private String profileUrl; } @Getter @@ -39,6 +40,7 @@ public static class AdminMapResponseDTO { private LocalDate partnershipEndDate; private Double latitude; private Double longitude; + private String profileUrl; } @Getter @@ -61,6 +63,8 @@ public static class StoreMapResponseDTO { private boolean hasPartner; private Double latitude; private Double longitude; + private String profileUrl; + } @Getter @NoArgsConstructor @AllArgsConstructor @Builder diff --git a/src/main/java/com/assu/server/domain/map/service/MapServiceImpl.java b/src/main/java/com/assu/server/domain/map/service/MapServiceImpl.java index ae1bc8ed..afa49c5f 100644 --- a/src/main/java/com/assu/server/domain/map/service/MapServiceImpl.java +++ b/src/main/java/com/assu/server/domain/map/service/MapServiceImpl.java @@ -5,6 +5,8 @@ import com.assu.server.domain.common.enums.ActivationStatus; import com.assu.server.domain.map.dto.MapRequestDTO; import com.assu.server.domain.map.dto.MapResponseDTO; +import com.assu.server.domain.member.entity.Member; +import com.assu.server.domain.member.repository.MemberRepository; import com.assu.server.domain.partner.entity.Partner; import com.assu.server.domain.partner.repository.PartnerRepository; import com.assu.server.domain.partnership.entity.Goods; @@ -21,12 +23,14 @@ import com.assu.server.global.exception.DatabaseException; import com.assu.server.global.exception.GeneralException; +import com.assu.server.infra.s3.AmazonS3Manager; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.Point; import org.springframework.stereotype.Service; +import software.amazon.awssdk.services.s3.auth.scheme.internal.S3EndpointResolverAware; import java.util.List; import java.util.stream.Collectors; @@ -42,11 +46,10 @@ public class MapServiceImpl implements MapService { private final PaperRepository paperRepository; private final GeometryFactory geometryFactory; private final GoodsRepository goodsRepository; + private final AmazonS3Manager amazonS3Manager; @Override public List getPartners(MapRequestDTO.ViewOnMapDTO viewport, Long memberId) { - Admin admin = adminRepository.findById(memberId) - .orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_ADMIN)); String wkt = toWKT(viewport); List partners = partnerRepository.findAllWithinViewport(wkt); @@ -55,6 +58,9 @@ public List getPartners(MapRequestDTO.View Paper active = paperRepository.findTopByAdmin_IdAndPartner_IdAndIsActivatedOrderByIdDesc(memberId, p.getId(), ActivationStatus.ACTIVE) .orElse(null); + String key = (p.getMember() != null) ? p.getMember().getProfileUrl() : null; + String url = amazonS3Manager.generatePresignedUrl(key); + return MapResponseDTO.PartnerMapResponseDTO.builder() .partnerId(p.getId()) .name(p.getName()) @@ -65,16 +71,13 @@ public List getPartners(MapRequestDTO.View .partnershipEndDate(active != null ? active.getPartnershipPeriodEnd() : null) .latitude(p.getLatitude()) .longitude(p.getLongitude()) + .profileUrl(url) .build(); }).toList(); } @Override public List getAdmins(MapRequestDTO.ViewOnMapDTO viewport, Long memberId) { - - Partner partner = partnerRepository.findById(memberId) - .orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_PARTNER)); - String wkt = toWKT(viewport); List admins = adminRepository.findAllWithinViewport(wkt); @@ -82,6 +85,9 @@ public List getAdmins(MapRequestDTO.ViewOnMa Paper active = paperRepository.findTopByAdmin_IdAndPartner_IdAndIsActivatedOrderByIdDesc(a.getId(), memberId, ActivationStatus.ACTIVE) .orElse(null); + String key = (a.getMember() != null) ? a.getMember().getProfileUrl() : null; + String url = amazonS3Manager.generatePresignedUrl(key); + return MapResponseDTO.AdminMapResponseDTO.builder() .adminId(a.getId()) .name(a.getName()) @@ -92,6 +98,7 @@ public List getAdmins(MapRequestDTO.ViewOnMa .partnershipEndDate(active != null ? active.getPartnershipPeriodEnd() : null) .latitude(a.getLatitude()) .longitude(a.getLongitude()) + .profileUrl(url) .build(); }).toList(); } @@ -109,6 +116,9 @@ public List getStores(MapRequestDTO.ViewOnMa () -> new GeneralException(ErrorStatus.NO_SUCH_CONTENT) ); + String key = (s.getPartner() != null) ? s.getPartner().getMember().getProfileUrl() : null; + String url = amazonS3Manager.generatePresignedUrl(key); + Long adminId = paperRepository.findTopPaperByStoreId(s.getId()) .map(p -> p.getAdmin() != null ? p.getAdmin().getId() : null) .orElse(null); @@ -130,6 +140,7 @@ public List getStores(MapRequestDTO.ViewOnMa .hasPartner(hasPartner) .latitude(s.getLatitude()) .longitude(s.getLongitude()) + .profileUrl(url) .build(); }).toList(); } @@ -145,6 +156,9 @@ public List searchStores(String keyword) { () -> new GeneralException(ErrorStatus.NO_SUCH_CONTENT) ); + String key = (s.getPartner() != null) ? s.getPartner().getMember().getProfileUrl() : null; + String url = amazonS3Manager.generatePresignedUrl(key); + Long adminId = paperRepository.findTopPaperByStoreId(s.getId()) .map(p -> p.getAdmin() != null ? p.getAdmin().getId() : null) .orElse(null); @@ -186,23 +200,23 @@ else if (content.getOptionType() == OptionType.SERVICE) { .hasPartner(hasPartner) .latitude(s.getLatitude()) .longitude(s.getLongitude()) + .profileUrl(url) .build(); }).toList(); } @Override public List searchPartner(String keyword, Long memberId) { - - Admin admin = adminRepository.findById(memberId) - .orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_ADMIN)); - - List partners = partnerRepository.searchPartneredByName(memberId, ActivationStatus.ACTIVE, keyword); + List partners = partnerRepository.searchPartnerByKeyword(keyword); return partners.stream().map(p -> { Paper active = paperRepository .findTopByAdmin_IdAndPartner_IdAndIsActivatedOrderByIdDesc(memberId, p.getId(), ActivationStatus.ACTIVE) .orElse(null); + String key = (p.getMember() != null) ? p.getMember().getProfileUrl() : null; + String url = amazonS3Manager.generatePresignedUrl(key); + return MapResponseDTO.PartnerMapResponseDTO.builder() .partnerId(p.getId()) .name(p.getName()) @@ -213,23 +227,23 @@ public List searchPartner(String keyword, .partnershipEndDate(active != null ? active.getPartnershipPeriodEnd() : null) .latitude(p.getLatitude()) .longitude(p.getLongitude()) + .profileUrl(url) .build(); }).toList(); } @Override public List searchAdmin(String keyword, Long memberId) { - - Partner partner = partnerRepository.findById(memberId) - .orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_PARTNER)); - - List admins = adminRepository.searchPartneredByName(memberId, ActivationStatus.ACTIVE, keyword); + List admins = adminRepository.searchAdminByKeyword(keyword); return admins.stream().map(a -> { Paper active = paperRepository .findTopByAdmin_IdAndPartner_IdAndIsActivatedOrderByIdDesc(a.getId(), memberId, ActivationStatus.ACTIVE) .orElse(null); + String key = (a.getMember() != null) ? a.getMember().getProfileUrl() : null; + String url = amazonS3Manager.generatePresignedUrl(key); + return MapResponseDTO.AdminMapResponseDTO.builder() .adminId(a.getId()) .name(a.getName()) @@ -240,6 +254,7 @@ public List searchAdmin(String keyword, Long .partnershipEndDate(active != null ? active.getPartnershipPeriodEnd() : null) .latitude(a.getLatitude()) .longitude(a.getLongitude()) + .profileUrl(url) .build(); }).toList(); } diff --git a/src/main/java/com/assu/server/domain/member/repository/MemberRepository.java b/src/main/java/com/assu/server/domain/member/repository/MemberRepository.java index 555a352c..ac82f1ed 100644 --- a/src/main/java/com/assu/server/domain/member/repository/MemberRepository.java +++ b/src/main/java/com/assu/server/domain/member/repository/MemberRepository.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Optional; +import com.assu.server.domain.admin.entity.Admin; import com.assu.server.domain.member.entity.Member; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -17,4 +18,6 @@ public interface MemberRepository extends JpaRepository { Optional findMemberById(Long id); List findByDeletedAtBefore(LocalDateTime deletedAt); + + Member findByAdminProfile(Admin adminProfile); } 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 2b5bb2fc..df9aa420 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 @@ -50,16 +50,10 @@ AND ST_Contains(ST_GeomFromText(:wkt, 4326), p.point) select distinct p from Partner p where lower(p.name) like lower(concat('%', :keyword, '%')) - and exists ( - select 1 from Paper pc - where pc.partner = p - and pc.admin.id = :adminId - and pc.isActivated = :status - ) """) - List searchPartneredByName( - @Param("adminId") Long adminId, - @Param("status") ActivationStatus status, + List searchPartnerByKeyword( @Param("keyword") String keyword ); + + }