Skip to content

Commit d886c55

Browse files
committed
Merge branch 'develop' into feat/PRODUCT-197
# Conflicts: # src/main/java/eatda/service/store/StoreService.java # src/test/java/eatda/controller/store/StoreControllerTest.java # src/test/java/eatda/document/store/StoreDocumentTest.java # src/test/java/eatda/service/store/StoreServiceTest.java
2 parents 706a5f8 + aee2827 commit d886c55

File tree

14 files changed

+261
-87
lines changed

14 files changed

+261
-87
lines changed

src/main/java/eatda/client/map/StoreSearchResult.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ public record StoreSearchResult(
2626
"음식점 > 일식", StoreCategory.JAPANESE,
2727
"음식점 > 양식", StoreCategory.WESTERN,
2828
"음식점 > 카페", StoreCategory.CAFE,
29-
"음식점 > 간식 > 제과,베이커리", StoreCategory.BAKERY,
30-
"음식점 > 술집", StoreCategory.PUB,
31-
"음식점 > 패스트푸드", StoreCategory.FAST_FOOD
29+
"음식점 > 간식 > 제과,베이커리", StoreCategory.CAFE
3230
);
3331

3432
public boolean isFoodStore() {

src/main/java/eatda/controller/store/StoreController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ public ResponseEntity<StoresResponse> getStores(@RequestParam @Min(1) @Max(50) i
2727
return ResponseEntity.ok(storeService.getStores(size));
2828
}
2929

30+
@GetMapping("/api/shops/{storeId}")
31+
public ResponseEntity<StoreResponse> getStore(@PathVariable long storeId) {
32+
StoreResponse response = storeService.getStore(storeId);
33+
return ResponseEntity.ok(response);
34+
}
35+
3036
@GetMapping("/api/shop/search")
3137
public ResponseEntity<StoreSearchResponses> searchStore(@RequestParam String query, LoginMember member) {
3238
StoreSearchResponses response = storeService.searchStores(query);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package eatda.controller.store;
2+
3+
import eatda.domain.store.Store;
4+
5+
public record StoreResponse(
6+
long id,
7+
String kakaoId,
8+
String name,
9+
String district,
10+
String neighborhood,
11+
String category,
12+
String placeUrl
13+
) {
14+
15+
public StoreResponse(Store store) {
16+
this(
17+
store.getId(),
18+
store.getKakaoId(),
19+
store.getName(),
20+
store.getAddressDistrict(),
21+
store.getAddressNeighborhood(),
22+
store.getCategory().getCategoryName(),
23+
store.getPlaceUrl()
24+
);
25+
}
26+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package eatda.controller.story;
22

33
public record StoryRegisterRequest(
4-
String query,
4+
String storeName,
55
String storeKakaoId,
66
String description
77
) {

src/main/java/eatda/domain/store/StoreCategory.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ public enum StoreCategory {
1313
JAPANESE("일식"),
1414
WESTERN("양식"),
1515
CAFE("카페"),
16-
BAKERY("베이커리"),
17-
PUB("술집"),
18-
FAST_FOOD("패스트푸드"),
1916
OTHER("기타");
2017

2118
private final String categoryName;
@@ -33,13 +30,4 @@ public static StoreCategory from(String value) {
3330
.findFirst()
3431
.orElseThrow(() -> new BusinessException(BusinessErrorCode.INVALID_STORE_CATEGORY));
3532
}
36-
37-
public static boolean isValid(String value) {
38-
try {
39-
from(value);
40-
return true;
41-
} catch (BusinessException e) {
42-
return false;
43-
}
44-
}
4533
}

src/main/java/eatda/service/store/StoreService.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import eatda.client.map.StoreSearchResult;
88
import eatda.controller.store.ImagesResponse;
99
import eatda.controller.store.StorePreviewResponse;
10+
import eatda.controller.store.StoreResponse;
1011
import eatda.controller.store.StoreSearchResponses;
1112
import eatda.controller.store.StoresResponse;
1213
import eatda.domain.store.Store;
@@ -29,13 +30,9 @@ public class StoreService {
2930
private final CheerRepository cheerRepository;
3031
private final ImageStorage imageStorage;
3132

32-
public ImagesResponse getStoreImages(long storeId) {
33+
public StoreResponse getStore(long storeId) {
3334
Store store = storeRepository.getById(storeId);
34-
List<String> imageUrls = cheerRepository.findAllImageKey(store)
35-
.stream()
36-
.map(imageStorage::getPreSignedUrl)
37-
.toList();
38-
return new ImagesResponse(imageUrls);
35+
return new StoreResponse(store);
3936
}
4037

4138
// TODO : N+1 문제 해결
@@ -46,6 +43,15 @@ public StoresResponse getStores(int size) {
4643
.collect(collectingAndThen(toList(), StoresResponse::new));
4744
}
4845

46+
public ImagesResponse getStoreImages(long storeId) {
47+
Store store = storeRepository.getById(storeId);
48+
List<String> imageUrls = cheerRepository.findAllImageKey(store)
49+
.stream()
50+
.map(imageStorage::getPreSignedUrl)
51+
.toList();
52+
return new ImagesResponse(imageUrls);
53+
}
54+
4955
private Optional<String> getStoreImageUrl(Store store) {
5056
return cheerRepository.findRecentImageKey(store)
5157
.map(imageStorage::getPreSignedUrl);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class StoryService {
4040
@Transactional
4141
public StoryRegisterResponse registerStory(StoryRegisterRequest request, MultipartFile imageFile, Long memberId) {
4242
Member member = memberRepository.getById(memberId);
43-
List<StoreSearchResult> searchResponses = mapClient.searchShops(request.query());
43+
List<StoreSearchResult> searchResponses = mapClient.searchShops(request.storeName());
4444
FilteredSearchResult matchedStore = filteredSearchResponse(searchResponses, request.storeKakaoId());
4545
ImageKey imageKey = imageStorage.upload(new Image(ImageDomain.STORY, imageFile));
4646

src/main/resources/application-dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jwt:
4343
cors:
4444
origin:
4545
- "http://localhost:3000"
46-
- "https://api-dev.eatda.net"
46+
- "https://dev.eatda.net"
4747

4848
oauth:
4949
client-id: ${OAUTH_CLIENT_ID}

src/test/java/eatda/controller/store/StoreControllerTest.java

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,38 +13,28 @@
1313
class StoreControllerTest extends BaseControllerTest {
1414

1515
@Nested
16-
class GetStoreImages {
16+
class GetStore {
1717

1818
@Test
19-
void 음식점_이미지들을_조회한다() {
19+
void 음식점_정보를_조회한다() {
2020
Member member = memberGenerator.generate("111");
2121
Store store = storeGenerator.generate("농민백암순대", "서울 강남구 대치동 896-33");
22-
cheerGenerator.generateCommon(member, store, "image-key-1");
23-
cheerGenerator.generateCommon(member, store, "image-key-2");
24-
cheerGenerator.generateCommon(member, store, "image-key-3");
22+
cheerGenerator.generateCommon(member, store, "image-key");
2523

26-
ImagesResponse response = given()
24+
StoreResponse response = given()
25+
.pathParam("storeId", store.getId())
2726
.when()
28-
.get("/api/shops/{storeId}/images", store.getId())
27+
.get("/api/shops/{storeId}")
2928
.then()
3029
.statusCode(200)
31-
.extract().as(ImagesResponse.class);
30+
.extract().as(StoreResponse.class);
3231

33-
assertThat(response.imageUrls()).hasSize(3);
34-
}
35-
36-
@Test
37-
void 음식점_이미지가_없다면_빈_리스트를_반환한다() {
38-
Store store = storeGenerator.generate("농민백암순대", "서울 강남구 대치동 896-33");
39-
40-
ImagesResponse response = given()
41-
.when()
42-
.get("/api/shops/{storeId}/images", store.getId())
43-
.then()
44-
.statusCode(200)
45-
.extract().as(ImagesResponse.class);
46-
47-
assertThat(response.imageUrls()).isEmpty();
32+
assertAll(
33+
() -> assertThat(response.id()).isEqualTo(store.getId()),
34+
() -> assertThat(response.name()).isEqualTo(store.getName()),
35+
() -> assertThat(response.district()).isEqualTo("강남구"),
36+
() -> assertThat(response.neighborhood()).isEqualTo("대치동")
37+
);
4838
}
4939
}
5040

@@ -79,6 +69,42 @@ class GetStores {
7969
}
8070
}
8171

72+
@Nested
73+
class GetStoreImages {
74+
75+
@Test
76+
void 음식점_이미지들을_조회한다() {
77+
Member member = memberGenerator.generate("111");
78+
Store store = storeGenerator.generate("농민백암순대", "서울 강남구 대치동 896-33");
79+
cheerGenerator.generateCommon(member, store, "image-key-1");
80+
cheerGenerator.generateCommon(member, store, "image-key-2");
81+
cheerGenerator.generateCommon(member, store, "image-key-3");
82+
83+
ImagesResponse response = given()
84+
.when()
85+
.get("/api/shops/{storeId}/images", store.getId())
86+
.then()
87+
.statusCode(200)
88+
.extract().as(ImagesResponse.class);
89+
90+
assertThat(response.imageUrls()).hasSize(3);
91+
}
92+
93+
@Test
94+
void 음식점_이미지가_없다면_빈_리스트를_반환한다() {
95+
Store store = storeGenerator.generate("농민백암순대", "서울 강남구 대치동 896-33");
96+
97+
ImagesResponse response = given()
98+
.when()
99+
.get("/api/shops/{storeId}/images", store.getId())
100+
.then()
101+
.statusCode(200)
102+
.extract().as(ImagesResponse.class);
103+
104+
assertThat(response.imageUrls()).isEmpty();
105+
}
106+
}
107+
82108
@Nested
83109
class SearchStores {
84110

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,25 @@ public class CheerDocumentTest extends BaseDocumentTest {
3939
@Nested
4040
class RegisterCheer {
4141

42+
private static final String REQUEST_DESCRIPTION_MARKDOWN = """
43+
- 요청 형식 : multipart/form-data
44+
- 요청 field
45+
- `image` : 응원 이미지 (선택, 최대 5MB, 허용 타입 : image/jpg, image/jpeg, image/png
46+
- `request` : 응원 등록 요청 정보 (필수, 허용 타입 : application/json)
47+
- request body 예시
48+
```json
49+
{
50+
"storeKakaoId": "123", // 가게 카카오 ID
51+
"storeName": "농민백암순대 본점", // 가게 이름
52+
"description": "너무 맛있어요! 준환님 추천 맛집!" // 응원 내용
53+
}
54+
```
55+
""";
56+
4257
RestDocsRequest requestDocument = request()
4358
.tag(Tag.STORE_API)
4459
.summary("응원 등록")
60+
.description(REQUEST_DESCRIPTION_MARKDOWN)
4561
.requestHeader(
4662
headerWithName("Authorization").description("인증 토큰")
4763
).multipartField(

0 commit comments

Comments
 (0)