Skip to content

Commit 03ca575

Browse files
committed
Merge branch 'develop' into feat/get-stories-kakaoId
# Conflicts: # src/test/java/eatda/document/story/StoryDocumentTest.java
2 parents ce915dc + 0db5d62 commit 03ca575

File tree

5 files changed

+73
-17
lines changed

5 files changed

+73
-17
lines changed

src/main/java/eatda/controller/story/StoryResponse.java

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

3+
import org.springframework.lang.Nullable;
4+
35
public record StoryResponse(
6+
@Nullable Long storeId,
47
String storeKakaoId,
58
String category,
69
String storeName,
@@ -11,4 +14,5 @@ public record StoryResponse(
1114
long memberId,
1215
String memberNickname
1316
) {
17+
1418
}

src/main/java/eatda/service/story/StoryService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212
import eatda.domain.ImageDomain;
1313
import eatda.domain.ImageKey;
1414
import eatda.domain.member.Member;
15+
import eatda.domain.store.Store;
1516
import eatda.domain.story.Story;
1617
import eatda.exception.BusinessErrorCode;
1718
import eatda.exception.BusinessException;
1819
import eatda.repository.member.MemberRepository;
20+
import eatda.repository.store.StoreRepository;
1921
import eatda.repository.story.StoryRepository;
2022
import eatda.storage.image.ImageStorage;
2123
import java.util.List;
@@ -36,6 +38,7 @@ public class StoryService {
3638
private final ImageStorage imageStorage;
3739
private final MapClient mapClient;
3840
private final StoryRepository storyRepository;
41+
private final StoreRepository storeRepository;
3942
private final MemberRepository memberRepository;
4043

4144
@Transactional
@@ -94,8 +97,12 @@ public StoriesResponse getPagedStoryPreviews(int size) {
9497
public StoryResponse getStory(long storyId) {
9598
Story story = storyRepository.findById(storyId)
9699
.orElseThrow(() -> new BusinessException(BusinessErrorCode.STORY_NOT_FOUND));
100+
Long storeId = storeRepository.findByKakaoId(story.getStoreKakaoId())
101+
.map(Store::getId)
102+
.orElse(null);
97103

98104
return new StoryResponse(
105+
storeId,
99106
story.getStoreKakaoId(),
100107
story.getStoreCategory().getCategoryName(),
101108
story.getStoreName(),

src/test/java/eatda/controller/story/StoryControllerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class GetStory {
9191
long storyId = 1L;
9292

9393
doReturn(new StoryResponse(
94+
5L,
9495
"123456",
9596
"한식",
9697
"진또곱창집",
@@ -111,6 +112,7 @@ class GetStory {
111112
.extract().as(StoryResponse.class);
112113

113114
assertAll(
115+
() -> assertThat(response.storeId()).isEqualTo(5L),
114116
() -> assertThat(response.storeKakaoId()).isEqualTo("123456"),
115117
() -> assertThat(response.category()).isEqualTo("한식"),
116118
() -> assertThat(response.storeName()).isEqualTo("진또곱창집"),

src/test/java/eatda/document/story/StoryDocumentTest.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -169,21 +169,23 @@ class GetStory {
169169

170170
RestDocsResponse responseDocument = response()
171171
.responseBodyField(
172-
fieldWithPath("storeKakaoId").description("가게의 카카오 ID"),
173-
fieldWithPath("category").description("가게 카테고리"),
174-
fieldWithPath("storeName").description("가게 이름"),
175-
fieldWithPath("storeDistrict").description("가게 주소의 구"),
176-
fieldWithPath("storeNeighborhood").description("가게 주소의 동"),
177-
fieldWithPath("description").description("스토리 내용"),
178-
fieldWithPath("imageUrl").description("스토리 이미지 URL"),
179-
fieldWithPath("memberId").description("회원 ID"),
180-
fieldWithPath("memberNickname").description("회원 닉네임")
172+
fieldWithPath("storeId").type(NUMBER).description("가게의 카카오 ID (nullable)").optional(),
173+
fieldWithPath("storeKakaoId").type(STRING).description("가게의 카카오 ID"),
174+
fieldWithPath("category").type(STRING).description("가게 카테고리"),
175+
fieldWithPath("storeName").type(STRING).description("가게 이름"),
176+
fieldWithPath("storeDistrict").type(STRING).description("가게 주소의 구"),
177+
fieldWithPath("storeNeighborhood").type(STRING).description("가게 주소의 동"),
178+
fieldWithPath("description").type(STRING).description("스토리 내용"),
179+
fieldWithPath("imageUrl").type(STRING).description("스토리 이미지 URL"),
180+
fieldWithPath("memberId").type(NUMBER).description("회원 ID"),
181+
fieldWithPath("memberNickname").type(STRING).description("회원 닉네임")
181182
);
182183

183184
@Test
184185
void 스토리_상세_조회_성공() {
185186
long storyId = 1L;
186187
StoryResponse response = new StoryResponse(
188+
null,
187189
"123456",
188190
"한식",
189191
"진또곱창집",

src/test/java/eatda/service/story/StoryServiceTest.java

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44
import static org.assertj.core.api.Assertions.assertThatThrownBy;
5+
import static org.junit.jupiter.api.Assertions.assertAll;
56
import static org.mockito.Mockito.doReturn;
67
import static org.mockito.Mockito.mock;
78
import static org.mockito.Mockito.when;
@@ -13,6 +14,7 @@
1314
import eatda.controller.story.StoryResponse;
1415
import eatda.domain.ImageKey;
1516
import eatda.domain.member.Member;
17+
import eatda.domain.store.Store;
1618
import eatda.domain.store.StoreCategory;
1719
import eatda.domain.story.Story;
1820
import eatda.exception.BusinessErrorCode;
@@ -108,7 +110,7 @@ class GetPagedStoryPreviews {
108110
class GetStory {
109111

110112
@Test
111-
void 스토리_상세_정보를_조회할_수_있다() {
113+
void 스토리_상세_정보를_조회할_때_스토어ID가_없으면_NULL로_반환된다() {
112114
Member member = memberGenerator.generate("99999");
113115

114116
Story story = Story.builder()
@@ -121,21 +123,60 @@ class GetStory {
121123
.description("곱창은 여기")
122124
.imageKey(new ImageKey("story-image-key"))
123125
.build();
126+
storyRepository.save(story);
127+
128+
when(externalImageStorage.getPreSignedUrl(new ImageKey("story-image-key")))
129+
.thenReturn("https://s3.bucket.com/story/dummy/1.jpg");
130+
131+
StoryResponse response = storyService.getStory(story.getId());
124132

133+
assertAll(
134+
() -> assertThat(response.storeId()).isNull(),
135+
() -> assertThat(response.storeKakaoId()).isEqualTo("123456"),
136+
() -> assertThat(response.category()).isEqualTo("한식"),
137+
() -> assertThat(response.storeName()).isEqualTo("진또곱창집"),
138+
() -> assertThat(response.storeDistrict()).isEqualTo("성동구"),
139+
() -> assertThat(response.storeNeighborhood()).isEqualTo("성수동1가"),
140+
() -> assertThat(response.description()).isEqualTo("곱창은 여기"),
141+
() -> assertThat(response.imageUrl()).isEqualTo("https://s3.bucket.com/story/dummy/1.jpg"),
142+
() -> assertThat(response.memberId()).isEqualTo(member.getId()),
143+
() -> assertThat(response.memberNickname()).isEqualTo(member.getNickname())
144+
);
145+
}
146+
147+
@Test
148+
void 스토리_상세_정보를_조회할_때_스토어ID가_있으면_해당_ID값을_반환한다() {
149+
Member member = memberGenerator.generate("99999");
150+
Store store = storeGenerator.generate("123456", "서울시 성북구 장위동 123-45");
151+
Story story = Story.builder()
152+
.member(member)
153+
.storeKakaoId("123456")
154+
.storeName("진또곱창집")
155+
.storeRoadAddress("서울시 성동구 왕십리로 1길 12")
156+
.storeLotNumberAddress("서울시 성동구 성수동1가 685-12")
157+
.storeCategory(StoreCategory.KOREAN)
158+
.description("곱창은 여기")
159+
.imageKey(new ImageKey("story-image-key"))
160+
.build();
125161
storyRepository.save(story);
126162

127163
when(externalImageStorage.getPreSignedUrl(new ImageKey("story-image-key")))
128164
.thenReturn("https://s3.bucket.com/story/dummy/1.jpg");
129165

130166
StoryResponse response = storyService.getStory(story.getId());
131167

132-
assertThat(response.storeKakaoId()).isEqualTo("123456");
133-
assertThat(response.category()).isEqualTo("한식");
134-
assertThat(response.storeName()).isEqualTo("진또곱창집");
135-
assertThat(response.storeDistrict()).isEqualTo("성동구");
136-
assertThat(response.storeNeighborhood()).isEqualTo("성수동1가");
137-
assertThat(response.description()).isEqualTo("곱창은 여기");
138-
assertThat(response.imageUrl()).isEqualTo("https://s3.bucket.com/story/dummy/1.jpg");
168+
assertAll(
169+
() -> assertThat(response.storeId()).isEqualTo(store.getId()),
170+
() -> assertThat(response.storeKakaoId()).isEqualTo("123456"),
171+
() -> assertThat(response.category()).isEqualTo("한식"),
172+
() -> assertThat(response.storeName()).isEqualTo("진또곱창집"),
173+
() -> assertThat(response.storeDistrict()).isEqualTo("성동구"),
174+
() -> assertThat(response.storeNeighborhood()).isEqualTo("성수동1가"),
175+
() -> assertThat(response.description()).isEqualTo("곱창은 여기"),
176+
() -> assertThat(response.imageUrl()).isEqualTo("https://s3.bucket.com/story/dummy/1.jpg"),
177+
() -> assertThat(response.memberId()).isEqualTo(member.getId()),
178+
() -> assertThat(response.memberNickname()).isEqualTo(member.getNickname())
179+
);
139180
}
140181

141182
@Test

0 commit comments

Comments
 (0)