From a1b0d63b83568c33f77bfa5823407bc190854ba8 Mon Sep 17 00:00:00 2001 From: koo995 <107671886+koo995@users.noreply.github.com> Date: Thu, 12 Dec 2024 21:10:26 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=EB=AA=A8=EB=93=A0=20Store=EC=9D=84?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/controller/StoreController.java | 22 ++++++++++++++++ .../flab/nutridiary/store/dto/StoreName.java | 20 +++++++++++++++ .../store/dto/response/AllStore.java | 19 ++++++++++++++ .../store/repository/JdbcStoreRepository.java | 10 ++++++++ .../store/repository/StoreRepository.java | 9 +++++++ .../store/repository/StoreRepositoryImpl.java | 21 ++++++++++++++++ .../store/service/StoreReadService.java | 25 +++++++++++++++++++ 7 files changed, 126 insertions(+) create mode 100644 src/main/java/flab/nutridiary/store/controller/StoreController.java create mode 100644 src/main/java/flab/nutridiary/store/dto/StoreName.java create mode 100644 src/main/java/flab/nutridiary/store/dto/response/AllStore.java create mode 100644 src/main/java/flab/nutridiary/store/repository/JdbcStoreRepository.java create mode 100644 src/main/java/flab/nutridiary/store/repository/StoreRepository.java create mode 100644 src/main/java/flab/nutridiary/store/repository/StoreRepositoryImpl.java create mode 100644 src/main/java/flab/nutridiary/store/service/StoreReadService.java diff --git a/src/main/java/flab/nutridiary/store/controller/StoreController.java b/src/main/java/flab/nutridiary/store/controller/StoreController.java new file mode 100644 index 0000000..def53f8 --- /dev/null +++ b/src/main/java/flab/nutridiary/store/controller/StoreController.java @@ -0,0 +1,22 @@ +package flab.nutridiary.store.controller; + +import flab.nutridiary.commom.dto.ApiResponse; +import flab.nutridiary.store.dto.response.AllStore; +import flab.nutridiary.store.service.StoreReadService; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@Getter +@RequiredArgsConstructor +@RestController +public class StoreController { + + private final StoreReadService storeReadService; + + @GetMapping("/store") + public ApiResponse getAllStore() { + return ApiResponse.success(storeReadService.getAllStore()); + } +} diff --git a/src/main/java/flab/nutridiary/store/dto/StoreName.java b/src/main/java/flab/nutridiary/store/dto/StoreName.java new file mode 100644 index 0000000..78db221 --- /dev/null +++ b/src/main/java/flab/nutridiary/store/dto/StoreName.java @@ -0,0 +1,20 @@ +package flab.nutridiary.store.dto; + +import lombok.Getter; +import lombok.ToString; + +@ToString +@Getter +public class StoreName { + private final Long id; + private final String name; + + private StoreName(Long id, String name) { + this.id = id; + this.name = name; + } + + public static StoreName of(Long id, String name) { + return new StoreName(id, name); + } +} diff --git a/src/main/java/flab/nutridiary/store/dto/response/AllStore.java b/src/main/java/flab/nutridiary/store/dto/response/AllStore.java new file mode 100644 index 0000000..894adb1 --- /dev/null +++ b/src/main/java/flab/nutridiary/store/dto/response/AllStore.java @@ -0,0 +1,19 @@ +package flab.nutridiary.store.dto.response; + +import flab.nutridiary.store.dto.StoreName; +import lombok.Getter; + +import java.util.List; + +@Getter +public class AllStore { + private final List storeNames; + + private AllStore(List storeNames) { + this.storeNames = storeNames; + } + + public static AllStore of(List storeNames) { + return new AllStore(storeNames); + } +} diff --git a/src/main/java/flab/nutridiary/store/repository/JdbcStoreRepository.java b/src/main/java/flab/nutridiary/store/repository/JdbcStoreRepository.java new file mode 100644 index 0000000..8c42909 --- /dev/null +++ b/src/main/java/flab/nutridiary/store/repository/JdbcStoreRepository.java @@ -0,0 +1,10 @@ +package flab.nutridiary.store.repository; + +import flab.nutridiary.store.domain.Store; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; + +public interface JdbcStoreRepository extends CrudRepository { + List findAll(); +} diff --git a/src/main/java/flab/nutridiary/store/repository/StoreRepository.java b/src/main/java/flab/nutridiary/store/repository/StoreRepository.java new file mode 100644 index 0000000..ddc69b3 --- /dev/null +++ b/src/main/java/flab/nutridiary/store/repository/StoreRepository.java @@ -0,0 +1,9 @@ +package flab.nutridiary.store.repository; + +import flab.nutridiary.store.domain.Store; + +import java.util.List; + +public interface StoreRepository { + List findAll(); +} diff --git a/src/main/java/flab/nutridiary/store/repository/StoreRepositoryImpl.java b/src/main/java/flab/nutridiary/store/repository/StoreRepositoryImpl.java new file mode 100644 index 0000000..259e412 --- /dev/null +++ b/src/main/java/flab/nutridiary/store/repository/StoreRepositoryImpl.java @@ -0,0 +1,21 @@ +package flab.nutridiary.store.repository; + +import flab.nutridiary.store.domain.Store; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Transactional +@Repository +@RequiredArgsConstructor +public class StoreRepositoryImpl implements StoreRepository { + + private final JdbcStoreRepository jdbcStoreRepository; + + @Override + public List findAll() { + return jdbcStoreRepository.findAll(); + } +} diff --git a/src/main/java/flab/nutridiary/store/service/StoreReadService.java b/src/main/java/flab/nutridiary/store/service/StoreReadService.java new file mode 100644 index 0000000..b72c0b6 --- /dev/null +++ b/src/main/java/flab/nutridiary/store/service/StoreReadService.java @@ -0,0 +1,25 @@ +package flab.nutridiary.store.service; + +import flab.nutridiary.store.dto.StoreName; +import flab.nutridiary.store.dto.response.AllStore; +import flab.nutridiary.store.repository.StoreRepository; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Getter +@RequiredArgsConstructor +@Transactional +@Service +public class StoreReadService { + private final StoreRepository storeRepository; + + public AllStore getAllStore() { + return AllStore.of(storeRepository.findAll() + .stream() + .map(store -> StoreName.of(store.getId(), store.getStoreName())) + .toList()); + } + +} From 182e9de2b8957df7a971abe82a1ec7d166219251 Mon Sep 17 00:00:00 2001 From: koo995 <107671886+koo995@users.noreply.github.com> Date: Thu, 12 Dec 2024 21:31:53 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix:=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nutridiary/productStore/ProductStoreRepository.java | 6 ------ .../nutridiary/productStore/{ => domain}/ProductStore.java | 2 +- .../repository/JdbcProductStoreRepository.java | 7 +++++++ .../nutridiary/review/service/ReviewResisterService.java | 6 +++--- 4 files changed, 11 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/flab/nutridiary/productStore/ProductStoreRepository.java rename src/main/java/flab/nutridiary/productStore/{ => domain}/ProductStore.java (95%) create mode 100644 src/main/java/flab/nutridiary/productStore/repository/JdbcProductStoreRepository.java diff --git a/src/main/java/flab/nutridiary/productStore/ProductStoreRepository.java b/src/main/java/flab/nutridiary/productStore/ProductStoreRepository.java deleted file mode 100644 index 47b4ec3..0000000 --- a/src/main/java/flab/nutridiary/productStore/ProductStoreRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package flab.nutridiary.productStore; - -import org.springframework.data.repository.CrudRepository; - -public interface ProductStoreRepository extends CrudRepository { -} diff --git a/src/main/java/flab/nutridiary/productStore/ProductStore.java b/src/main/java/flab/nutridiary/productStore/domain/ProductStore.java similarity index 95% rename from src/main/java/flab/nutridiary/productStore/ProductStore.java rename to src/main/java/flab/nutridiary/productStore/domain/ProductStore.java index 617a45e..171afda 100644 --- a/src/main/java/flab/nutridiary/productStore/ProductStore.java +++ b/src/main/java/flab/nutridiary/productStore/domain/ProductStore.java @@ -1,4 +1,4 @@ -package flab.nutridiary.productStore; +package flab.nutridiary.productStore.domain; import flab.nutridiary.product.domain.Product; import flab.nutridiary.store.domain.Store; diff --git a/src/main/java/flab/nutridiary/productStore/repository/JdbcProductStoreRepository.java b/src/main/java/flab/nutridiary/productStore/repository/JdbcProductStoreRepository.java new file mode 100644 index 0000000..23fe109 --- /dev/null +++ b/src/main/java/flab/nutridiary/productStore/repository/JdbcProductStoreRepository.java @@ -0,0 +1,7 @@ +package flab.nutridiary.productStore.repository; + +import flab.nutridiary.productStore.domain.ProductStore; +import org.springframework.data.repository.CrudRepository; + +public interface JdbcProductStoreRepository extends CrudRepository { +} diff --git a/src/main/java/flab/nutridiary/review/service/ReviewResisterService.java b/src/main/java/flab/nutridiary/review/service/ReviewResisterService.java index 458e6bb..0c434b2 100644 --- a/src/main/java/flab/nutridiary/review/service/ReviewResisterService.java +++ b/src/main/java/flab/nutridiary/review/service/ReviewResisterService.java @@ -4,8 +4,8 @@ import flab.nutridiary.file.FileStore; import flab.nutridiary.productDietTag.ProductDietTag; import flab.nutridiary.productDietTag.ProductDietTagRepository; -import flab.nutridiary.productStore.ProductStore; -import flab.nutridiary.productStore.ProductStoreRepository; +import flab.nutridiary.productStore.domain.ProductStore; +import flab.nutridiary.productStore.repository.JdbcProductStoreRepository; import flab.nutridiary.review.domain.Review; import flab.nutridiary.review.dto.request.CreateReviewRequest; import flab.nutridiary.review.dto.response.CreateReviewResponse; @@ -27,7 +27,7 @@ @RequiredArgsConstructor @Service public class ReviewResisterService { - private final ProductStoreRepository productStoreRepository; + private final JdbcProductStoreRepository productStoreRepository; private final ProductDietTagRepository productDietTagRepository; private final ReviewRepository reviewRepository; private final FileStore fileStore; From b0a074919c1f56842a07959991dd06501a5bfbc4 Mon Sep 17 00:00:00 2001 From: koo995 <107671886+koo995@users.noreply.github.com> Date: Fri, 13 Dec 2024 01:25:32 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20productIds=EB=A1=9C=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/repository/ProductCrudRepository.java | 6 ++++++ .../nutridiary/product/repository/ProductRepository.java | 2 ++ .../product/repository/ProductRepositoryImpl.java | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/src/main/java/flab/nutridiary/product/repository/ProductCrudRepository.java b/src/main/java/flab/nutridiary/product/repository/ProductCrudRepository.java index 8d4547a..d793bad 100644 --- a/src/main/java/flab/nutridiary/product/repository/ProductCrudRepository.java +++ b/src/main/java/flab/nutridiary/product/repository/ProductCrudRepository.java @@ -1,8 +1,14 @@ package flab.nutridiary.product.repository; import flab.nutridiary.product.domain.Product; +import org.springframework.data.jdbc.repository.query.Query; import org.springframework.data.repository.CrudRepository; +import java.util.List; + public interface ProductCrudRepository extends CrudRepository { int countByProductNormalizedName(String normalizedName); + + @Query("SELECT * FROM product WHERE product_id IN (:productIds)") + List findByIds(List productIds); } diff --git a/src/main/java/flab/nutridiary/product/repository/ProductRepository.java b/src/main/java/flab/nutridiary/product/repository/ProductRepository.java index 1ee08ab..50fd79a 100644 --- a/src/main/java/flab/nutridiary/product/repository/ProductRepository.java +++ b/src/main/java/flab/nutridiary/product/repository/ProductRepository.java @@ -2,9 +2,11 @@ import flab.nutridiary.product.domain.Product; +import java.util.List; import java.util.Optional; public interface ProductRepository { Product save(Product product); Optional findById(Long id); + List findByIds(List ids); } diff --git a/src/main/java/flab/nutridiary/product/repository/ProductRepositoryImpl.java b/src/main/java/flab/nutridiary/product/repository/ProductRepositoryImpl.java index ac75ea7..09a60a4 100644 --- a/src/main/java/flab/nutridiary/product/repository/ProductRepositoryImpl.java +++ b/src/main/java/flab/nutridiary/product/repository/ProductRepositoryImpl.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import java.util.List; import java.util.Optional; @RequiredArgsConstructor @@ -25,6 +26,11 @@ public Optional findById(Long id) { return productCrudRepository.findById(id); } + @Override + public List findByIds(List ids) { + return productCrudRepository.findByIds(ids); + } + @Override public Boolean isExistDuplicatedProductByNormalizedName(String normalizedName) { return productCrudRepository.countByProductNormalizedName(normalizedName) > 0; From 41fcbb23c18cd50e13e10b7f72534def3f6cea1e Mon Sep 17 00:00:00 2001 From: koo995 <107671886+koo995@users.noreply.github.com> Date: Fri, 13 Dec 2024 01:27:47 +0900 Subject: [PATCH 4/6] =?UTF-8?q?rename:=20=EB=A0=88=ED=8F=AC=EC=A7=80?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/{ProductStore.java => StoreProduct.java} | 12 ++++++++++-- .../repository/JdbcProductStoreRepository.java | 7 ------- .../review/service/ReviewResisterService.java | 8 ++++---- ...StoreRepository.java => StoreCrudRepository.java} | 2 +- .../store/repository/StoreRepositoryImpl.java | 4 ++-- 5 files changed, 17 insertions(+), 16 deletions(-) rename src/main/java/flab/nutridiary/productStore/domain/{ProductStore.java => StoreProduct.java} (80%) delete mode 100644 src/main/java/flab/nutridiary/productStore/repository/JdbcProductStoreRepository.java rename src/main/java/flab/nutridiary/store/repository/{JdbcStoreRepository.java => StoreCrudRepository.java} (76%) diff --git a/src/main/java/flab/nutridiary/productStore/domain/ProductStore.java b/src/main/java/flab/nutridiary/productStore/domain/StoreProduct.java similarity index 80% rename from src/main/java/flab/nutridiary/productStore/domain/ProductStore.java rename to src/main/java/flab/nutridiary/productStore/domain/StoreProduct.java index 171afda..7a97022 100644 --- a/src/main/java/flab/nutridiary/productStore/domain/ProductStore.java +++ b/src/main/java/flab/nutridiary/productStore/domain/StoreProduct.java @@ -14,7 +14,7 @@ @ToString @Getter @NoArgsConstructor -public class ProductStore { +public class StoreProduct { @Id @Column("product_store_id") private Long id; @@ -29,8 +29,16 @@ public class ProductStore { private LocalDateTime updatedAt; @Builder - public ProductStore(Long storeId, Long productId) { + public StoreProduct(Long storeId, Long productId) { this.storeId = AggregateReference.to(storeId); this.productId = AggregateReference.to(productId); } + + public Long getStoreId() { + return storeId.getId(); + } + + public Long getProductId() { + return productId.getId(); + } } diff --git a/src/main/java/flab/nutridiary/productStore/repository/JdbcProductStoreRepository.java b/src/main/java/flab/nutridiary/productStore/repository/JdbcProductStoreRepository.java deleted file mode 100644 index 23fe109..0000000 --- a/src/main/java/flab/nutridiary/productStore/repository/JdbcProductStoreRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package flab.nutridiary.productStore.repository; - -import flab.nutridiary.productStore.domain.ProductStore; -import org.springframework.data.repository.CrudRepository; - -public interface JdbcProductStoreRepository extends CrudRepository { -} diff --git a/src/main/java/flab/nutridiary/review/service/ReviewResisterService.java b/src/main/java/flab/nutridiary/review/service/ReviewResisterService.java index 0c434b2..37870f7 100644 --- a/src/main/java/flab/nutridiary/review/service/ReviewResisterService.java +++ b/src/main/java/flab/nutridiary/review/service/ReviewResisterService.java @@ -4,8 +4,8 @@ import flab.nutridiary.file.FileStore; import flab.nutridiary.productDietTag.ProductDietTag; import flab.nutridiary.productDietTag.ProductDietTagRepository; -import flab.nutridiary.productStore.domain.ProductStore; -import flab.nutridiary.productStore.repository.JdbcProductStoreRepository; +import flab.nutridiary.productStore.domain.StoreProduct; +import flab.nutridiary.productStore.repository.StoreProductCrudRepository; import flab.nutridiary.review.domain.Review; import flab.nutridiary.review.dto.request.CreateReviewRequest; import flab.nutridiary.review.dto.response.CreateReviewResponse; @@ -27,7 +27,7 @@ @RequiredArgsConstructor @Service public class ReviewResisterService { - private final JdbcProductStoreRepository productStoreRepository; + private final StoreProductCrudRepository productStoreRepository; private final ProductDietTagRepository productDietTagRepository; private final ReviewRepository reviewRepository; private final FileStore fileStore; @@ -46,7 +46,7 @@ public CreateReviewResponse create(Long memberId, CreateReviewRequest createRevi } private void saveProductStore(CreateReviewRequest request) { - productStoreRepository.save(ProductStore.builder() + productStoreRepository.save(StoreProduct.builder() .productId(request.getProductId()) .storeId(request.getStoreId()) .build()); diff --git a/src/main/java/flab/nutridiary/store/repository/JdbcStoreRepository.java b/src/main/java/flab/nutridiary/store/repository/StoreCrudRepository.java similarity index 76% rename from src/main/java/flab/nutridiary/store/repository/JdbcStoreRepository.java rename to src/main/java/flab/nutridiary/store/repository/StoreCrudRepository.java index 8c42909..8e3f714 100644 --- a/src/main/java/flab/nutridiary/store/repository/JdbcStoreRepository.java +++ b/src/main/java/flab/nutridiary/store/repository/StoreCrudRepository.java @@ -5,6 +5,6 @@ import java.util.List; -public interface JdbcStoreRepository extends CrudRepository { +public interface StoreCrudRepository extends CrudRepository { List findAll(); } diff --git a/src/main/java/flab/nutridiary/store/repository/StoreRepositoryImpl.java b/src/main/java/flab/nutridiary/store/repository/StoreRepositoryImpl.java index 259e412..06aaaf9 100644 --- a/src/main/java/flab/nutridiary/store/repository/StoreRepositoryImpl.java +++ b/src/main/java/flab/nutridiary/store/repository/StoreRepositoryImpl.java @@ -12,10 +12,10 @@ @RequiredArgsConstructor public class StoreRepositoryImpl implements StoreRepository { - private final JdbcStoreRepository jdbcStoreRepository; + private final StoreCrudRepository storeCrudRepository; @Override public List findAll() { - return jdbcStoreRepository.findAll(); + return storeCrudRepository.findAll(); } } From fe9eb420c8e56291fef1bf18a5bd7a2c8cc99f60 Mon Sep 17 00:00:00 2001 From: koo995 <107671886+koo995@users.noreply.github.com> Date: Fri, 13 Dec 2024 01:48:23 +0900 Subject: [PATCH 5/6] =?UTF-8?q?rename:=20ProductStore=EC=97=90=EC=84=9C=20?= =?UTF-8?q?StoreProduct=EB=A1=9C=20=EC=8A=A4=ED=82=A4=EB=A7=88=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/db/schema.sql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/db/schema.sql b/src/main/resources/db/schema.sql index a145e61..303750c 100644 --- a/src/main/resources/db/schema.sql +++ b/src/main/resources/db/schema.sql @@ -5,7 +5,7 @@ DROP TABLE IF EXISTS review; DROP TABLE IF EXISTS diet_tag; DROP TABLE IF EXISTS product_diet_tag; DROP TABLE IF EXISTS store; -DROP TABLE IF EXISTS product_store; +DROP TABLE IF EXISTS store_product; CREATE TABLE product ( product_id BIGINT PRIMARY KEY AUTO_INCREMENT, @@ -78,13 +78,13 @@ CREATE TABLE store ( updated_at DATETIME NOT NULL ); -CREATE TABLE product_store ( - product_store_id BIGINT PRIMARY KEY AUTO_INCREMENT, +CREATE TABLE store_product ( + store_product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_id BIGINT, store_id BIGINT, status VARCHAR(255), created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL ); -CREATE INDEX idx_product_id ON product_store (product_id); -CREATE INDEX idx_store_id ON product_store (store_id); +CREATE INDEX idx_product_id ON store_product (product_id); +CREATE INDEX idx_store_id ON store_product (store_id); From 92184d85e864d6a390a1e49fcf19a7ed6d67764d Mon Sep 17 00:00:00 2001 From: koo995 <107671886+koo995@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:25:31 +0900 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20store=EC=97=90=20=ED=95=B4=EB=8B=B9?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=8B=9D=ED=92=88=EB=93=A4=EC=9D=84=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commom/exception/StatusConst.java | 3 +- .../productStore/domain/StoreProduct.java | 2 +- .../dto/StoreProductResponse.java | 39 +++++++++++++++++++ .../StoreProductCrudRepository.java | 10 +++++ .../repository/StoreProductRepository.java | 9 +++++ .../StoreProductRepositoryImpl.java | 22 +++++++++++ .../store/controller/StoreController.java | 7 ++++ .../store/service/StoreReadService.java | 22 +++++++++++ 8 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 src/main/java/flab/nutridiary/productStore/dto/StoreProductResponse.java create mode 100644 src/main/java/flab/nutridiary/productStore/repository/StoreProductCrudRepository.java create mode 100644 src/main/java/flab/nutridiary/productStore/repository/StoreProductRepository.java create mode 100644 src/main/java/flab/nutridiary/productStore/repository/StoreProductRepositoryImpl.java diff --git a/src/main/java/flab/nutridiary/commom/exception/StatusConst.java b/src/main/java/flab/nutridiary/commom/exception/StatusConst.java index 78e9314..c3f3463 100644 --- a/src/main/java/flab/nutridiary/commom/exception/StatusConst.java +++ b/src/main/java/flab/nutridiary/commom/exception/StatusConst.java @@ -15,7 +15,8 @@ public enum StatusConst { DUPLICATED_DIARY(4005, "이미 등록된 다이어리입니다."), VALIDATION_CHECK_FAIL(6001, "유효성 검사에 실패했습니다."), NOT_ALLOWED_SERVING_UNIT(6002, "허용되지 않은 서빙 단위입니다."), - DUPLICATED_PRODUCT_REVIEW(4006, "이미 등록된 리뷰입니다."); + DUPLICATED_PRODUCT_REVIEW(4006, "이미 등록된 리뷰입니다."), + STORE_PRODUCT_NOT_FOUND(4007, "해당 매장에 등록된 상품이 없습니다."),; private final int statusCode; private final String message; diff --git a/src/main/java/flab/nutridiary/productStore/domain/StoreProduct.java b/src/main/java/flab/nutridiary/productStore/domain/StoreProduct.java index 7a97022..99eed0f 100644 --- a/src/main/java/flab/nutridiary/productStore/domain/StoreProduct.java +++ b/src/main/java/flab/nutridiary/productStore/domain/StoreProduct.java @@ -15,7 +15,7 @@ @Getter @NoArgsConstructor public class StoreProduct { - @Id @Column("product_store_id") + @Id @Column("store_product_id") private Long id; private AggregateReference storeId; diff --git a/src/main/java/flab/nutridiary/productStore/dto/StoreProductResponse.java b/src/main/java/flab/nutridiary/productStore/dto/StoreProductResponse.java new file mode 100644 index 0000000..7242930 --- /dev/null +++ b/src/main/java/flab/nutridiary/productStore/dto/StoreProductResponse.java @@ -0,0 +1,39 @@ +package flab.nutridiary.productStore.dto; + +import flab.nutridiary.product.domain.Product; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@Getter +@RequiredArgsConstructor +public class StoreProductResponse { + private final Long storeId; + private final List products; + + public static StoreProductResponse of(Long storeId, List products) { + List productInfos = products.stream() + .map(product -> ProductInfo.of(product.getId(), product.getProductName(), product.getProductCorp())) + .toList(); + + return new StoreProductResponse(storeId, productInfos); + } + + @Getter + public static class ProductInfo { + private final Long productId; + private final String productName; + private final String productCorp; + + private ProductInfo(Long productId, String productName, String productCorp) { + this.productId = productId; + this.productName = productName; + this.productCorp = productCorp; + } + + public static ProductInfo of(Long productId, String productName, String productCorp) { + return new ProductInfo(productId, productName, productCorp); + } + } +} diff --git a/src/main/java/flab/nutridiary/productStore/repository/StoreProductCrudRepository.java b/src/main/java/flab/nutridiary/productStore/repository/StoreProductCrudRepository.java new file mode 100644 index 0000000..c67529c --- /dev/null +++ b/src/main/java/flab/nutridiary/productStore/repository/StoreProductCrudRepository.java @@ -0,0 +1,10 @@ +package flab.nutridiary.productStore.repository; + +import flab.nutridiary.productStore.domain.StoreProduct; +import org.springframework.data.repository.CrudRepository; + +import java.util.List; + +public interface StoreProductCrudRepository extends CrudRepository { + List findByStoreId(Long storeId); +} diff --git a/src/main/java/flab/nutridiary/productStore/repository/StoreProductRepository.java b/src/main/java/flab/nutridiary/productStore/repository/StoreProductRepository.java new file mode 100644 index 0000000..9f2f91d --- /dev/null +++ b/src/main/java/flab/nutridiary/productStore/repository/StoreProductRepository.java @@ -0,0 +1,9 @@ +package flab.nutridiary.productStore.repository; + +import flab.nutridiary.productStore.domain.StoreProduct; + +import java.util.List; + +public interface StoreProductRepository { + List findByStoreId(Long storeId); +} diff --git a/src/main/java/flab/nutridiary/productStore/repository/StoreProductRepositoryImpl.java b/src/main/java/flab/nutridiary/productStore/repository/StoreProductRepositoryImpl.java new file mode 100644 index 0000000..5219e84 --- /dev/null +++ b/src/main/java/flab/nutridiary/productStore/repository/StoreProductRepositoryImpl.java @@ -0,0 +1,22 @@ +package flab.nutridiary.productStore.repository; + +import flab.nutridiary.productStore.domain.StoreProduct; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Getter +@RequiredArgsConstructor +@Transactional +@Repository +public class StoreProductRepositoryImpl implements StoreProductRepository { + private final StoreProductCrudRepository storeProductCrudRepository; + + @Override + public List findByStoreId(Long storeId) { + return storeProductCrudRepository.findByStoreId(storeId); + } +} diff --git a/src/main/java/flab/nutridiary/store/controller/StoreController.java b/src/main/java/flab/nutridiary/store/controller/StoreController.java index def53f8..4e72a8f 100644 --- a/src/main/java/flab/nutridiary/store/controller/StoreController.java +++ b/src/main/java/flab/nutridiary/store/controller/StoreController.java @@ -1,11 +1,13 @@ package flab.nutridiary.store.controller; import flab.nutridiary.commom.dto.ApiResponse; +import flab.nutridiary.productStore.dto.StoreProductResponse; import flab.nutridiary.store.dto.response.AllStore; import flab.nutridiary.store.service.StoreReadService; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @Getter @@ -19,4 +21,9 @@ public class StoreController { public ApiResponse getAllStore() { return ApiResponse.success(storeReadService.getAllStore()); } + + @GetMapping("/store/{store_id}") + public ApiResponse getStoreProduct(@PathVariable(name = "store_id") Long storeId) { + return ApiResponse.success(storeReadService.getStoreProduct(storeId)); + } } diff --git a/src/main/java/flab/nutridiary/store/service/StoreReadService.java b/src/main/java/flab/nutridiary/store/service/StoreReadService.java index b72c0b6..f0d0b2d 100644 --- a/src/main/java/flab/nutridiary/store/service/StoreReadService.java +++ b/src/main/java/flab/nutridiary/store/service/StoreReadService.java @@ -1,5 +1,10 @@ package flab.nutridiary.store.service; +import flab.nutridiary.commom.exception.BusinessException; +import flab.nutridiary.product.domain.Product; +import flab.nutridiary.product.repository.ProductRepository; +import flab.nutridiary.productStore.dto.StoreProductResponse; +import flab.nutridiary.productStore.repository.StoreProductRepository; import flab.nutridiary.store.dto.StoreName; import flab.nutridiary.store.dto.response.AllStore; import flab.nutridiary.store.repository.StoreRepository; @@ -8,12 +13,18 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + +import static flab.nutridiary.commom.exception.StatusConst.STORE_PRODUCT_NOT_FOUND; + @Getter @RequiredArgsConstructor @Transactional @Service public class StoreReadService { private final StoreRepository storeRepository; + private final StoreProductRepository storeProductRepository; + private final ProductRepository productRepository; public AllStore getAllStore() { return AllStore.of(storeRepository.findAll() @@ -22,4 +33,15 @@ public AllStore getAllStore() { .toList()); } + public StoreProductResponse getStoreProduct(Long storeId) { + List productIds = storeProductRepository.findByStoreId(storeId) + .stream() + .map(storeProduct -> storeProduct.getProductId()) + .toList(); + if (productIds.isEmpty()) { + throw new BusinessException(STORE_PRODUCT_NOT_FOUND); + } + List products = productRepository.findByIds(productIds); + return StoreProductResponse.of(storeId, products); + } }