diff --git a/dump.rdb b/dump.rdb index 1d341a2..607a2d5 100644 Binary files a/dump.rdb and b/dump.rdb differ diff --git a/logs/recommend-service.log.2025-06-17.0.gz b/logs/recommend-service.log.2025-06-17.0.gz new file mode 100644 index 0000000..cc1fa56 Binary files /dev/null and b/logs/recommend-service.log.2025-06-17.0.gz differ diff --git a/store/src/main/java/com/ktds/hi/store/biz/service/StoreService.java b/store/src/main/java/com/ktds/hi/store/biz/service/StoreService.java index c8f0e7c..5e00998 100644 --- a/store/src/main/java/com/ktds/hi/store/biz/service/StoreService.java +++ b/store/src/main/java/com/ktds/hi/store/biz/service/StoreService.java @@ -3,6 +3,7 @@ package com.ktds.hi.store.biz.service; import com.ktds.hi.store.biz.usecase.in.StoreUseCase; import com.ktds.hi.store.infra.dto.*; +import com.ktds.hi.store.infra.dto.response.StoreListResponse; import com.ktds.hi.store.infra.gateway.entity.StoreEntity; import com.ktds.hi.store.infra.gateway.entity.TagEntity; import com.ktds.hi.store.infra.gateway.repository.StoreJpaRepository; @@ -93,6 +94,27 @@ public class StoreService implements StoreUseCase { .collect(Collectors.toList()); } + + @Override + public List getAllStores() { + + List stores = storeJpaRepository.findAll(); + + return stores.stream() + .map(store -> StoreListResponse.builder() + .storeId(store.getId()) + .storeName(store.getStoreName()) + .address(store.getAddress()) + .category(store.getCategory()) + .rating(store.getRating()) + .reviewCount(store.getReviewCount()) + .status("운영중") + .imageUrl(store.getImageUrl()) + .operatingHours(store.getOperatingHours()) + .build()) + .collect(Collectors.toList()); + } + @Override public StoreDetailResponse getStoreDetail(Long storeId) { @@ -157,6 +179,10 @@ public class StoreService implements StoreUseCase { .build(); } + + + + @Override public List searchStores(String keyword, String category, String tags, Double latitude, Double longitude, Integer radius, diff --git a/store/src/main/java/com/ktds/hi/store/biz/usecase/in/StoreUseCase.java b/store/src/main/java/com/ktds/hi/store/biz/usecase/in/StoreUseCase.java index c402215..3165a10 100644 --- a/store/src/main/java/com/ktds/hi/store/biz/usecase/in/StoreUseCase.java +++ b/store/src/main/java/com/ktds/hi/store/biz/usecase/in/StoreUseCase.java @@ -1,6 +1,7 @@ package com.ktds.hi.store.biz.usecase.in; import com.ktds.hi.store.infra.dto.*; +import com.ktds.hi.store.infra.dto.response.StoreListResponse; import java.util.List; @@ -30,6 +31,8 @@ public interface StoreUseCase { */ List getMyStores(Long ownerId); + List getAllStores(); + /** * 매장 상세 조회 * @@ -73,4 +76,6 @@ public interface StoreUseCase { List searchStores(String keyword, String category, String tags, Double latitude, Double longitude, Integer radius, Integer page, Integer size); + + } diff --git a/store/src/main/java/com/ktds/hi/store/infra/controller/StoreController.java b/store/src/main/java/com/ktds/hi/store/infra/controller/StoreController.java index 35bffa7..78081c7 100644 --- a/store/src/main/java/com/ktds/hi/store/infra/controller/StoreController.java +++ b/store/src/main/java/com/ktds/hi/store/infra/controller/StoreController.java @@ -1,11 +1,14 @@ // store/src/main/java/com/ktds/hi/store/infra/controller/StoreController.java package com.ktds.hi.store.infra.controller; +import com.ktds.hi.store.biz.service.StoreService; import com.ktds.hi.store.biz.usecase.in.MenuUseCase; import com.ktds.hi.store.biz.usecase.in.StoreUseCase; +import com.ktds.hi.store.domain.Store; import com.ktds.hi.store.infra.dto.*; import com.ktds.hi.common.dto.ApiResponse; import com.ktds.hi.common.security.JwtTokenProvider; +import com.ktds.hi.store.infra.dto.response.StoreListResponse; import com.ktds.hi.store.infra.dto.response.StoreMenuListResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -38,6 +41,7 @@ import java.util.List; public class StoreController { private final StoreUseCase storeUseCase; + private final StoreService storeService; private final JwtTokenProvider jwtTokenProvider; private final MenuUseCase menuUseCase; @@ -68,6 +72,14 @@ public class StoreController { return ResponseEntity.ok(ApiResponse.success(responses, "내 매장 목록 조회 완료")); } + @GetMapping("/stores/all") + @Operation(summary = "매장 전체 리스트") + public ResponseEntity>> getAllStores() { + + List responses = storeUseCase.getAllStores(); + return ResponseEntity.ok(ApiResponse.success(responses)); + } + @Operation(summary = "매장 상세 조회", description = "매장의 상세 정보를 조회합니다.") @GetMapping("/{storeId}") public ResponseEntity> getStoreDetail( @@ -133,6 +145,8 @@ public class StoreController { + + @GetMapping("/{storeId}/menus/popular") @Operation(summary = "매장 인기 메뉴 조회", description = "매장의 인기 메뉴(주문 횟수 기준)를 조회합니다.") public ResponseEntity>> getPopularMenus( diff --git a/store/src/main/java/com/ktds/hi/store/infra/dto/response/StoreListResponse.java b/store/src/main/java/com/ktds/hi/store/infra/dto/response/StoreListResponse.java new file mode 100644 index 0000000..35cfa0f --- /dev/null +++ b/store/src/main/java/com/ktds/hi/store/infra/dto/response/StoreListResponse.java @@ -0,0 +1,42 @@ +package com.ktds.hi.store.infra.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "내 매장 목록 응답") +public class StoreListResponse { + + + @Schema(description = "매장 ID", example = "1") + private Long storeId; + + @Schema(description = "매장명", example = "맛집 한번 가볼래?") + private String storeName; + + @Schema(description = "주소", example = "서울시 강남구 테헤란로 123") + private String address; + + @Schema(description = "카테고리", example = "한식") + private String category; + + @Schema(description = "평점", example = "4.5") + private Double rating; + + @Schema(description = "리뷰 수", example = "127") + private Integer reviewCount; + + @Schema(description = "운영 상태", example = "운영중") + private String status; + + @Schema(description = "운영시간", example = "월-금 09:00-21:00") + private String operatingHours; + @Schema(description = "매장 이미지") + private String imageUrl; +} diff --git a/store/src/main/java/com/ktds/hi/store/infra/gateway/repository/StoreJpaRepository.java b/store/src/main/java/com/ktds/hi/store/infra/gateway/repository/StoreJpaRepository.java index 8f14021..387cfe9 100644 --- a/store/src/main/java/com/ktds/hi/store/infra/gateway/repository/StoreJpaRepository.java +++ b/store/src/main/java/com/ktds/hi/store/infra/gateway/repository/StoreJpaRepository.java @@ -24,6 +24,7 @@ public interface StoreJpaRepository extends JpaRepository { @Query("SELECT s FROM StoreEntity s WHERE s.status = 'ACTIVE' ORDER BY s.rating DESC") Page findAllByOrderByRatingDesc(Pageable pageable); + /** * 점주 ID로 매장 목록 조회 */