Skip to content

Commit ec841a2

Browse files
authored
Merge pull request #285 from ASSU-dev/develop
[DEPLOY] v.50 map admin 조회 시 userPaper 기반으로 변경하여 모든 제휴 표시
2 parents 7f29f94 + 853bb48 commit ec841a2

3 files changed

Lines changed: 66 additions & 37 deletions

File tree

src/main/java/com/assu/server/domain/map/controller/MapController.java

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,18 @@ public class MapController {
4545
"\n**Response:**\n" +
4646
" - `User`: 가게 조회\n" +
4747
" - `storeId` (Long): 가게 ID\n" +
48-
" - `adminId` (Long): 관리자 ID\n" +
49-
" - `adminName` (String): 관리자 이름\n" +
5048
" - `name` (String): 가게 이름\n" +
5149
" - `address` (String): 가게 주소\n" +
5250
" - `rate` (Integer): 가게 별점\n" +
53-
" - `criterionType` (CriterionType): 서비스 제공 기준(PRICE/HEADCOUNT)\n" +
54-
" - `optionType` (OptionType): 제공 서비스 종류(SERVICE/DISCOUNT)\n" +
55-
" - `people` (Integer): 인원 수(HEADCOUNT)\n" +
56-
" - `cost` (Long): 가격(PRICE)\n" +
57-
" - `category` (String): 카테고리(SERVICE)\n" +
58-
" - `note` (String): 제휴 설명 (형식에 맞지 않는 제휴일때)\n" +
59-
" - `discountRate` (Long): 할인률(DISCOUNT)\n" +
6051
" - `hasPartner` (boolean): 제휴업체인지 여부\n" +
6152
" - `latitude` (Double): 가게 위치 위도\n" +
6253
" - `longitude` (Double): 가게 위치 경도\n" +
6354
" - `profileUrl` (String): 가게 카카오맵 URL\n" +
6455
" - `phoneNumber` (String): 가게 전화번호\n" +
56+
" - `partnerships` (Array): 제휴 정보 목록\n" +
57+
" - `adminId` (Long): 관리자 ID\n" +
58+
" - `adminName` (String): 관리자 이름\n" +
59+
" - `benefits` (Array): 혜택 목록\n" +
6560
" - `Admin`: 제휴업체 조회\n" +
6661
" - `partnerId` (Long): 제휴업체 ID\n" +
6762
" - `name` (String): 제휴업체 이름\n" +
@@ -126,23 +121,18 @@ public BaseResponse<?> getLocationsV2(
126121
"\n**Response:**\n" +
127122
" - `User`: 가게 조회\n" +
128123
" - `storeId` (Long): 가게 ID\n" +
129-
" - `adminId` (Long): 관리자 ID\n" +
130-
" - `adminName` (String): 관리자 이름\n" +
131124
" - `name` (String): 가게 이름\n" +
132125
" - `address` (String): 가게 주소\n" +
133126
" - `rate` (Integer): 가게 별점\n" +
134-
" - `criterionType` (CriterionType): 서비스 제공 기준(PRICE/HEADCOUNT)\n" +
135-
" - `optionType` (OptionType): 제공 서비스 종류(SERVICE/DISCOUNT)\n" +
136-
" - `people` (Integer): 인원 수(HEADCOUNT)\n" +
137-
" - `cost` (Long): 가격(PRICE)\n" +
138-
" - `category` (String): 카테고리(SERVICE)\n" +
139-
" - `note` (String): 제휴 설명 (형식에 맞지 않는 제휴일때)\n" +
140-
" - `discountRate` (Long): 할인률(DISCOUNT)\n" +
141127
" - `hasPartner` (boolean): 제휴업체인지 여부\n" +
142128
" - `latitude` (Double): 가게 위치 위도\n" +
143129
" - `longitude` (Double): 가게 위치 경도\n" +
144130
" - `profileUrl` (String): 가게 카카오맵 URL\n" +
145131
" - `phoneNumber` (String): 가게 전화번호\n" +
132+
" - `partnerships` (Array): 제휴 정보 목록\n" +
133+
" - `adminId` (Long): 관리자 ID\n" +
134+
" - `adminName` (String): 관리자 이름\n" +
135+
" - `benefits` (Array): 혜택 목록\n" +
146136
" - `Admin`: 제휴업체 조회\n" +
147137
" - `partnerId` (Long): 제휴업체 ID\n" +
148138
" - `name` (String): 제휴업체 이름\n" +
@@ -222,4 +212,4 @@ public BaseResponse<List<PlaceSuggestionDTO>> search(
222212
return BaseResponse.onSuccess(SuccessStatus._OK, list);
223213
}
224214

225-
}
215+
}

