Skip to content

Commit 023ed2d

Browse files
committed
feat : 가게 상세 조회 서비스 로직 구현
1 parent 48ad47d commit 023ed2d

File tree

4 files changed

+75
-3
lines changed

4 files changed

+75
-3
lines changed
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/repository/store/StoreRepository.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package eatda.repository.store;
22

33
import eatda.domain.store.Store;
4+
import eatda.exception.BusinessErrorCode;
5+
import eatda.exception.BusinessException;
46
import java.util.List;
57
import java.util.Optional;
68
import org.springframework.data.domain.Pageable;
7-
import org.springframework.data.repository.Repository;
9+
import org.springframework.data.jpa.repository.JpaRepository;
810

9-
public interface StoreRepository extends Repository<Store, Long> {
11+
public interface StoreRepository extends JpaRepository<Store, Long> {
1012

11-
Store save(Store store);
13+
@Override
14+
default Store getById(Long id) {
15+
return findById(id)
16+
.orElseThrow(() -> new BusinessException(BusinessErrorCode.STORE_NOT_FOUND));
17+
}
1218

1319
Optional<Store> findByKakaoId(String kakaoId);
1420

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import eatda.client.map.MapClient;
77
import eatda.client.map.StoreSearchResult;
88
import eatda.controller.store.StorePreviewResponse;
9+
import eatda.controller.store.StoreResponse;
910
import eatda.controller.store.StoreSearchResponses;
1011
import eatda.controller.store.StoresResponse;
1112
import eatda.domain.store.Store;
@@ -28,6 +29,11 @@ public class StoreService {
2829
private final CheerRepository cheerRepository;
2930
private final ImageStorage imageStorage;
3031

32+
public StoreResponse getStore(long storeId) {
33+
Store store = storeRepository.getById(storeId);
34+
return new StoreResponse(store);
35+
}
36+
3137
// TODO : N+1 문제 해결
3238
public StoresResponse getStores(int size) {
3339
return storeRepository.findAllByOrderByCreatedAtDesc(Pageable.ofSize(size))

src/test/java/eatda/service/store/StoreServiceTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44
import static org.junit.jupiter.api.Assertions.assertAll;
5+
import static org.junit.jupiter.api.Assertions.assertThrows;
56
import static org.mockito.ArgumentMatchers.anyString;
67
import static org.mockito.Mockito.doReturn;
78

89
import eatda.client.map.StoreSearchResult;
10+
import eatda.controller.store.StoreResponse;
911
import eatda.domain.member.Member;
1012
import eatda.domain.store.Store;
13+
import eatda.exception.BusinessErrorCode;
14+
import eatda.exception.BusinessException;
1115
import eatda.service.BaseServiceTest;
1216
import java.util.List;
1317
import org.junit.jupiter.api.Nested;
@@ -19,6 +23,36 @@ class StoreServiceTest extends BaseServiceTest {
1923
@Autowired
2024
private StoreService storeService;
2125

26+
@Nested
27+
class GetStore {
28+
29+
@Test
30+
void 음식점_정보를_조회한다() {
31+
Member member = memberGenerator.generate("111");
32+
Store store = storeGenerator.generate("농민백암순대", "서울 강남구 대치동 896-33");
33+
cheerGenerator.generateCommon(member, store, "image-key");
34+
35+
StoreResponse response = storeService.getStore(store.getId());
36+
37+
assertAll(
38+
() -> assertThat(response.id()).isEqualTo(store.getId()),
39+
() -> assertThat(response.name()).isEqualTo(store.getName()),
40+
() -> assertThat(response.district()).isEqualTo("강남구"),
41+
() -> assertThat(response.neighborhood()).isEqualTo("대치동")
42+
);
43+
}
44+
45+
@Test
46+
void 해당_음식점이_없을_경우_예외를_던진다() {
47+
long nonExistentStoreId = 999L;
48+
49+
BusinessException exception = assertThrows(BusinessException.class,
50+
() -> storeService.getStore(nonExistentStoreId));
51+
52+
assertThat(exception.getErrorCode()).isEqualTo(BusinessErrorCode.STORE_NOT_FOUND);
53+
}
54+
}
55+
2256
@Nested
2357
class GetStores {
2458

0 commit comments

Comments
 (0)