Skip to content

Commit 02b8b59

Browse files
authored
Merge pull request #172 from YAPP-Github/feat/PRODUCT-257
[Feat] 응원 API 응답에 태그 정보 추가
2 parents e21ba4e + 5594bc6 commit 02b8b59

File tree

6 files changed

+25
-14
lines changed

6 files changed

+25
-14
lines changed
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
package eatda.controller.cheer;
22

33
import eatda.domain.cheer.Cheer;
4+
import eatda.domain.cheer.CheerTagName;
5+
import java.util.List;
46

57
public record CheerInStoreResponse(
68
long id,
79
long memberId,
810
String memberNickname,
9-
String description
11+
String description,
12+
List<CheerTagName> tags
1013
) {
1114

1215
public CheerInStoreResponse(Cheer cheer) {
1316
this(
1417
cheer.getId(),
1518
cheer.getMember().getId(),
1619
cheer.getMember().getNickname(),
17-
cheer.getDescription()
20+
cheer.getDescription(),
21+
cheer.getCheerTagNames()
1822
);
1923
}
2024
}

src/main/java/eatda/controller/cheer/CheerPreviewResponse.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package eatda.controller.cheer;
22

33
import eatda.domain.cheer.Cheer;
4+
import eatda.domain.cheer.CheerTagName;
5+
import java.util.List;
46