src/main/java/com/assu/server/domain/map/dto/StoreMapResponseDTO.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public record StoreMapResponseDTO(
4040
public record PartnershipInfo(
4141
Long adminId,
4242
String adminName,
43-
String benefit
43+
List<String> benefits
4444
) {}
4545

4646
public static StoreMapResponseDTO of(
@@ -62,10 +62,10 @@ public static StoreMapResponseDTO of(
6262

6363
List<PartnershipInfo> partnerships = new java.util.ArrayList<>();
6464
if (adminId1 != null) {
65-
partnerships.add(new PartnershipInfo(adminId1, adminName1, benefit1));
65+
partnerships.add(new PartnershipInfo(adminId1, adminName1, List.of(benefit1)));
6666
}
6767
if (adminId2 != null) {
68-
partnerships.add(new PartnershipInfo(adminId2, adminName2, benefit2));
68+
partnerships.add(new PartnershipInfo(adminId2, adminName2, List.of(benefit2)));
6969
}
7070

7171
return new StoreMapResponseDTO(

src/main/java/com/assu/server/domain/map/service/MapServiceImpl.java

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -156,14 +156,34 @@ public List<StoreMapResponseDTO> getStores(MapRequestDTO viewport, Long memberId
156156
return storesWithActivePaper.stream().map(s -> {
157157
final List<Paper> sPapers = papersByStore.get(s.getId());
158158

159-
List<StoreMapResponseDTO.PartnershipInfo> partnerships = sPapers.stream()
160-
.map(paper -> {
161-
Long adminId = paper.getAdmin() != null ? paper.getAdmin().getId() : null;
162-
String adminName = paper.getAdmin() != null ? paper.getAdmin().getName() : null;
163-
String benefit = resolveBenefit(contentByPaperId.get(paper.getId()));
164-
return new StoreMapResponseDTO.PartnershipInfo(adminId, adminName, benefit);
159+
// admin별로 그룹화해서 benefits 리스트 생성
160+
Map<Long, List<String>> benefitsByAdmin = sPapers.stream()
161+
.collect(Collectors.groupingBy(
162+
paper -> paper.getAdmin().getId(),
163+
Collectors.mapping(
164+
paper -> {
165+
PaperContent content = contentByPaperId.get(paper.getId());
166+
return resolveBenefit(content);
167+
},
168+
Collectors.filtering(
169+
benefit -> benefit != null && !benefit.isBlank(),
170+
Collectors.toList()
171+
)
172+
)
173+
));
174+
175+
List<StoreMapResponseDTO.PartnershipInfo> partnerships = benefitsByAdmin.entrySet().stream()
176+
.map(entry -> {
177+
Long adminId = entry.getKey();
178+
List<String> benefits = entry.getValue();
179+
String adminName = sPapers.stream()
180+
.filter(p -> p.getAdmin().getId().equals(adminId))
181+
.findFirst()
182+
.map(p -> p.getAdmin().getName())
183+
.orElse(null);
184+
return new StoreMapResponseDTO.PartnershipInfo(adminId, adminName, benefits);
165185
})
166-
.filter(p -> p.adminId() != null)
186+
.filter(p -> p.adminId() != null && !p.benefits().isEmpty())
167187
.toList();
168188

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

258-
List<StoreMapResponseDTO.PartnershipInfo> partnerships = storePapers.stream()
259-
.map(paper -> {
260-
Long adminId = paper.getAdmin() != null ? paper.getAdmin().getId() : null;
261-
String adminName = paper.getAdmin() != null ? paper.getAdmin().getName() : null;
262-
PaperContent content = contentByPaperId.get(paper.getId());
263-
String benefit = resolveBenefit(content);
264-
return new StoreMapResponseDTO.PartnershipInfo(adminId, adminName, benefit);
278+
// admin별로 그룹화해서 benefits 리스트 생성
279+
Map<Long, List<String>> benefitsByAdmin = storePapers.stream()
280+
.collect(Collectors.groupingBy(
281+
paper -> paper.getAdmin().getId(),
282+
Collectors.mapping(
283+
paper -> {
284+
PaperContent content = contentByPaperId.get(paper.getId());
285+
return resolveBenefit(content);
286+
},
287+
Collectors.filtering(
288+
benefit -> benefit != null && !benefit.isBlank(),
289+
Collectors.toList()
290+
)
291+
)
292+
));
293+
294+
List<StoreMapResponseDTO.PartnershipInfo> partnerships = benefitsByAdmin.entrySet().stream()
295+
.map(entry -> {
296+
Long adminId = entry.getKey();
297+
List<String> benefits = entry.getValue();
298+
String adminName = storePapers.stream()
299+
.filter(p -> p.getAdmin().getId().equals(adminId))
300+
.findFirst()
301+
.map(p -> p.getAdmin().getName())
302+
.orElse(null);
303+
return new StoreMapResponseDTO.PartnershipInfo(adminId, adminName, benefits);
265304
})
266-
.filter(p -> p.adminId() != null)
305+
.filter(p -> p.adminId() != null && !p.benefits().isEmpty())
267306
.toList();
268307

269308
return StoreMapResponseDTO.ofWithPartnerships(s, partnerships, amazonS3Manager);

0 commit comments

Comments
 (0)