Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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<Admin> searchPartneredByName(
@Param("partnerId") Long partnerId,
@Param("status") ActivationStatus status,
List<Admin> searchAdminByKeyword(
@Param("keyword") String keyword
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public static class PartnerMapResponseDTO {
private LocalDate partnershipEndDate;
private Double latitude;
private Double longitude;
private String profileUrl;
}

@Getter
Expand All @@ -39,6 +40,7 @@ public static class AdminMapResponseDTO {
private LocalDate partnershipEndDate;
private Double latitude;
private Double longitude;
private String profileUrl;
}

@Getter
Expand All @@ -61,6 +63,8 @@ public static class StoreMapResponseDTO {
private boolean hasPartner;
private Double latitude;
private Double longitude;
private String profileUrl;

}

@Getter @NoArgsConstructor @AllArgsConstructor @Builder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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<MapResponseDTO.PartnerMapResponseDTO> getPartners(MapRequestDTO.ViewOnMapDTO viewport, Long memberId) {
Admin admin = adminRepository.findById(memberId)
.orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_ADMIN));

String wkt = toWKT(viewport);
List<Partner> partners = partnerRepository.findAllWithinViewport(wkt);
Expand All @@ -55,6 +58,9 @@ public List<MapResponseDTO.PartnerMapResponseDTO> 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())
Expand All @@ -65,23 +71,23 @@ public List<MapResponseDTO.PartnerMapResponseDTO> getPartners(MapRequestDTO.View
.partnershipEndDate(active != null ? active.getPartnershipPeriodEnd() : null)
.latitude(p.getLatitude())
.longitude(p.getLongitude())
.profileUrl(url)
.build();
}).toList();
}

@Override
public List<MapResponseDTO.AdminMapResponseDTO> getAdmins(MapRequestDTO.ViewOnMapDTO viewport, Long memberId) {

Partner partner = partnerRepository.findById(memberId)
.orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_PARTNER));

String wkt = toWKT(viewport);
List<Admin> admins = adminRepository.findAllWithinViewport(wkt);

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())
Expand All @@ -92,6 +98,7 @@ public List<MapResponseDTO.AdminMapResponseDTO> getAdmins(MapRequestDTO.ViewOnMa
.partnershipEndDate(active != null ? active.getPartnershipPeriodEnd() : null)
.latitude(a.getLatitude())
.longitude(a.getLongitude())
.profileUrl(url)
.build();
}).toList();
}
Expand All @@ -109,6 +116,9 @@ public List<MapResponseDTO.StoreMapResponseDTO> 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);
Expand All @@ -130,6 +140,7 @@ public List<MapResponseDTO.StoreMapResponseDTO> getStores(MapRequestDTO.ViewOnMa
.hasPartner(hasPartner)
.latitude(s.getLatitude())
.longitude(s.getLongitude())
.profileUrl(url)
.build();
}).toList();
}
Expand All @@ -145,6 +156,9 @@ public List<MapResponseDTO.StoreMapResponseDTO> 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);
Expand Down Expand Up @@ -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<MapResponseDTO.PartnerMapResponseDTO> searchPartner(String keyword, Long memberId) {

Admin admin = adminRepository.findById(memberId)
.orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_ADMIN));

List<Partner> partners = partnerRepository.searchPartneredByName(memberId, ActivationStatus.ACTIVE, keyword);
List<Partner> 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())
Expand All @@ -213,23 +227,23 @@ public List<MapResponseDTO.PartnerMapResponseDTO> searchPartner(String keyword,
.partnershipEndDate(active != null ? active.getPartnershipPeriodEnd() : null)
.latitude(p.getLatitude())
.longitude(p.getLongitude())
.profileUrl(url)
.build();
}).toList();
}

@Override
public List<MapResponseDTO.AdminMapResponseDTO> searchAdmin(String keyword, Long memberId) {

Partner partner = partnerRepository.findById(memberId)
.orElseThrow(() -> new DatabaseException(ErrorStatus.NO_SUCH_PARTNER));

List<Admin> admins = adminRepository.searchPartneredByName(memberId, ActivationStatus.ACTIVE, keyword);
List<Admin> 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())
Expand All @@ -240,6 +254,7 @@ public List<MapResponseDTO.AdminMapResponseDTO> searchAdmin(String keyword, Long
.partnershipEndDate(active != null ? active.getPartnershipPeriodEnd() : null)
.latitude(a.getLatitude())
.longitude(a.getLongitude())
.profileUrl(url)
.build();
}).toList();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -17,4 +18,6 @@ public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findMemberById(Long id);

List<Member> findByDeletedAtBefore(LocalDateTime deletedAt);

Member findByAdminProfile(Admin adminProfile);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Partner> searchPartneredByName(
@Param("adminId") Long adminId,
@Param("status") ActivationStatus status,
List<Partner> searchPartnerByKeyword(
@Param("keyword") String keyword
);


}