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 @@ -45,23 +45,18 @@ public class MapController {
"\n**Response:**\n" +
" - `User`: 가게 조회\n" +
" - `storeId` (Long): 가게 ID\n" +
" - `adminId` (Long): 관리자 ID\n" +
" - `adminName` (String): 관리자 이름\n" +
" - `name` (String): 가게 이름\n" +
" - `address` (String): 가게 주소\n" +
" - `rate` (Integer): 가게 별점\n" +
" - `criterionType` (CriterionType): 서비스 제공 기준(PRICE/HEADCOUNT)\n" +
" - `optionType` (OptionType): 제공 서비스 종류(SERVICE/DISCOUNT)\n" +
" - `people` (Integer): 인원 수(HEADCOUNT)\n" +
" - `cost` (Long): 가격(PRICE)\n" +
" - `category` (String): 카테고리(SERVICE)\n" +
" - `note` (String): 제휴 설명 (형식에 맞지 않는 제휴일때)\n" +
" - `discountRate` (Long): 할인률(DISCOUNT)\n" +
" - `hasPartner` (boolean): 제휴업체인지 여부\n" +
" - `latitude` (Double): 가게 위치 위도\n" +
" - `longitude` (Double): 가게 위치 경도\n" +
" - `profileUrl` (String): 가게 카카오맵 URL\n" +
" - `phoneNumber` (String): 가게 전화번호\n" +
" - `partnerships` (Array): 제휴 정보 목록\n" +
" - `adminId` (Long): 관리자 ID\n" +
" - `adminName` (String): 관리자 이름\n" +
" - `benefits` (Array): 혜택 목록\n" +
" - `Admin`: 제휴업체 조회\n" +
" - `partnerId` (Long): 제휴업체 ID\n" +
" - `name` (String): 제휴업체 이름\n" +
Expand Down Expand Up @@ -126,23 +121,18 @@ public BaseResponse<?> getLocationsV2(
"\n**Response:**\n" +
" - `User`: 가게 조회\n" +
" - `storeId` (Long): 가게 ID\n" +
" - `adminId` (Long): 관리자 ID\n" +
" - `adminName` (String): 관리자 이름\n" +
" - `name` (String): 가게 이름\n" +
" - `address` (String): 가게 주소\n" +
" - `rate` (Integer): 가게 별점\n" +
" - `criterionType` (CriterionType): 서비스 제공 기준(PRICE/HEADCOUNT)\n" +
" - `optionType` (OptionType): 제공 서비스 종류(SERVICE/DISCOUNT)\n" +
" - `people` (Integer): 인원 수(HEADCOUNT)\n" +
" - `cost` (Long): 가격(PRICE)\n" +
" - `category` (String): 카테고리(SERVICE)\n" +
" - `note` (String): 제휴 설명 (형식에 맞지 않는 제휴일때)\n" +
" - `discountRate` (Long): 할인률(DISCOUNT)\n" +
" - `hasPartner` (boolean): 제휴업체인지 여부\n" +
" - `latitude` (Double): 가게 위치 위도\n" +
" - `longitude` (Double): 가게 위치 경도\n" +
" - `profileUrl` (String): 가게 카카오맵 URL\n" +
" - `phoneNumber` (String): 가게 전화번호\n" +
" - `partnerships` (Array): 제휴 정보 목록\n" +
" - `adminId` (Long): 관리자 ID\n" +
" - `adminName` (String): 관리자 이름\n" +
" - `benefits` (Array): 혜택 목록\n" +
" - `Admin`: 제휴업체 조회\n" +
" - `partnerId` (Long): 제휴업체 ID\n" +
" - `name` (String): 제휴업체 이름\n" +
Expand Down Expand Up @@ -222,4 +212,4 @@ public BaseResponse<List<PlaceSuggestionDTO>> search(
return BaseResponse.onSuccess(SuccessStatus._OK, list);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public record StoreMapResponseDTO(
public record PartnershipInfo(
Long adminId,
String adminName,
String benefit
List<String> benefits
) {}

public static StoreMapResponseDTO of(
Expand All @@ -62,10 +62,10 @@ public static StoreMapResponseDTO of(

List<PartnershipInfo> partnerships = new java.util.ArrayList<>();
if (adminId1 != null) {
partnerships.add(new PartnershipInfo(adminId1, adminName1, benefit1));
partnerships.add(new PartnershipInfo(adminId1, adminName1, List.of(benefit1)));
}
if (adminId2 != null) {
partnerships.add(new PartnershipInfo(adminId2, adminName2, benefit2));
partnerships.add(new PartnershipInfo(adminId2, adminName2, List.of(benefit2)));
}

return new StoreMapResponseDTO(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,34 @@ public List<StoreMapResponseDTO> getStores(MapRequestDTO viewport, Long memberId
return storesWithActivePaper.stream().map(s -> {
final List<Paper> sPapers = papersByStore.get(s.getId());

List<StoreMapResponseDTO.PartnershipInfo> partnerships = sPapers.stream()
.map(paper -> {
Long adminId = paper.getAdmin() != null ? paper.getAdmin().getId() : null;
String adminName = paper.getAdmin() != null ? paper.getAdmin().getName() : null;
String benefit = resolveBenefit(contentByPaperId.get(paper.getId()));
return new StoreMapResponseDTO.PartnershipInfo(adminId, adminName, benefit);
// admin별로 그룹화해서 benefits 리스트 생성
Map<Long, List<String>> benefitsByAdmin = sPapers.stream()
.collect(Collectors.groupingBy(
paper -> paper.getAdmin().getId(),
Collectors.mapping(
paper -> {
PaperContent content = contentByPaperId.get(paper.getId());
return resolveBenefit(content);
},
Collectors.filtering(
benefit -> benefit != null && !benefit.isBlank(),
Collectors.toList()
)
)
));

List<StoreMapResponseDTO.PartnershipInfo> partnerships = benefitsByAdmin.entrySet().stream()
.map(entry -> {
Long adminId = entry.getKey();
List<String> benefits = entry.getValue();
String adminName = sPapers.stream()
.filter(p -> p.getAdmin().getId().equals(adminId))
.findFirst()
.map(p -> p.getAdmin().getName())
.orElse(null);
return new StoreMapResponseDTO.PartnershipInfo(adminId, adminName, benefits);
})
.filter(p -> p.adminId() != null)
.filter(p -> p.adminId() != null && !p.benefits().isEmpty())
.toList();

return StoreMapResponseDTO.ofWithPartnerships(s, partnerships, amazonS3Manager);
Expand Down Expand Up @@ -255,15 +275,34 @@ public List<StoreMapResponseDTO> searchStores(String keyword) {
return storesWithActivePaper.stream().map(s -> {
List<Paper> storePapers = papersByStore.getOrDefault(s.getId(), List.of());

List<StoreMapResponseDTO.PartnershipInfo> partnerships = storePapers.stream()
.map(paper -> {
Long adminId = paper.getAdmin() != null ? paper.getAdmin().getId() : null;
String adminName = paper.getAdmin() != null ? paper.getAdmin().getName() : null;
PaperContent content = contentByPaperId.get(paper.getId());
String benefit = resolveBenefit(content);
return new StoreMapResponseDTO.PartnershipInfo(adminId, adminName, benefit);
// admin별로 그룹화해서 benefits 리스트 생성
Map<Long, List<String>> benefitsByAdmin = storePapers.stream()
.collect(Collectors.groupingBy(
paper -> paper.getAdmin().getId(),
Collectors.mapping(
paper -> {
PaperContent content = contentByPaperId.get(paper.getId());
return resolveBenefit(content);
},
Collectors.filtering(
benefit -> benefit != null && !benefit.isBlank(),
Collectors.toList()
)
)
));

List<StoreMapResponseDTO.PartnershipInfo> partnerships = benefitsByAdmin.entrySet().stream()
.map(entry -> {
Long adminId = entry.getKey();
List<String> benefits = entry.getValue();
String adminName = storePapers.stream()
.filter(p -> p.getAdmin().getId().equals(adminId))
.findFirst()
.map(p -> p.getAdmin().getName())
.orElse(null);
return new StoreMapResponseDTO.PartnershipInfo(adminId, adminName, benefits);
})
.filter(p -> p.adminId() != null)
.filter(p -> p.adminId() != null && !p.benefits().isEmpty())
.toList();

return StoreMapResponseDTO.ofWithPartnerships(s, partnerships, amazonS3Manager);
Expand Down