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 e91d5ca..1be8a7d 100644 --- a/src/main/java/com/backend/soullive_a/controller/ModelController.java +++ b/src/main/java/com/backend/soullive_a/controller/ModelController.java @@ -16,16 +16,16 @@ public class ModelController { /** * 모델 조회 api - * @param modelId + * @param modelName * @return */ - @GetMapping("/{modelId}") - public BaseResponse getModel(@PathVariable Long modelId) { + @GetMapping("") + public BaseResponse getModel(@RequestParam String modelName) { return BaseResponse.builder() .isSuccess(true) .code(200) .message("모델 조회에 성공했습니다.") - .data(modelService.getModel(modelId)) + .data(modelService.getModel(modelName)) .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 2ef44cf..8e1b4bd 100644 --- a/src/main/java/com/backend/soullive_a/controller/ModelIntroductionController.java +++ b/src/main/java/com/backend/soullive_a/controller/ModelIntroductionController.java @@ -1,36 +1,38 @@ -//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 lombok.RequiredArgsConstructor; -//import org.springframework.web.bind.annotation.*; -// -//@RestController -//@RequiredArgsConstructor -//@RequestMapping("/api/model/introduction") -//public class ModelIntroductionController { -// -// private final ModelIntroductionService modelIntroductionService; -// -// /** -// * 모델소개 조회 api -// * @param modelId -// * @return -// */ -// @GetMapping("/{modelId}") -// public BaseResponse getModelIntroduction(@PathVariable Long modelId) { -// return BaseResponse.builder() -// .isSuccess(true) -// .code(2006) -// .message("모델소개 정보 조회에 성공했습니다.") -// .data(modelIntroductionService.getModelIntroduction(modelId)) -// .build(); -// } -// + +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 lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/model/introduction") +public class ModelIntroductionController { + + private final ModelIntroductionService modelIntroductionService; + + /** + * 모델소개 조회 api + * @param modelName + * @return + */ + @GetMapping("") + public BaseResponse getModelIntroduction(@RequestParam String modelName) { + return BaseResponse.builder() + .isSuccess(true) + .code(2006) + .message("모델소개 정보 조회에 성공했습니다.") + .data(modelIntroductionService.getModelIntroduction(modelName)) + .build(); + } + + // @PostMapping("/{modelId}") // public BaseResponse createModelIntroduction( // @PathVariable Long modelId, @@ -42,4 +44,6 @@ // .data(modelIntroductionService.createModelIntroduction(request, modelId)) // .build(); // } -//} + +} + diff --git a/src/main/java/com/backend/soullive_a/dto/request/ModelIntroduceRequest.java b/src/main/java/com/backend/soullive_a/dto/request/ModelIntroduceRequest.java index 6439b3e..8a82184 100644 --- a/src/main/java/com/backend/soullive_a/dto/request/ModelIntroduceRequest.java +++ b/src/main/java/com/backend/soullive_a/dto/request/ModelIntroduceRequest.java @@ -7,7 +7,9 @@ import java.util.List; public record ModelIntroduceRequest( - List modelImageKeywords, - List modelRecentWorks, - List modelRecentAdvertisements) { + + List keywords, + List modelRecentWorks, + List modelRecentAdvertisements) { + } diff --git a/src/main/java/com/backend/soullive_a/dto/request/ModelRecentAdvertisementRequest.java b/src/main/java/com/backend/soullive_a/dto/request/ModelRecentAdvertisementRequest.java new file mode 100644 index 0000000..d41cc36 --- /dev/null +++ b/src/main/java/com/backend/soullive_a/dto/request/ModelRecentAdvertisementRequest.java @@ -0,0 +1,10 @@ +package com.backend.soullive_a.dto.request; + + +public record ModelRecentAdvertisementRequest( + String imageUrl, + + Integer year, + String brand +) { +} diff --git a/src/main/java/com/backend/soullive_a/dto/request/ModelRecentWorkRequest.java b/src/main/java/com/backend/soullive_a/dto/request/ModelRecentWorkRequest.java new file mode 100644 index 0000000..7dc6479 --- /dev/null +++ b/src/main/java/com/backend/soullive_a/dto/request/ModelRecentWorkRequest.java @@ -0,0 +1,15 @@ +package com.backend.soullive_a.dto.request; + +import com.backend.soullive_a.entity.model.Model; + +public record ModelRecentWorkRequest( + String imageUrl, + + Integer year, + String category, + String title, + String genre, + String role + +) { +} diff --git a/src/main/java/com/backend/soullive_a/dto/request/ModelRequest.java b/src/main/java/com/backend/soullive_a/dto/request/ModelRequest.java index 854a88c..9809e9a 100644 --- a/src/main/java/com/backend/soullive_a/dto/request/ModelRequest.java +++ b/src/main/java/com/backend/soullive_a/dto/request/ModelRequest.java @@ -1,14 +1,22 @@ package com.backend.soullive_a.dto.request; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import java.time.LocalDate; public record ModelRequest( - @NotNull String modelName, - @NotNull LocalDate birth, - @NotNull String job, + + String imageUrl, + String modelName, + LocalDate birth, + String age, + String job, + String info, - @NotNull String agency, - @NotNull Float aiRate) { + String agency, + + + Float aiRate) { + } diff --git a/src/main/java/com/backend/soullive_a/dto/response/ModelImageKeywordResponse.java b/src/main/java/com/backend/soullive_a/dto/response/ModelImageKeywordResponse.java new file mode 100644 index 0000000..649e53a --- /dev/null +++ b/src/main/java/com/backend/soullive_a/dto/response/ModelImageKeywordResponse.java @@ -0,0 +1,16 @@ +package com.backend.soullive_a.dto.response; + +import com.backend.soullive_a.entity.model.Model; +import jakarta.persistence.Column; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.Builder; + +@Builder +public record ModelImageKeywordResponse( +// Long id, + String keyord +// Model model //필요한가? +) { +} diff --git a/src/main/java/com/backend/soullive_a/dto/response/ModelIntroductionResponse.java b/src/main/java/com/backend/soullive_a/dto/response/ModelIntroductionResponse.java index bcc789c..c603948 100644 --- a/src/main/java/com/backend/soullive_a/dto/response/ModelIntroductionResponse.java +++ b/src/main/java/com/backend/soullive_a/dto/response/ModelIntroductionResponse.java @@ -9,8 +9,9 @@ @Builder public record ModelIntroductionResponse( - List modelImageKeywords, - List modelRecentWorks, - List modelRecentAdvertisements + + List modelImageKeywords, + List modelRecentWorks, + List modelRecentAdvertisements ) { } diff --git a/src/main/java/com/backend/soullive_a/dto/response/ModelRecentAdvertisementResponse.java b/src/main/java/com/backend/soullive_a/dto/response/ModelRecentAdvertisementResponse.java new file mode 100644 index 0000000..553fd70 --- /dev/null +++ b/src/main/java/com/backend/soullive_a/dto/response/ModelRecentAdvertisementResponse.java @@ -0,0 +1,17 @@ +package com.backend.soullive_a.dto.response; + +import com.backend.soullive_a.entity.model.Model; +import jakarta.persistence.Column; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.Builder; + +@Builder +public record ModelRecentAdvertisementResponse( + String imageUrl, + Integer year, + String brand + +) { +} diff --git a/src/main/java/com/backend/soullive_a/dto/response/ModelRecentWorkResponse.java b/src/main/java/com/backend/soullive_a/dto/response/ModelRecentWorkResponse.java new file mode 100644 index 0000000..0f8b084 --- /dev/null +++ b/src/main/java/com/backend/soullive_a/dto/response/ModelRecentWorkResponse.java @@ -0,0 +1,21 @@ +package com.backend.soullive_a.dto.response; + +import com.backend.soullive_a.entity.model.Model; +import jakarta.persistence.Column; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.Builder; + +@Builder +public record ModelRecentWorkResponse( + String imageUrl, + + Integer year, + String category, + String title, + String genre, + String role + +) { +} diff --git a/src/main/java/com/backend/soullive_a/dto/response/ModelResponse.java b/src/main/java/com/backend/soullive_a/dto/response/ModelResponse.java index a6a0a60..7599d05 100644 --- a/src/main/java/com/backend/soullive_a/dto/response/ModelResponse.java +++ b/src/main/java/com/backend/soullive_a/dto/response/ModelResponse.java @@ -8,8 +8,12 @@ @Builder public record ModelResponse( Long modelId, + String imageUrl, String modelName, LocalDate birth, + + String age, + String job, String info, String agency, diff --git a/src/main/java/com/backend/soullive_a/entity/model/Model.java b/src/main/java/com/backend/soullive_a/entity/model/Model.java index 9fb17a9..fe14c18 100644 --- a/src/main/java/com/backend/soullive_a/entity/model/Model.java +++ b/src/main/java/com/backend/soullive_a/entity/model/Model.java @@ -16,12 +16,17 @@ public class Model { @Column(name = "MODEL_ID", nullable = false) private Long id; + + @Column(name = "IMAGE_URL", nullable = false) + private String imageUrl; + @Column(name = "MODEL_NAME", nullable = false) private String modelName; @Column(name = "BIRTH", nullable = false) private LocalDate birth; + @Column(name = "AGE", nullable = false) private String age; diff --git a/src/main/java/com/backend/soullive_a/entity/model/introduction/ModelRecentAdvertisement.java b/src/main/java/com/backend/soullive_a/entity/model/introduction/ModelRecentAdvertisement.java index 187478e..2583d1f 100644 --- a/src/main/java/com/backend/soullive_a/entity/model/introduction/ModelRecentAdvertisement.java +++ b/src/main/java/com/backend/soullive_a/entity/model/introduction/ModelRecentAdvertisement.java @@ -15,6 +15,10 @@ public class ModelRecentAdvertisement { @Column(name = "MODEL_RECENT_ADVERTISEMENT_ID", nullable = false) private Long id; + @Column(name = "IMAGE_URL", nullable = false) + private String imageUrl; + + @Column(name = "YEAR", nullable = false) private Integer year; diff --git a/src/main/java/com/backend/soullive_a/entity/model/introduction/ModelRecentWork.java b/src/main/java/com/backend/soullive_a/entity/model/introduction/ModelRecentWork.java index 9635395..01c536b 100644 --- a/src/main/java/com/backend/soullive_a/entity/model/introduction/ModelRecentWork.java +++ b/src/main/java/com/backend/soullive_a/entity/model/introduction/ModelRecentWork.java @@ -15,6 +15,9 @@ public class ModelRecentWork { @Column(name = "MODEL_RECENT_WORK_ID", nullable = false) private Long id; + @Column(name = "IMAGE_URL", nullable = false) + private String imageUrl; + @Column(name = "YEAR", nullable = false) private Integer year; @@ -30,9 +33,6 @@ public class ModelRecentWork { @Column(name = "ROLE", nullable = false) private String role; - @Column(name = "IS_MAIN_ACTOR", nullable = false) - private Boolean isMainActor; - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "MODEL_ID", nullable = false) private Model model; 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 6f35486..ba26875 100644 --- a/src/main/java/com/backend/soullive_a/repository/ModelRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/ModelRepository.java @@ -8,4 +8,5 @@ public interface ModelRepository extends JpaRepository { + public Optional findByModelName(String modelName); } diff --git a/src/main/java/com/backend/soullive_a/repository/ModelImageKeywordRepository.java b/src/main/java/com/backend/soullive_a/repository/model/introduction/ModelImageKeywordRepository.java similarity index 59% rename from src/main/java/com/backend/soullive_a/repository/ModelImageKeywordRepository.java rename to src/main/java/com/backend/soullive_a/repository/model/introduction/ModelImageKeywordRepository.java index 347bb80..40dc1ff 100644 --- a/src/main/java/com/backend/soullive_a/repository/ModelImageKeywordRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/model/introduction/ModelImageKeywordRepository.java @@ -1,4 +1,7 @@ -package com.backend.soullive_a.repository; +package com.backend.soullive_a.repository.model.introduction; + + +import com.backend.soullive_a.entity.model.Model; import com.backend.soullive_a.entity.model.introduction.ModelImageKeyword; import org.springframework.data.jpa.repository.JpaRepository; @@ -6,6 +9,7 @@ import java.util.List; public interface ModelImageKeywordRepository extends JpaRepository { - public List findAllById(Long modelId); + public List findAllByModel(Model model); + } diff --git a/src/main/java/com/backend/soullive_a/repository/ModelIntroductionRepository.java b/src/main/java/com/backend/soullive_a/repository/model/introduction/ModelIntroductionRepository.java similarity index 59% rename from src/main/java/com/backend/soullive_a/repository/ModelIntroductionRepository.java rename to src/main/java/com/backend/soullive_a/repository/model/introduction/ModelIntroductionRepository.java index 85422c5..54110ac 100644 --- a/src/main/java/com/backend/soullive_a/repository/ModelIntroductionRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/model/introduction/ModelIntroductionRepository.java @@ -1,10 +1,12 @@ -package com.backend.soullive_a.repository; +package com.backend.soullive_a.repository.model.introduction; +import com.backend.soullive_a.entity.model.Model; import com.backend.soullive_a.entity.model.introduction.ModelIntroduction; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface ModelIntroductionRepository extends JpaRepository { + public ModelIntroduction findByModelModelName(String name); } diff --git a/src/main/java/com/backend/soullive_a/repository/ModelRecentAdvertisementRepository.java b/src/main/java/com/backend/soullive_a/repository/model/introduction/ModelRecentAdvertisementRepository.java similarity index 65% rename from src/main/java/com/backend/soullive_a/repository/ModelRecentAdvertisementRepository.java rename to src/main/java/com/backend/soullive_a/repository/model/introduction/ModelRecentAdvertisementRepository.java index 27667d5..d89340b 100644 --- a/src/main/java/com/backend/soullive_a/repository/ModelRecentAdvertisementRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/model/introduction/ModelRecentAdvertisementRepository.java @@ -1,4 +1,7 @@ -package com.backend.soullive_a.repository; +package com.backend.soullive_a.repository.model.introduction; + + +import com.backend.soullive_a.entity.model.Model; import com.backend.soullive_a.entity.model.introduction.ModelRecentAdvertisement; import com.backend.soullive_a.entity.model.introduction.ModelRecentWork; @@ -7,6 +10,8 @@ import java.util.List; public interface ModelRecentAdvertisementRepository extends JpaRepository { - public List findAllById(Long modelId); + + public List findAllByModel(Model model); + } diff --git a/src/main/java/com/backend/soullive_a/repository/ModelRecentWorkRepository.java b/src/main/java/com/backend/soullive_a/repository/model/introduction/ModelRecentWorkRepository.java similarity index 58% rename from src/main/java/com/backend/soullive_a/repository/ModelRecentWorkRepository.java rename to src/main/java/com/backend/soullive_a/repository/model/introduction/ModelRecentWorkRepository.java index dae8816..0dd822e 100644 --- a/src/main/java/com/backend/soullive_a/repository/ModelRecentWorkRepository.java +++ b/src/main/java/com/backend/soullive_a/repository/model/introduction/ModelRecentWorkRepository.java @@ -1,4 +1,6 @@ -package com.backend.soullive_a.repository; +package com.backend.soullive_a.repository.model.introduction; + +import com.backend.soullive_a.entity.model.Model; import com.backend.soullive_a.entity.model.introduction.ModelRecentWork; import org.springframework.data.jpa.repository.JpaRepository; @@ -6,6 +8,8 @@ import java.util.List; public interface ModelRecentWorkRepository extends JpaRepository { - public List findAllById(Long modelId); + + public List findAllByModel(Model model); + } diff --git a/src/main/java/com/backend/soullive_a/service/ModelIntroductionService.java b/src/main/java/com/backend/soullive_a/service/ModelIntroductionService.java index 33c68b3..c648ce2 100644 --- a/src/main/java/com/backend/soullive_a/service/ModelIntroductionService.java +++ b/src/main/java/com/backend/soullive_a/service/ModelIntroductionService.java @@ -1,12 +1,14 @@ -//package com.backend.soullive_a.service; -// -//import com.backend.soullive_a.dto.request.ModelIntroduceRequest; -//import com.backend.soullive_a.dto.response.ModelIntroductionResponse; -// -//import java.util.List; -// -//public interface ModelIntroductionService { -// public ModelIntroductionResponse getModelIntroduction(Long modelId); -// -// public ModelIntroductionResponse createModelIntroduction(ModelIntroduceRequest request, Long modelId); -//} + +package com.backend.soullive_a.service; + +import com.backend.soullive_a.dto.request.ModelIntroduceRequest; +import com.backend.soullive_a.dto.response.ModelIntroductionResponse; + +import java.util.List; + +public interface ModelIntroductionService { + public ModelIntroductionResponse getModelIntroduction(String modelName); + + public ModelIntroductionResponse createModelIntroduction(ModelIntroduceRequest request, Long modelId); +} + 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 0458e36..05d1757 100644 --- a/src/main/java/com/backend/soullive_a/service/ModelService.java +++ b/src/main/java/com/backend/soullive_a/service/ModelService.java @@ -4,7 +4,7 @@ import com.backend.soullive_a.dto.response.ModelResponse; public interface ModelService { - public ModelResponse getModel(Long modelId ); + public ModelResponse getModel(String modelName ); public ModelResponse createModel(ModelRequest request); } diff --git a/src/main/java/com/backend/soullive_a/service/impl/ModelIntroductionServiceImpl.java b/src/main/java/com/backend/soullive_a/service/impl/ModelIntroductionServiceImpl.java index 7b73944..3881e22 100644 --- a/src/main/java/com/backend/soullive_a/service/impl/ModelIntroductionServiceImpl.java +++ b/src/main/java/com/backend/soullive_a/service/impl/ModelIntroductionServiceImpl.java @@ -1,68 +1,193 @@ -//package com.backend.soullive_a.service.impl; -// -//import com.backend.soullive_a.dto.request.ModelIntroduceRequest; -//import com.backend.soullive_a.dto.response.ModelIntroductionResponse; -//import com.backend.soullive_a.entity.model.Model; -//import com.backend.soullive_a.entity.model.introduction.ModelImageKeyword; -//import com.backend.soullive_a.entity.model.introduction.ModelIntroduction; -//import com.backend.soullive_a.exception.custom.NotFoundUserException; -//import com.backend.soullive_a.repository.*; -//import com.backend.soullive_a.service.ModelIntroductionService; -//import lombok.RequiredArgsConstructor; -//import org.springframework.stereotype.Service; -// -// -//@Service -//@RequiredArgsConstructor -//public class ModelIntroductionServiceImpl implements ModelIntroductionService { -// -// private final ModelImageKeywordRepository modelImageKeywordRepository; -// private final ModelRecentWorkRepository modelRecentWorkRepository; -// private final ModelRecentAdvertisementRepository modelRecentAdvertisementRepository; -// private final ModelRepository modelRepository; -// private final ModelIntroductionRepository modelIntroductionRepository; -// -// /** -// * 모델 소개 조회 서비스 로직 -// * @param modelId -// * @return -// */ -// @Override -// public ModelIntroductionResponse getModelIntroduction(Long modelId) { -// Model model = modelRepository.findById(modelId) -// .orElseThrow(() -> new NotFoundUserException()); -// -// return ModelIntroductionResponse.builder() -// .modelImageKeywords(modelImageKeywordRepository.findAllById(modelId)) -// .modelRecentWorks(modelRecentWorkRepository.findAllById(modelId)) -// .modelRecentAdvertisements(modelRecentAdvertisementRepository.findAllById(modelId)) -// .build(); -// } -// -// /** -// * 모델소개 생성 서비스 로직 -// * @param modelId -// * @return -// */ -// @Override -// public ModelIntroductionResponse createModelIntroduction(ModelIntroduceRequest request, Long modelId) { -// Model model = modelRepository.findById(modelId) -// .orElseThrow(() -> new NotFoundUserException()); -// -// ModelIntroduction modelIntroduction = modelIntroductionRepository.save( -// ModelIntroduction.builder() -// .model(model) -// .build() -// ); -// -// return ModelIntroductionResponse.builder() -// .modelImageKeywords(request.modelImageKeywords()) -// .modelRecentWorks(request.modelRecentWorks()) -// .modelRecentAdvertisements(request.modelRecentAdvertisements()) -// .build(); -// -// -// } -// -// -//} + +package com.backend.soullive_a.service.impl; + +import com.backend.soullive_a.dto.request.ModelIntroduceRequest; +import com.backend.soullive_a.dto.request.ModelRecentAdvertisementRequest; +import com.backend.soullive_a.dto.request.ModelRecentWorkRequest; +import com.backend.soullive_a.dto.response.ModelIntroductionResponse; +import com.backend.soullive_a.dto.response.ModelRecentAdvertisementResponse; +import com.backend.soullive_a.dto.response.ModelRecentWorkResponse; +import com.backend.soullive_a.entity.model.Model; +import com.backend.soullive_a.entity.model.introduction.ModelImageKeyword; +import com.backend.soullive_a.entity.model.introduction.ModelIntroduction; +import com.backend.soullive_a.entity.model.introduction.ModelRecentAdvertisement; +import com.backend.soullive_a.entity.model.introduction.ModelRecentWork; +import com.backend.soullive_a.exception.custom.NotFoundUserException; +import com.backend.soullive_a.repository.*; +import com.backend.soullive_a.repository.model.introduction.ModelImageKeywordRepository; +import com.backend.soullive_a.repository.model.introduction.ModelIntroductionRepository; +import com.backend.soullive_a.repository.model.introduction.ModelRecentAdvertisementRepository; +import com.backend.soullive_a.repository.model.introduction.ModelRecentWorkRepository; +import com.backend.soullive_a.service.ModelIntroductionService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + + +@Slf4j +@Service +@RequiredArgsConstructor +public class ModelIntroductionServiceImpl implements ModelIntroductionService { + + private final ModelImageKeywordRepository modelImageKeywordRepository; + private final ModelRecentWorkRepository modelRecentWorkRepository; + private final ModelRecentAdvertisementRepository modelRecentAdvertisementRepository; + private final ModelRepository modelRepository; + private final ModelIntroductionRepository modelIntroductionRepository; + + /** + * 모델 소개 조회 서비스 로직 + * + * @param modelId + * @return + */ + @Override + public ModelIntroductionResponse getModelIntroduction(String modelName) { + Model model = modelRepository.findByModelName(modelName) + .orElseThrow(() -> new NotFoundUserException()); + + List modelImageKeywords = modelImageKeywordRepository.findAllByModel(model); + List modelRecentWorks = modelRecentWorkRepository.findAllByModel(model); + List modelRecentAdvertisements = modelRecentAdvertisementRepository.findAllByModel(model); + + List modelImageKeywordResponse = new ArrayList<>(); + List modelRecentWorkResponse = new ArrayList<>(); + List modelRecentAdvertisementResponse = new ArrayList<>(); + + for (ModelImageKeyword keyword : modelImageKeywords) { + modelImageKeywordResponse.add(keyword.getKeyword()); + } + for (ModelRecentWork modelRecentWork : modelRecentWorks) { + modelRecentWorkResponse.add( + ModelRecentWorkResponse.builder() + .imageUrl(modelRecentWork.getImageUrl()) + .year(modelRecentWork.getYear()) + .category(modelRecentWork.getCategory()) + .title(modelRecentWork.getTitle()) + .genre(modelRecentWork.getGenre()) + .role(modelRecentWork.getRole()) + .build() + ); + } + + for (ModelRecentAdvertisement modelRecentAdvertisement : modelRecentAdvertisements) { + modelRecentAdvertisementResponse.add( + ModelRecentAdvertisementResponse.builder() + .imageUrl(modelRecentAdvertisement.getImageUrl()) + .year(modelRecentAdvertisement.getYear()) + .brand(modelRecentAdvertisement.getBrand()) + .build() + ); + } + + return ModelIntroductionResponse.builder() + .modelImageKeywords(modelImageKeywordResponse) + .modelRecentWorks(modelRecentWorkResponse) + .modelRecentAdvertisements(modelRecentAdvertisementResponse) + .build(); + + + } + + /** + * 모델소개 생성 서비스 로직 + * + * @param modelId + * @return + */ + @Override + @Transactional + public ModelIntroductionResponse createModelIntroduction(ModelIntroduceRequest request, Long modelId) { + List modelImageKeywordList = new ArrayList<>(); + List modelRecentWorkList = new ArrayList<>(); + List modelRecentAdvertisementList = new ArrayList<>(); + + Model model = modelRepository.findById(modelId) + .orElseThrow(() -> new NotFoundUserException()); + + // ModelIntroduction 엔티티 저장 + modelIntroductionRepository.save( + ModelIntroduction.builder() + .model(model) + .build() + ); + + // ModelImageKeyword 엔티티 각각 저장 + for (String keyword : request.keywords()) { + ModelImageKeyword modelImageKeyword = ModelImageKeyword.builder() + .model(model) + .keyword(keyword) + .build(); + + modelImageKeywordRepository.save(modelImageKeyword); + + // ModelImageKeywordResponse (String) 생성 + modelImageKeywordList.add(keyword); + + } + + // ModelRecentWorkRequest 엔티티 각각 저장 + for (ModelRecentWorkRequest modelRecentWorkRequest : request.modelRecentWorks()) { + ModelRecentWork modelRecentWork = ModelRecentWork.builder() + .imageUrl(modelRecentWorkRequest.imageUrl()) + .year(modelRecentWorkRequest.year()) + .category(modelRecentWorkRequest.category()) + .title(modelRecentWorkRequest.title()) + .genre(modelRecentWorkRequest.genre()) + .role(modelRecentWorkRequest.role()) + .model(model) + .build(); + + modelRecentWorkRepository.save(modelRecentWork); + + // ModelRecentWorkResponse 생성 + ModelRecentWorkResponse modelRecentWorkResponse = ModelRecentWorkResponse.builder() + .imageUrl(modelRecentWorkRequest.imageUrl()) + .year(modelRecentWorkRequest.year()) + .category(modelRecentWorkRequest.category()) + .title(modelRecentWorkRequest.title()) + .genre(modelRecentWorkRequest.genre()) + .role(modelRecentWorkRequest.role()) + .build(); + + modelRecentWorkList.add(modelRecentWorkResponse); + } + + // modelRecentAdvertisementRepository 엔티티 각각 저장 + for (ModelRecentAdvertisementRequest modelRecentAdvertisementRequest : request.modelRecentAdvertisements()) { + ModelRecentAdvertisement modelRecentAdvertisement = ModelRecentAdvertisement.builder() + .imageUrl(modelRecentAdvertisementRequest.imageUrl()) + .year(modelRecentAdvertisementRequest.year()) + .brand(modelRecentAdvertisementRequest.brand()) + .model(model) + .build(); + + modelRecentAdvertisementRepository.save(modelRecentAdvertisement); + + // ModelRecentAdvertisementResponse 생성 + ModelRecentAdvertisementResponse modelRecentAdvertisementResponse = ModelRecentAdvertisementResponse.builder() + .imageUrl(modelRecentAdvertisementRequest.imageUrl()) + .year(modelRecentAdvertisementRequest.year()) + .brand(modelRecentAdvertisementRequest.brand()) + .build(); + + modelRecentAdvertisementList.add(modelRecentAdvertisementResponse); + } + + //ModelIntroductionResponse 생성 + + return ModelIntroductionResponse.builder() + .modelImageKeywords(modelImageKeywordList) + .modelRecentWorks(modelRecentWorkList) + .modelRecentAdvertisements(modelRecentAdvertisementList) + .build(); + + } + + +} + 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 bae49c6..58ec9fa 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 @@ -17,14 +17,19 @@ public class ModelServiceImpl implements ModelService { private final ModelRepository modelRepository; @Override - public ModelResponse getModel(Long modelId) { - Model model = modelRepository.findById(modelId) + public ModelResponse getModel(String modelName) { + System.out.println(modelName); + Model model = modelRepository.findByModelName(modelName) .orElseThrow(() -> new NotFoundUserException()); return ModelResponse.builder() .modelId(model.getId()) + + .imageUrl(model.getImageUrl()) .modelName(model.getModelName()) .birth(model.getBirth()) + .age(model.getAge()) + .job(model.getJob()) .info(model.getInfo()) .agency(model.getAgency()) @@ -36,9 +41,14 @@ public ModelResponse getModel(Long modelId) { @Transactional public ModelResponse createModel(ModelRequest request) { // 중복 검사 로직 추가 - Model model = modelRepository.save(Model.builder() + + Model model = modelRepository.save(Model.builder() + .imageUrl(request.imageUrl()) + .modelName(request.modelName()) .birth(request.birth()) + .age(request.age()) + .job(request.job()) .info(request.info()) .agency(request.agency()) @@ -47,8 +57,12 @@ public ModelResponse createModel(ModelRequest request) { return ModelResponse.builder() .modelId(model.getId()) + + .imageUrl(model.getImageUrl()) .modelName(model.getModelName()) .birth(model.getBirth()) + .age(model.getAge()) + .job(model.getJob()) .info(model.getInfo()) .agency(model.getAgency()) diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 39fabaa..fb495f0 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1,11 +1,50 @@ --- git 에는 soullive로 해야함 +-- 유저 INSERT INTO soullive.user (user_id, password, phone_number) VALUES (1, 'password', '010-0000-0000'); -INSERT INTO soullive.model (model_id, model_name, birth, age, job, info, agency, ai_rate) VALUES (1,'김희애', '1967-04-23','56세','텔런트/영화배우','','YG 엔터테인먼트',4.0); -INSERT INTO soullive.model_popularity (model_popularity_id,model_id,score_url,ai_comment,sns_url,search_url,brand_score_url) values (1,1,null,'최근 화제성에서는 다소 약한 모습을 보여주고 있지만 3040 남녀 모두에게 높은 인지도를 갖고 있고 앞으로 2개의 주연 활동을 앞두고 있어 더 큰 화제성을 갖을 것으로 예상됩니다.',null,null,null); -INSERT INTO soullive.model_popular_gender (gender_id, model_popularity_id, gender_type) values ('1','1','MALE'); -INSERT INTO soullive.model_popular_gender (gender_id, model_popularity_id, gender_type) values ('2','1','FEMALE'); -INSERT INTO soullive.model_popular_age (age_id, model_popularity_id,age_type) values (1,1,'THIRTY'); -INSERT INTO soullive.model_popular_age (age_id, model_popularity_id,age_type) values (2,1,'FORTY'); -INSERT INTO soullive.model_popular_age (age_id, model_popularity_id,age_type) values (3,1,'FIFTY'); -INSERT INTO soullive.model_scheduled_work (model_scheduled_work_id,image_url,model_popularity_id,year,category,title,is_main_actor,genre) values (1,null, 1, 2024, '방영 예정 영화','돌풍',true,'공포'); -INSERT INTO soullive.model_scheduled_work (model_scheduled_work_id,image_url,model_popularity_id,year,category,title,is_main_actor,genre) values (2,null, 1, 2024, '방영 예정 영화','보통의 가족',true,'공포'); \ No newline at end of file + +-- 모델1 김희애 +INSERT INTO soullive.model (model_id, model_name, birth, age, job, info, agency, ai_rate, image_url) +VALUES (1, '김희애', '1967-04-23', '56세', '텔런트/영화배우', '', 'YG 엔터테인먼트', 4.0, 'https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_profile.png'); + +INSERT INTO soullive.model_introduction (model_id, model_introduction_id) VALUES (1, 1); + +-- 모델1 김희애 모델소개 +INSERT INTO soullive.model_image_keyword (model_image_keyword_id, model_id, keyword) +VALUES + (1, 1, '#세련됨'), + (2, 1, '#프로페셔널'), + (3, 1, '#대중에게 친숙한'), + (4, 1, '#우아한'), + (5, 1, '#프리미엄'), + (6, 1, '#럭셔리함'), + (7, 1, '#신뢰감'); + +INSERT INTO soullive.model_recent_work (model_recent_work_id, `year`, model_id, category, genre, image_url, `role`, title) +VALUES + (1, 2020, 1, '드라마', '가족, 멜로', 'https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_recentwork1.png', '지선우역 (주연)', '부부의 세계'), + (2, 2023, 1, '드라마', '드라마, 정치', 'https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_recentwork2.png', '황도희역 (주연)', '퀸메이커'), + (3, 2024, 1, '영화', '범죄', 'https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_recentwork3.png', '심은조역 (주연)', '데드맨'); + +INSERT INTO soullive.model_recent_advertisement (model_recent_advertisement_id, `year`, model_id, brand, image_url) +VALUES + (1, 2019, 1, 'LG 프라엘', 'https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_recentadvertisement1.png'), + (2, 2021, 1, '트렌비', 'https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_recentadvertisement2.png'), + (3, 2024, 1, '우리은행 투체어스', 'https://soullive-bucket.s3.ap-northeast-2.amazonaws.com/heeae_recentadvertisement3.png'); + +-- 모델 화제성 +INSERT INTO soullive.model_popularity (model_popularity_id,model_id,score_url,ai_comment,sns_url,search_url,brand_score_url) +values + (1,1,null,'최근 화제성에서는 다소 약한 모습을 보여주고 있지만 3040 남녀 모두에게 높은 인지도를 갖고 있고 앞으로 2개의 주연 활동을 앞두고 있어 더 큰 화제성을 갖을 것으로 예상됩니다.',null,null,null); +INSERT INTO soullive.model_popular_gender (gender_id, model_popularity_id, gender_type) +values + ('1','1','MALE'), + ('2','1','FEMALE'); + +INSERT INTO soullive.model_popular_age (age_id, model_popularity_id,age_type) +values + (1,1,'THIRTY'), + (2,1,'FORTY'), + (3,1,'FIFTY'); +INSERT INTO soullive.model_scheduled_work (model_scheduled_work_id,image_url,model_popularity_id,year,category,title,is_main_actor,genre) +values + (1,null, 1, 2024, '방영 예정 영화','돌풍',true,'공포'), + (2,null, 1, 2024, '방영 예정 영화','보통의 가족',true,'공포');