Skip to content

Commit 723fde1

Browse files
authored
Merge pull request #94 from YAPP-Github/fix/PRODUCT-193
[Fix] 스토리 등록 로직 수정
2 parents 65390cc + 44409de commit 723fde1

File tree

6 files changed

+34
-13
lines changed

6 files changed

+34
-13
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ public class StoryController {
2222
private final StoryService storyService;
2323

2424
@PostMapping("/api/stories")
25-
public ResponseEntity<Void> registerStory(
25+
public ResponseEntity<StoryRegisterResponse> registerStory(
2626
@RequestPart("request") StoryRegisterRequest request,
2727
@RequestPart("image") MultipartFile image,
2828
LoginMember member
2929
) {
30-
storyService.registerStory(request, image, member.id());
31-
return ResponseEntity.status(HttpStatus.CREATED).build();
30+
return ResponseEntity.status(HttpStatus.CREATED)
31+
.body(storyService.registerStory(request, image, member.id()));
3232
}
3333

3434
@GetMapping("api/stories")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package eatda.controller.story;
2+
3+
public record StoryRegisterResponse(
4+
long storyId
5+
) {
6+
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import eatda.controller.story.FilteredSearchResult;
55
import eatda.controller.story.StoriesResponse;
66
import eatda.controller.story.StoryRegisterRequest;
7+
import eatda.controller.story.StoryRegisterResponse;
78
import eatda.controller.story.StoryResponse;
89
import eatda.domain.member.Member;
910
import eatda.domain.story.Story;
@@ -34,7 +35,7 @@ public class StoryService {
3435
private final MemberRepository memberRepository;
3536

3637
@Transactional
37-
public void registerStory(StoryRegisterRequest request, MultipartFile image, Long memberId) {
38+
public StoryRegisterResponse registerStory(StoryRegisterRequest request, MultipartFile image, Long memberId) {
3839
Member member = memberRepository.getById(memberId);
3940
List<StoreSearchResult> searchResponses = storeService.searchStoreResults(request.query());
4041
FilteredSearchResult matchedStore = filteredSearchResponse(searchResponses, request.storeKakaoId());
@@ -52,6 +53,8 @@ public void registerStory(StoryRegisterRequest request, MultipartFile image, Lon
5253
.build();
5354

5455
storyRepository.save(story);
56+
57+
return new StoryRegisterResponse(story.getId());
5558
}
5659

5760
private FilteredSearchResult filteredSearchResponse(List<StoreSearchResult> responses, String storeKakaoId) {

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import static org.hamcrest.Matchers.equalTo;
55
import static org.junit.jupiter.api.Assertions.assertAll;
66
import static org.mockito.ArgumentMatchers.any;
7-
import static org.mockito.Mockito.doNothing;
87
import static org.mockito.Mockito.doReturn;
98
import static org.mockito.Mockito.doThrow;
109

@@ -22,7 +21,7 @@ public class StoryControllerTest extends BaseControllerTest {
2221

2322
@BeforeEach
2423
void setUpMock() {
25-
doNothing()
24+
doReturn(new StoryRegisterResponse(1L))
2625
.when(storyService)
2726
.registerStory(any(), any(), any());
2827
}
@@ -42,6 +41,10 @@ class RegisterStory {
4241

4342
byte[] imageBytes = "dummy image content".getBytes(StandardCharsets.UTF_8);
4443

44+
doReturn(new StoryRegisterResponse(123L))
45+
.when(storyService)
46+
.registerStory(any(), any(), any());
47+
4548
Response response = given()
4649
.contentType("multipart/form-data")
4750
.header("Authorization", accessToken())
@@ -50,7 +53,9 @@ class RegisterStory {
5053
.when()
5154
.post("/api/stories");
5255

53-
response.then().statusCode(201);
56+
response.then()
57+
.statusCode(201)
58+
.body("storyId", equalTo(123));
5459
}
5560
}
5661

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import static org.hamcrest.Matchers.equalTo;
44
import static org.mockito.ArgumentMatchers.any;
5-
import static org.mockito.Mockito.doNothing;
65
import static org.mockito.Mockito.doReturn;
76
import static org.mockito.Mockito.doThrow;
87
import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName;
98
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
109

1110
import eatda.controller.story.StoriesResponse;
11+
import eatda.controller.story.StoryRegisterResponse;
1212
import eatda.controller.story.StoryResponse;
1313
import eatda.document.BaseDocumentTest;
1414
import eatda.document.RestDocsRequest;
@@ -39,15 +39,19 @@ class RegisterStory {
3939
headerWithName(HttpHeaders.AUTHORIZATION).description("액세스 토큰")
4040
);
4141

42-
RestDocsResponse responseDocument = response();
42+
RestDocsResponse responseDocument = response()
43+
.responseBodyField(
44+
fieldWithPath("storyId").description("등록된 스토리의 ID")
45+
);
4346

4447
@Test
4548
void 스토리_등록_성공() {
4649
doReturn("https://dummy-s3.com/story.png")
4750
.when(imageService)
4851
.upload(any(), org.mockito.ArgumentMatchers.eq(ImageDomain.STORY));
4952

50-
doNothing().when(storyService)
53+
doReturn(new StoryRegisterResponse(123L))
54+
.when(storyService)
5155
.registerStory(any(), any(), any());
5256

5357
String requestJson = """
@@ -72,7 +76,9 @@ class RegisterStory {
7276
.multiPart("image", "image.png", imageBytes, "image/png")
7377
.when().post("/api/stories");
7478

75-
response.then().statusCode(201);
79+
response.then()
80+
.statusCode(201)
81+
.body("storyId", equalTo(123));
7682
}
7783

7884
@Test

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
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.assertDoesNotThrow;
65
import static org.mockito.Mockito.doReturn;
76
import static org.mockito.Mockito.mock;
87
import static org.mockito.Mockito.when;
@@ -48,7 +47,9 @@ class RegisterStory {
4847
doReturn(List.of(store)).when(mapClient).searchShops(request.query());
4948
when(imageService.upload(image, ImageDomain.STORY)).thenReturn("image-key");
5049

51-
assertDoesNotThrow(() -> storyService.registerStory(request, image, member.getId()));
50+
var response = storyService.registerStory(request, image, member.getId());
51+
52+
assertThat(storyRepository.existsById(response.storyId())).isTrue();
5253
}
5354

5455
@Test

0 commit comments

Comments
 (0)