57
public record CheerPreviewResponse(
68
long storeId,
@@ -11,6 +13,7 @@ public record CheerPreviewResponse(
1113
String storeCategory,
1214
long cheerId,
1315
String cheerDescription,
16+
List<CheerTagName> tags,
1417
long memberId,
1518
String memberNickname
1619
) {
@@ -25,6 +28,7 @@ public CheerPreviewResponse(Cheer cheer, String imageUrl) {
2528
cheer.getStore().getCategory().getCategoryName(),
2629
cheer.getId(),
2730
cheer.getDescription(),
31+
cheer.getCheerTagNames(),
2832
cheer.getMember().getId(),
2933
cheer.getMember().getNickname()
3034
);

src/main/java/eatda/repository/cheer/CheerRepository.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313

1414
public interface CheerRepository extends JpaRepository<Cheer, Long> {
1515

16-
@EntityGraph(attributePaths = {"store", "member"})
16+
@EntityGraph(attributePaths = {"store", "member", "cheerTags.values"})
1717
List<Cheer> findAllByOrderByCreatedAtDesc(Pageable pageable);
1818

19-
@EntityGraph(attributePaths = {"member"})
20-
List<Cheer> findAllByStoreOrderByCreatedAtDesc(Store store, Pageable pageable);
19+
@EntityGraph(attributePaths = {"member", "cheerTags.values"})
20+
List<Cheer> findAllByStoreIdOrderByCreatedAtDesc(Long storeId, Pageable pageable);
2121

2222
@Query("""
2323
SELECT c.imageKey FROM Cheer c

src/main/java/eatda/service/cheer/CheerService.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,11 @@ private CheersResponse toCheersResponse(List<Cheer> cheers) {
7575

7676
@Transactional(readOnly = true)
7777
public CheersInStoreResponse getCheersByStoreId(Long storeId, int page, int size) {
78-
Store store = storeRepository.getById(storeId);
79-
List<Cheer> cheers = cheerRepository.findAllByStoreOrderByCreatedAtDesc(store, PageRequest.of(page, size));
78+
List<Cheer> cheers = cheerRepository.findAllByStoreIdOrderByCreatedAtDesc(storeId, PageRequest.of(page, size));
8079

8180
List<CheerInStoreResponse> cheersResponse = cheers.stream()
8281
.map(CheerInStoreResponse::new)
83-
.toList(); // TODO N+1 문제 해결
82+
.toList();
8483
return new CheersInStoreResponse(cheersResponse);
8584
}
8685
}

src/test/java/eatda/controller/cheer/CheerControllerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ class GetCheers {
100100
() -> assertThat(firstResponse.storeId()).isEqualTo(store2.getId()),
101101
() -> assertThat(firstResponse.storeDistrict()).isEqualTo("성북구"),
102102
() -> assertThat(firstResponse.storeNeighborhood()).isEqualTo("석관동"),
103-
() -> assertThat(firstResponse.cheerId()).isEqualTo(cheer3.getId())
103+
() -> assertThat(firstResponse.cheerId()).isEqualTo(cheer3.getId()),
104+
() -> assertThat(firstResponse.tags()).isEmpty()
104105
);
105106
}
106107

src/test/java/eatda/document/cheer/CheerDocumentTest.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ class GetCheers {
157157
fieldWithPath("cheers[].storeCategory").type(STRING).description("가게 카테고리"),
158158
fieldWithPath("cheers[].cheerId").type(NUMBER).description("응원 ID"),
159159
fieldWithPath("cheers[].cheerDescription").type(STRING).description("응원 내용"),
160+
fieldWithPath("cheers[].tags").type(ARRAY).description("응원 태그 목록"),
160161
fieldWithPath("cheers[].memberId").type(NUMBER).description("응원 작성자 회원 ID"),
161162
fieldWithPath("cheers[].memberNickname").type(STRING).description("응원 작성자 닉네임")
162163
);
@@ -167,9 +168,9 @@ class GetCheers {
167168
int size = 2;
168169
CheersResponse responses = new CheersResponse(List.of(
169170
new CheerPreviewResponse(2L, "https://example.image", "농민백암순대 본점", "강남구", "선릉구", "한식", 2L,
170-
"너무 맛있어요!", 5L, "커찬"),
171+
"너무 맛있어요!", List.of(CheerTagName.INSTAGRAMMABLE, CheerTagName.CLEAN_RESTROOM), 5L, "커찬"),
171172
new CheerPreviewResponse(1L, null, "석관동떡볶이", "성북구", "석관동", "기타", 1L,
172-
"너무 매워요! 하지만 맛있어요!", 8L, "찬커")
173+
"너무 매워요! 하지만 맛있어요!", List.of(), 8L, "찬커")
173174
));
174175
doReturn(responses).when(cheerService).getCheers(page, size);
175176

@@ -225,7 +226,8 @@ class GetCheersByStoreId {
225226
fieldWithPath("cheers[].id").type(NUMBER).description("응원 ID"),
226227
fieldWithPath("cheers[].memberId").type(NUMBER).description("응원 작성자 회원 ID"),
227228
fieldWithPath("cheers[].memberNickname").type(STRING).description("응원 작성자 닉네임"),
228-
fieldWithPath("cheers[].description").type(STRING).description("응원 내용")
229+
fieldWithPath("cheers[].description").type(STRING).description("응원 내용"),
230+
fieldWithPath("cheers[].tags").type(ARRAY).description("응원 태그 목록")
229231
);
230232

231233
@Test
@@ -234,8 +236,9 @@ class GetCheersByStoreId {
234236
int page = 0;
235237
int size = 2;
236238
CheersInStoreResponse responses = new CheersInStoreResponse(List.of(
237-
new CheerInStoreResponse(20L, 5L, "커찬", "너무 맛있어요!"),
238-
new CheerInStoreResponse(10L, 3L, "찬커", "너무 매워요! 하지만 맛있어요!")
239+
new CheerInStoreResponse(20L, 5L, "커찬", "너무 맛있어요!",
240+
List.of(CheerTagName.INSTAGRAMMABLE, CheerTagName.CLEAN_RESTROOM, CheerTagName.ENERGETIC)),
241+
new CheerInStoreResponse(10L, 3L, "찬커", "너무 매워요! 하지만 맛있어요!", List.of())
239242
));
240243
doReturn(responses).when(cheerService).getCheersByStoreId(storeId, page, size);
241244

0 commit comments

Comments
 (0)