From 8ecf6ed3038f586835ab8c29b32b51aac2519ae8 Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 04:03:23 +0900 Subject: [PATCH 01/10] =?UTF-8?q?feat:=20=EC=B5=9C=EA=B7=BC=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=9C=20=EB=AA=A8=EB=8D=B8=EC=9D=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=98=EB=8A=94=20API=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ModelController.java | 6 ++- .../soullive_a/service/ModelService.java | 6 ++- .../service/impl/ModelServiceImpl.java | 42 ++++++++++++++++++- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/backend/soullive_a/controller/ModelController.java b/src/main/java/com/backend/soullive_a/controller/ModelController.java index 1be8a7d..b1b3348 100644 --- a/src/main/java/com/backend/soullive_a/controller/ModelController.java +++ b/src/main/java/com/backend/soullive_a/controller/ModelController.java @@ -2,9 +2,11 @@ import com.backend.soullive_a.dto.request.ModelRequest; import com.backend.soullive_a.dto.response.ModelResponse; +import com.backend.soullive_a.dto.response.RecentModelResponse; import com.backend.soullive_a.exception.base.BaseResponse; import com.backend.soullive_a.service.ModelService; import jakarta.validation.Valid; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -20,12 +22,12 @@ public class ModelController { * @return */ @GetMapping("") - public BaseResponse getModel(@RequestParam String modelName) { + public BaseResponse getModel(@RequestParam String modelName, @RequestParam Long productId) { return BaseResponse.builder() .isSuccess(true) .code(200) .message("모델 조회에 성공했습니다.") - .data(modelService.getModel(modelName)) + .data(modelService.getModel(modelName,productId)) .build(); } diff --git a/src/main/java/com/backend/soullive_a/service/ModelService.java b/src/main/java/com/backend/soullive_a/service/ModelService.java index 05d1757..08eff48 100644 --- a/src/main/java/com/backend/soullive_a/service/ModelService.java +++ b/src/main/java/com/backend/soullive_a/service/ModelService.java @@ -2,9 +2,13 @@ import com.backend.soullive_a.dto.request.ModelRequest; import com.backend.soullive_a.dto.response.ModelResponse; +import com.backend.soullive_a.dto.response.RecentModelResponse; +import java.util.List; public interface ModelService { - public ModelResponse getModel(String modelName ); + public ModelResponse getModel(String modelName, Long productId); public ModelResponse createModel(ModelRequest request); + + public List getRecentModel(Long productId); } diff --git a/src/main/java/com/backend/soullive_a/service/impl/ModelServiceImpl.java b/src/main/java/com/backend/soullive_a/service/impl/ModelServiceImpl.java index 58ec9fa..381630b 100644 --- a/src/main/java/com/backend/soullive_a/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/backend/soullive_a/service/impl/ModelServiceImpl.java @@ -2,10 +2,17 @@ import com.backend.soullive_a.dto.request.ModelRequest; import com.backend.soullive_a.dto.response.ModelResponse; +import com.backend.soullive_a.dto.response.RecentModelResponse; +import com.backend.soullive_a.entity.Product; import com.backend.soullive_a.entity.model.Model; +import com.backend.soullive_a.entity.model.ProductModel; import com.backend.soullive_a.exception.custom.NotFoundUserException; import com.backend.soullive_a.repository.ModelRepository; +import com.backend.soullive_a.repository.ProductModelRepository; +import com.backend.soullive_a.repository.ProductRepository; import com.backend.soullive_a.service.ModelService; +import java.time.LocalDateTime; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -15,13 +22,19 @@ public class ModelServiceImpl implements ModelService { private final ModelRepository modelRepository; + private final ProductRepository productRepository; + private final ProductModelRepository productModelRepository; @Override - public ModelResponse getModel(String modelName) { + @Transactional + public ModelResponse getModel(String modelName,Long productId) { System.out.println(modelName); Model model = modelRepository.findByModelName(modelName) .orElseThrow(() -> new NotFoundUserException()); + //최근 조회 모델 데이터 업데이트 + updateRecentViewModel(model,productId); + return ModelResponse.builder() .modelId(model.getId()) @@ -70,4 +83,31 @@ public ModelResponse createModel(ModelRequest request) { .build(); } + /** + * 최근 조회한 모델들 조회 + */ + @Override + @Transactional + public List getRecentModel(Long productId) { + return productModelRepository.getRecentModels(productId); + } + + /** + * 광고 상품 엔티티 생성 + * @param model + * @param productId + */ + private void updateRecentViewModel(Model model, Long productId){ + + Product product = productRepository.findById(productId) + .orElseThrow(NotFoundUserException::new); + + productModelRepository.save( + ProductModel.builder() + .model(model) + .product(product) + .searchTime(LocalDateTime.now()) + .build() + ); + } } From 19818ed5d7b2bee5db9d442e55b52136364ac92a Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 04:03:50 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat:=20=EC=B5=9C=EA=B7=BC=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=9C=20=EB=AA=A8=EB=8D=B8=EC=9D=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=ED=95=98=EB=8A=94=20API=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../soullive_a/dto/response/RecentModelResponse.java | 10 ++++++++++ .../soullive_a/repository/ProductModelRepository.java | 11 +++++++++++ 2 files changed, 21 insertions(+) create mode 100644 src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java diff --git a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java new file mode 100644 index 0000000..7bfc026 --- /dev/null +++ b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java @@ -0,0 +1,10 @@ +package com.backend.soullive_a.dto.response; + +public record RecentModelResponse( + Long modelId, + String imageUrl, + String modelName, + Float aiRate +) { + +} diff --git a/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java b/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java index 6f695e5..7c1cff1 100644 --- a/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java @@ -1,8 +1,19 @@ package com.backend.soullive_a.repository; +import com.backend.soullive_a.dto.response.RecentModelResponse; import com.backend.soullive_a.entity.model.ProductModel; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface ProductModelRepository extends JpaRepository { + @Query("Select " + + "new com.backend.soullive_a.dto.response.RecentModelResponse(m.id,m.imageUrl,m.modelName,m.aiRate) " + + "From ProductModel p " + + "Left Join Model m On p.model.id = m.id " + + "Where p.product.id = :productId " + + "ORDER BY p.searchTime DESC") + List getRecentModels(@Param("productId") Long productId); } From 6f69ab7cb5dac2b5b7e325a18cd02712b3e47f35 Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 04:04:22 +0900 Subject: [PATCH 03/10] =?UTF-8?q?docs:=20swagger=20=EB=AA=85=EC=84=B8?= =?UTF-8?q?=EC=84=9C=20=EC=84=A4=EB=AA=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ModelController.java | 19 +++++++++++++++++-- .../ModelIntroductionController.java | 9 +++++---- .../controller/ModelPopularityController.java | 5 ++++- .../controller/ProductController.java | 11 +++++++---- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/backend/soullive_a/controller/ModelController.java b/src/main/java/com/backend/soullive_a/controller/ModelController.java index b1b3348..9a6e504 100644 --- a/src/main/java/com/backend/soullive_a/controller/ModelController.java +++ b/src/main/java/com/backend/soullive_a/controller/ModelController.java @@ -5,11 +5,14 @@ import com.backend.soullive_a.dto.response.RecentModelResponse; import com.backend.soullive_a.exception.base.BaseResponse; import com.backend.soullive_a.service.ModelService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; - +@Tag(name = "모델 API", description = "모델 조회,생성,최근 조회한 모델 API입니다.") @RestController @RequiredArgsConstructor @RequestMapping("/api/model") @@ -21,6 +24,7 @@ public class ModelController { * @param modelName * @return */ + @Operation(summary = "모델 조회 API", description = "모델 기본 정보를 조회하는 API입니다.") @GetMapping("") public BaseResponse getModel(@RequestParam String modelName, @RequestParam Long productId) { return BaseResponse.builder() @@ -31,12 +35,12 @@ public BaseResponse getModel(@RequestParam String modelName, @Req .build(); } - /** * 모델 등록 api * @param request * @return */ + @Operation(summary = "모델 생성 API", description = "모델을 생성하는 API입니다.") @PostMapping("") public BaseResponse createModel(@RequestBody @Valid ModelRequest request) { System.out.println("@"); @@ -48,4 +52,15 @@ public BaseResponse createModel(@RequestBody @Valid ModelRequest .build(); } + @Operation(summary = "최근 조회 모델 API", description = "최근 조회한 모델들을 조회하는 API입니다.") + @GetMapping("/recent/{productId}") + public BaseResponse> getRecentModel(@Parameter(name = "상품 id",description = "상품 기본키(필수)", + required = true) @PathVariable Long productId){ + return BaseResponse.>builder() + .isSuccess(true) + .code(200) + .message("최근 조회한 모델 조회 성공") + .data(modelService.getRecentModel(productId)) + .build(); + } } diff --git a/src/main/java/com/backend/soullive_a/controller/ModelIntroductionController.java b/src/main/java/com/backend/soullive_a/controller/ModelIntroductionController.java index 8e1b4bd..cb7f764 100644 --- a/src/main/java/com/backend/soullive_a/controller/ModelIntroductionController.java +++ b/src/main/java/com/backend/soullive_a/controller/ModelIntroductionController.java @@ -1,15 +1,15 @@ package com.backend.soullive_a.controller; -import com.backend.soullive_a.dto.request.ModelIntroduceRequest; + import com.backend.soullive_a.dto.response.ModelIntroductionResponse; -import com.backend.soullive_a.dto.response.ModelResponse; import com.backend.soullive_a.exception.base.BaseResponse; import com.backend.soullive_a.service.ModelIntroductionService; -import jakarta.validation.Valid; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; - +@Tag(name = "모델 소개 API", description = "모델 소개 API입니다.") @RestController @RequiredArgsConstructor @RequestMapping("/api/model/introduction") @@ -22,6 +22,7 @@ public class ModelIntroductionController { * @param modelName * @return */ + @Operation(summary = "모델 소개 API", description = "모델 소개 정보를 조회하는 API입니다.") @GetMapping("") public BaseResponse getModelIntroduction(@RequestParam String modelName) { return BaseResponse.builder() diff --git a/src/main/java/com/backend/soullive_a/controller/ModelPopularityController.java b/src/main/java/com/backend/soullive_a/controller/ModelPopularityController.java index 7729a04..40ead40 100644 --- a/src/main/java/com/backend/soullive_a/controller/ModelPopularityController.java +++ b/src/main/java/com/backend/soullive_a/controller/ModelPopularityController.java @@ -3,12 +3,14 @@ import com.backend.soullive_a.dto.response.model.popularity.ModelPopularityResponse; import com.backend.soullive_a.exception.base.BaseResponse; import com.backend.soullive_a.service.ModelPopularityService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - +@Tag(name = "모델 화제성 API", description = "모델 화제성 API입니다.") @RestController @RequiredArgsConstructor @RequestMapping("/api/model/popularity") @@ -16,6 +18,7 @@ public class ModelPopularityController { private final ModelPopularityService modelPopularityService; + @Operation(summary = "모델 화제성 API", description = "모델 화제성 정보를 조회하는 API입니다.") @GetMapping("") public BaseResponse getModelPopularity( @RequestParam String name diff --git a/src/main/java/com/backend/soullive_a/controller/ProductController.java b/src/main/java/com/backend/soullive_a/controller/ProductController.java index 98cf5e3..728cedf 100644 --- a/src/main/java/com/backend/soullive_a/controller/ProductController.java +++ b/src/main/java/com/backend/soullive_a/controller/ProductController.java @@ -4,13 +4,15 @@ import com.backend.soullive_a.dto.response.ProductResponse; import com.backend.soullive_a.exception.base.BaseResponse; import com.backend.soullive_a.service.ProductService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; - +@Tag(name = "광고 상품 API", description = "광고 상품 API입니다.") @Slf4j @RestController @RequestMapping("api/product") @@ -19,6 +21,7 @@ public class ProductController { private final ProductService productService; + @Operation(summary = "광고 상품 생성 API", description = "광고 상품을 생성하는 API입니다.") @PostMapping("") public BaseResponse createProduct( @RequestBody @Valid CreateProductRequest createProductRequest @@ -30,7 +33,7 @@ public BaseResponse createProduct( .data(productService.createProduct(createProductRequest)) .build(); } - + @Operation(summary = "모든 광고 상품 조회 API", description = "모든 광고 상품을 조회 API입니다.") @GetMapping() public BaseResponse> getAllProduct() { return BaseResponse.>builder() @@ -40,7 +43,7 @@ public BaseResponse> getAllProduct() { .data(productService.getAllProduct()) .build(); } - + @Operation(summary = "특정 광고 상품 조회 API", description = "특정 광고 상품을 조회 API입니다.") @GetMapping("/{id}") public BaseResponse getProduct(@PathVariable Long id) { return BaseResponse.builder() @@ -50,7 +53,7 @@ public BaseResponse getProduct(@PathVariable Long id) { .data(productService.getProduct(id)) .build(); } - + @Operation(summary = "특정 광고 상품 삭제 API", description = "특정 광고 상품을 삭제 API입니다.") @DeleteMapping("/{id}") public BaseResponse deleteProduct(@PathVariable Long id) { From 5fd0caab29883763a93accaa179fcf21ec3c7d9e Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 04:26:28 +0900 Subject: [PATCH 04/10] =?UTF-8?q?fix:=20ci=20build=EC=8B=9C=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=ED=95=98=EB=8A=94=20SQLIntegrityConstraintViolationEx?= =?UTF-8?q?ception=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../soullive_a/controller/ModelController.java | 18 +----------------- .../soullive_a/service/ModelService.java | 4 ---- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/src/main/java/com/backend/soullive_a/controller/ModelController.java b/src/main/java/com/backend/soullive_a/controller/ModelController.java index 74d7a90..0e5f00f 100644 --- a/src/main/java/com/backend/soullive_a/controller/ModelController.java +++ b/src/main/java/com/backend/soullive_a/controller/ModelController.java @@ -2,6 +2,7 @@ import com.backend.soullive_a.dto.request.ModelRequest; import com.backend.soullive_a.dto.response.ModelResponse; +import com.backend.soullive_a.dto.response.RecentModelResponse; import com.backend.soullive_a.exception.base.BaseResponse; import com.backend.soullive_a.service.ModelService; import io.swagger.v3.oas.annotations.Operation; @@ -35,23 +36,6 @@ public BaseResponse getModel(@RequestParam String modelName, @Req } - /** - * 모델 등록 api - * @param request - * @return - */ - @Operation(summary = "모델 생성 API", description = "모델을 생성하는 API입니다.") - @PostMapping("") - public BaseResponse createModel(@RequestBody @Valid ModelRequest request) { - System.out.println("@"); - return BaseResponse.builder() - .isSuccess(true) - .code(200) - .message("모델 생성에 성공했습니다.") - .data(modelService.createModel(request)) - .build(); - - } @Operation(summary = "최근 조회 모델 API", description = "최근 조회한 모델들을 조회하는 API입니다.") @GetMapping("/recent/{productId}") public BaseResponse> getRecentModel(@Parameter(name = "상품 id",description = "상품 기본키(필수)", diff --git a/src/main/java/com/backend/soullive_a/service/ModelService.java b/src/main/java/com/backend/soullive_a/service/ModelService.java index 97f3915..b1db1f0 100644 --- a/src/main/java/com/backend/soullive_a/service/ModelService.java +++ b/src/main/java/com/backend/soullive_a/service/ModelService.java @@ -1,6 +1,5 @@ package com.backend.soullive_a.service; -import com.backend.soullive_a.dto.request.ModelRequest; import com.backend.soullive_a.dto.response.ModelResponse; import com.backend.soullive_a.dto.response.RecentModelResponse; import java.util.List; @@ -8,8 +7,5 @@ public interface ModelService { public ModelResponse getModel(String modelName, Long productId); - - public ModelResponse createModel(ModelRequest request); - public List getRecentModel(Long productId); } From 20668ab5cbfb77cbebfff5d6f82750acf2fc616d Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 11:54:37 +0900 Subject: [PATCH 05/10] =?UTF-8?q?refactor:=20left=20join=EC=9D=84=20inner?= =?UTF-8?q?=20join=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EC=84=B1=EB=8A=A5=20=ED=96=A5=EC=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/soullive_a/repository/ProductModelRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java b/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java index 7c1cff1..2d3c842 100644 --- a/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java @@ -12,7 +12,7 @@ public interface ProductModelRepository extends JpaRepository getRecentModels(@Param("productId") Long productId); From 9c2e2e1de69e74e7c06a9155a4a7dac4499d095e Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 12:17:09 +0900 Subject: [PATCH 06/10] =?UTF-8?q?docs:=20swagger=20=EB=AC=B8=EC=84=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 --- .../soullive_a/dto/response/RecentModelResponse.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java index 7bfc026..ecd226a 100644 --- a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java +++ b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java @@ -1,9 +1,16 @@ package com.backend.soullive_a.dto.response; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "최근 조회한 모델 model 객체") public record RecentModelResponse( + @Schema(name = "모델 id(기본키)") Long modelId, + @Schema(name = "모델 이미지 url") String imageUrl, + @Schema(name = "모델 이름") String modelName, + @Schema(name = "ai 추천 점수") Float aiRate ) { From 2533b4bb67cb8320b67dc642fd9674f7ea2c1577 Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 12:36:07 +0900 Subject: [PATCH 07/10] =?UTF-8?q?docs:=20swagger=20=EB=AC=B8=EC=84=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 --- .../soullive_a/dto/response/RecentModelResponse.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java index ecd226a..bfae866 100644 --- a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java +++ b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java @@ -4,13 +4,13 @@ @Schema(description = "최근 조회한 모델 model 객체") public record RecentModelResponse( - @Schema(name = "모델 id(기본키)") + @Schema(name = "모델 id(기본키)", example = "1") Long modelId, - @Schema(name = "모델 이미지 url") + @Schema(name = "모델 이미지 url", example = "https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_profile.png") String imageUrl, - @Schema(name = "모델 이름") + @Schema(name = "모델 이름", example = "한지민") String modelName, - @Schema(name = "ai 추천 점수") + @Schema(name = "ai 추천 점수", example = "3.0") Float aiRate ) { From 027f30adb5d16050568fd83efa33553d0479df6a Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 12:37:05 +0900 Subject: [PATCH 08/10] =?UTF-8?q?feat:=20=EB=AA=A8=EB=8D=B8=20=EC=B6=94?= =?UTF-8?q?=EC=B2=9C=20=EB=B0=9B=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../soullive_a/controller/ModelController.java | 14 ++++++++++++-- .../dto/response/ModelRecommendResponse.java | 15 +++++++++++++++ .../soullive_a/repository/ModelRepository.java | 10 +++++++++- .../backend/soullive_a/service/ModelService.java | 3 +++ .../soullive_a/service/impl/ModelServiceImpl.java | 8 +++++++- 5 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/backend/soullive_a/dto/response/ModelRecommendResponse.java diff --git a/src/main/java/com/backend/soullive_a/controller/ModelController.java b/src/main/java/com/backend/soullive_a/controller/ModelController.java index 0e5f00f..ad138eb 100644 --- a/src/main/java/com/backend/soullive_a/controller/ModelController.java +++ b/src/main/java/com/backend/soullive_a/controller/ModelController.java @@ -1,6 +1,6 @@ package com.backend.soullive_a.controller; -import com.backend.soullive_a.dto.request.ModelRequest; +import com.backend.soullive_a.dto.response.ModelRecommendResponse; import com.backend.soullive_a.dto.response.ModelResponse; import com.backend.soullive_a.dto.response.RecentModelResponse; import com.backend.soullive_a.exception.base.BaseResponse; @@ -8,7 +8,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -47,4 +46,15 @@ public BaseResponse> getRecentModel(@Parameter(name = .data(modelService.getRecentModel(productId)) .build(); } + + @Operation(summary = "모델 추천 API", description = "모델을 추천 받는 API이다.") + @GetMapping("/recommendation") + public BaseResponse> getRecommendModel(){ + return BaseResponse.>builder() + .isSuccess(true) + .code(200) + .message("모델 추천 성공") + .data(modelService.getRecommendModel()) + .build(); + } } diff --git a/src/main/java/com/backend/soullive_a/dto/response/ModelRecommendResponse.java b/src/main/java/com/backend/soullive_a/dto/response/ModelRecommendResponse.java new file mode 100644 index 0000000..45d8d9c --- /dev/null +++ b/src/main/java/com/backend/soullive_a/dto/response/ModelRecommendResponse.java @@ -0,0 +1,15 @@ +package com.backend.soullive_a.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(name = "모델 추천 응답 model") +public record ModelRecommendResponse( + @Schema(name = "모델 이미지 url", example = "https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_profile.png") + String imageUrl, + @Schema(name = "모델 이름", example = "김희애") + String name, + @Schema(name = "모델 직업 구분", example = "텔런트/영화배우") + String job +) { + +} diff --git a/src/main/java/com/backend/soullive_a/repository/ModelRepository.java b/src/main/java/com/backend/soullive_a/repository/ModelRepository.java index ba26875..5a4c11b 100644 --- a/src/main/java/com/backend/soullive_a/repository/ModelRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/ModelRepository.java @@ -1,12 +1,20 @@ package com.backend.soullive_a.repository; +import com.backend.soullive_a.dto.response.ModelRecommendResponse; import com.backend.soullive_a.entity.model.Model; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; +import org.springframework.data.jpa.repository.Query; import java.util.Optional; public interface ModelRepository extends JpaRepository { + public Optional findByModelName(String modelName); + + @Query("select " + + "new com.backend.soullive_a.dto.response.ModelRecommendResponse(m.imageUrl,m.modelName,m.job) " + + "From Model m ") + List findAllRecommendModel(); } diff --git a/src/main/java/com/backend/soullive_a/service/ModelService.java b/src/main/java/com/backend/soullive_a/service/ModelService.java index b1db1f0..f3788d1 100644 --- a/src/main/java/com/backend/soullive_a/service/ModelService.java +++ b/src/main/java/com/backend/soullive_a/service/ModelService.java @@ -1,5 +1,6 @@ package com.backend.soullive_a.service; +import com.backend.soullive_a.dto.response.ModelRecommendResponse; import com.backend.soullive_a.dto.response.ModelResponse; import com.backend.soullive_a.dto.response.RecentModelResponse; import java.util.List; @@ -8,4 +9,6 @@ public interface ModelService { public ModelResponse getModel(String modelName, Long productId); public List getRecentModel(Long productId); + + public List getRecommendModel(); } diff --git a/src/main/java/com/backend/soullive_a/service/impl/ModelServiceImpl.java b/src/main/java/com/backend/soullive_a/service/impl/ModelServiceImpl.java index 11a95ab..2de4b59 100644 --- a/src/main/java/com/backend/soullive_a/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/backend/soullive_a/service/impl/ModelServiceImpl.java @@ -1,6 +1,6 @@ package com.backend.soullive_a.service.impl; -import com.backend.soullive_a.dto.request.ModelRequest; +import com.backend.soullive_a.dto.response.ModelRecommendResponse; import com.backend.soullive_a.dto.response.ModelResponse; import com.backend.soullive_a.dto.response.RecentModelResponse; import com.backend.soullive_a.entity.Product; @@ -61,6 +61,12 @@ public List getRecentModel(Long productId) { return productModelRepository.getRecentModels(productId); } + @Override + @Transactional + public List getRecommendModel(){ + + return modelRepository.findAllRecommendModel(); + } /** * 광고 상품 엔티티 생성 * @param model From c6d7da5f6d95c1be31ffeca8e06bb431dab30aa8 Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 12:42:13 +0900 Subject: [PATCH 09/10] =?UTF-8?q?docs:=20swagger=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../soullive_a/dto/response/ModelRecommendResponse.java | 6 +++--- .../soullive_a/dto/response/RecentModelResponse.java | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/backend/soullive_a/dto/response/ModelRecommendResponse.java b/src/main/java/com/backend/soullive_a/dto/response/ModelRecommendResponse.java index 45d8d9c..6e5819c 100644 --- a/src/main/java/com/backend/soullive_a/dto/response/ModelRecommendResponse.java +++ b/src/main/java/com/backend/soullive_a/dto/response/ModelRecommendResponse.java @@ -4,11 +4,11 @@ @Schema(name = "모델 추천 응답 model") public record ModelRecommendResponse( - @Schema(name = "모델 이미지 url", example = "https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_profile.png") + @Schema(name = "imageUrl", example = "https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_profile.png", description = "모델 이미지 url입니다.") String imageUrl, - @Schema(name = "모델 이름", example = "김희애") + @Schema(name = "name", example = "김희애", description = "모델 이름입니다.") String name, - @Schema(name = "모델 직업 구분", example = "텔런트/영화배우") + @Schema(name = "job", example = "텔런트/영화배우", description = "모델 직업(구분자)입니다.") String job ) { diff --git a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java index bfae866..0264361 100644 --- a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java +++ b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java @@ -4,13 +4,13 @@ @Schema(description = "최근 조회한 모델 model 객체") public record RecentModelResponse( - @Schema(name = "모델 id(기본키)", example = "1") + @Schema(name = "modelId", example = "1", description = "모델 기본키") Long modelId, - @Schema(name = "모델 이미지 url", example = "https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_profile.png") + @Schema(name = "imageUrl", example = "https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_profile.png", description = "모델 이미지 url입니다.") String imageUrl, - @Schema(name = "모델 이름", example = "한지민") + @Schema(name = "modelName", example = "한지민", description = "모델 이름입니다.") String modelName, - @Schema(name = "ai 추천 점수", example = "3.0") + @Schema(name = "aiRate", example = "3.0", description = "ai 추천 점수입니다.") Float aiRate ) { From 5248eb48c34f356db591562ef3efcc2c1865d980 Mon Sep 17 00:00:00 2001 From: leesangmin Date: Thu, 7 Mar 2024 15:04:59 +0900 Subject: [PATCH 10/10] =?UTF-8?q?feat:=20=EC=B5=9C=EA=B7=BC=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EB=AA=A8=EB=8D=B8=20api=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20=EC=86=8D=EC=84=B1(=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0)=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/soullive_a/dto/response/RecentModelResponse.java | 4 +++- .../backend/soullive_a/repository/ProductModelRepository.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java index 0264361..44f1eb2 100644 --- a/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java +++ b/src/main/java/com/backend/soullive_a/dto/response/RecentModelResponse.java @@ -11,7 +11,9 @@ public record RecentModelResponse( @Schema(name = "modelName", example = "한지민", description = "모델 이름입니다.") String modelName, @Schema(name = "aiRate", example = "3.0", description = "ai 추천 점수입니다.") - Float aiRate + Float aiRate, + @Schema(name = "job", example = "배우", description = "직업에 대한 값입니다.") + String job ) { } diff --git a/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java b/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java index 2d3c842..166b980 100644 --- a/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/ProductModelRepository.java @@ -10,7 +10,7 @@ public interface ProductModelRepository extends JpaRepository { @Query("Select " - + "new com.backend.soullive_a.dto.response.RecentModelResponse(m.id,m.imageUrl,m.modelName,m.aiRate) " + + "new com.backend.soullive_a.dto.response.RecentModelResponse(m.id,m.imageUrl,m.modelName,m.aiRate,m.job) " + "From ProductModel p " + "Inner Join Model m On p.model.id = m.id " + "Where p.product.id = :productId "