From cc90f206bab940baf145e973f576d41ae5b7cd14 Mon Sep 17 00:00:00 2001 From: pkl0912 Date: Wed, 31 Jan 2024 20:18:56 +0900 Subject: [PATCH 1/4] =?UTF-8?q?#226=20[refactor]=20=EC=A0=9C=EC=95=88?= =?UTF-8?q?=EC=84=9C=20=EC=9E=91=EC=84=B1=20service=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/DesignerController.java | 6 ++- .../PreferOfferCondition.java | 5 +- .../HairModelApplicationRetrieveService.java | 1 + .../service/designer/DesignerService.java | 33 ------------- .../HairServiceOfferRegisterService.java | 48 +++++++++++++++++++ 5 files changed, 57 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/moddy/server/controller/designer/DesignerController.java b/src/main/java/com/moddy/server/controller/designer/DesignerController.java index 3a1a4307..01470b2e 100644 --- a/src/main/java/com/moddy/server/controller/designer/DesignerController.java +++ b/src/main/java/com/moddy/server/controller/designer/DesignerController.java @@ -12,6 +12,7 @@ import com.moddy.server.controller.designer.dto.response.DownloadUrlResponseDto; import com.moddy.server.service.application.HairModelApplicationRetrieveService; import com.moddy.server.service.designer.DesignerService; +import com.moddy.server.service.offer.HairServiceOfferRegisterService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -42,6 +43,7 @@ public class DesignerController { private final DesignerService designerService; private final HairModelApplicationRetrieveService hairModelApplicationRetrieveService; + private final HairServiceOfferRegisterService hairServiceOfferRegisterService; @Operation(summary = "[JWT] 디자이너 메인 뷰 조회", description = "디자이너 메인 뷰 조회 API입니다.") @ApiResponses({ @@ -68,10 +70,10 @@ public SuccessResponse getDesignerMainInfo( @SecurityRequirement(name = "JWT Auth") @PostMapping("{applicationId}/offer") public SuccessNonDataResponse offerCreateRequest( - @Parameter(hidden = true) @UserId Long userId, + @Parameter(hidden = true) @UserId Long designerId, @PathVariable(value = "applicationId") Long applicationId, @Valid @RequestBody OfferCreateRequest offerCreateRequest) throws IOException { - designerService.postOffer(userId, applicationId, offerCreateRequest); + hairServiceOfferRegisterService.postOffer(designerId, applicationId, offerCreateRequest); return SuccessNonDataResponse.success(SuccessCode.POST_OFFER_SUCCESS); } diff --git a/src/main/java/com/moddy/server/domain/prefer_offer_condition/PreferOfferCondition.java b/src/main/java/com/moddy/server/domain/prefer_offer_condition/PreferOfferCondition.java index 58f0d1d1..2b6d4c65 100644 --- a/src/main/java/com/moddy/server/domain/prefer_offer_condition/PreferOfferCondition.java +++ b/src/main/java/com/moddy/server/domain/prefer_offer_condition/PreferOfferCondition.java @@ -11,7 +11,6 @@ @Entity @Getter -@Builder @NoArgsConstructor @AllArgsConstructor public class PreferOfferCondition extends BaseTimeEntity { @@ -28,4 +27,8 @@ public class PreferOfferCondition extends BaseTimeEntity { @NotNull private OfferCondition offerCondition; + public PreferOfferCondition(HairServiceOffer hairServiceOffer, OfferCondition offerCondition){ + this.hairServiceOffer = hairServiceOffer; + this.offerCondition = offerCondition; + } } diff --git a/src/main/java/com/moddy/server/service/application/HairModelApplicationRetrieveService.java b/src/main/java/com/moddy/server/service/application/HairModelApplicationRetrieveService.java index 607f259b..1c06d477 100644 --- a/src/main/java/com/moddy/server/service/application/HairModelApplicationRetrieveService.java +++ b/src/main/java/com/moddy/server/service/application/HairModelApplicationRetrieveService.java @@ -76,3 +76,4 @@ private HairModelApplicationResponse getApplicationResponse(final HairModelAppli return applicationResponse; } } + diff --git a/src/main/java/com/moddy/server/service/designer/DesignerService.java b/src/main/java/com/moddy/server/service/designer/DesignerService.java index b11ec4a5..b0186d29 100644 --- a/src/main/java/com/moddy/server/service/designer/DesignerService.java +++ b/src/main/java/com/moddy/server/service/designer/DesignerService.java @@ -117,39 +117,6 @@ public UserCreateResponse createDesigner(Long userId, DesignerCreateRequest requ return authService.createUserToken(designer.getId().toString()); } - - @Transactional - public void postOffer(Long userId, Long applicationId, OfferCreateRequest request) throws IOException { - Designer designer = designerJpaRepository.findById(userId).orElseThrow(() -> new NotFoundException(DESIGNER_NOT_FOUND_EXCEPTION)); - HairModelApplication hairModelApplication = hairModelApplicationJpaRepository.findById(applicationId).orElseThrow(() -> new NotFoundException(ErrorCode.NOT_FOUND_APPLICATION_EXCEPTION)); - - if (hairServiceOfferJpaRepository.existsByHairModelApplicationIdAndDesignerId(applicationId,designer.getId())) throw new ConflictException(ErrorCode.ALREADY_EXIST_OFFER_EXCEPTION); - - HairServiceOffer offer = HairServiceOffer.builder() - .model(hairModelApplication.getModel()) - .hairModelApplication(hairModelApplication) - .designer(designer) - .offerDetail(request.offerDetail()) - .isModelAgree(false) - .isClicked(false) - .build(); - hairServiceOfferJpaRepository.save(offer); - - request.preferOfferConditions().stream() - .forEach(p -> { - PreferOfferCondition preferOfferCondition = PreferOfferCondition.builder() - .offerCondition(p) - .hairServiceOffer(offer) - .build(); - preferOfferConditionJpaRepository.save(preferOfferCondition); - - }); - - final String modelName = hairModelApplication.getModel().getName(); - final String modelPhoneNumber = hairModelApplication.getModel().getPhoneNumber(); - smsUtil.sendOfferToModel(modelPhoneNumber, modelName); - } - @Transactional public ApplicationDetailInfoResponse getApplicationDetail(Long userId, Long applicationId) { diff --git a/src/main/java/com/moddy/server/service/offer/HairServiceOfferRegisterService.java b/src/main/java/com/moddy/server/service/offer/HairServiceOfferRegisterService.java index 392e7529..1d9885e6 100644 --- a/src/main/java/com/moddy/server/service/offer/HairServiceOfferRegisterService.java +++ b/src/main/java/com/moddy/server/service/offer/HairServiceOfferRegisterService.java @@ -1,18 +1,36 @@ package com.moddy.server.service.offer; +import com.moddy.server.common.exception.enums.ErrorCode; +import com.moddy.server.common.exception.model.ConflictException; +import com.moddy.server.common.exception.model.NotFoundException; +import com.moddy.server.common.util.SmsUtil; +import com.moddy.server.controller.designer.dto.request.OfferCreateRequest; +import com.moddy.server.domain.designer.Designer; +import com.moddy.server.domain.designer.repository.DesignerJpaRepository; +import com.moddy.server.domain.hair_model_application.HairModelApplication; +import com.moddy.server.domain.hair_model_application.repository.HairModelApplicationJpaRepository; import com.moddy.server.domain.hair_service_offer.HairServiceOffer; import com.moddy.server.domain.hair_service_offer.repository.HairServiceOfferJpaRepository; +import com.moddy.server.domain.model.Model; +import com.moddy.server.domain.prefer_offer_condition.PreferOfferCondition; import com.moddy.server.domain.prefer_offer_condition.repository.PreferOfferConditionJpaRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.List; +import static com.moddy.server.common.exception.enums.ErrorCode.DESIGNER_NOT_FOUND_EXCEPTION; + @Service @RequiredArgsConstructor public class HairServiceOfferRegisterService { private final PreferOfferConditionJpaRepository preferOfferConditionJpaRepository; private final HairServiceOfferJpaRepository hairServiceOfferJpaRepository; + private final DesignerJpaRepository designerJpaRepository; + private final HairModelApplicationJpaRepository hairModelApplicationJpaRepository; + private final SmsUtil smsUtil; public void deleteModelHairServiceOfferInfos(final Long modelId) { final List hairServiceOffers = hairServiceOfferJpaRepository.findAllByModelId(modelId); @@ -29,4 +47,34 @@ public void deleteDesignerHairServiceOfferInfos(final Long designerId) { hairServiceOfferJpaRepository.deleteById(hairServiceOffer.getId()); }); } + + @Transactional + public void postOffer(Long designerId, Long applicationId, OfferCreateRequest request) throws IOException { + Designer designer = designerJpaRepository.findById(designerId).orElseThrow(() -> new NotFoundException(DESIGNER_NOT_FOUND_EXCEPTION)); + HairModelApplication hairModelApplication = hairModelApplicationJpaRepository.findById(applicationId).orElseThrow(() -> new NotFoundException(ErrorCode.NOT_FOUND_APPLICATION_EXCEPTION)); + Model model = hairModelApplication.getModel(); + if (hairServiceOfferJpaRepository.existsByHairModelApplicationIdAndDesignerId(applicationId,designer.getId())) throw new ConflictException(ErrorCode.ALREADY_EXIST_OFFER_EXCEPTION); + + HairServiceOffer offer = HairServiceOffer.builder() + .model(model) + .hairModelApplication(hairModelApplication) + .designer(designer) + .offerDetail(request.offerDetail()) + .isModelAgree(false) + .isClicked(false) + .build(); + hairServiceOfferJpaRepository.save(offer); + + request.preferOfferConditions().stream() + .forEach(p -> { + PreferOfferCondition preferOfferCondition = new PreferOfferCondition(offer,p); + preferOfferConditionJpaRepository.save(preferOfferCondition); + + }); + + final String modelName = model.getName(); + final String modelPhoneNumber = model.getPhoneNumber(); + smsUtil.sendOfferToModel(modelPhoneNumber, modelName); + } + } From d20ee65c98d1a7cd0099e0a57181afd89d899e20 Mon Sep 17 00:00:00 2001 From: pkl0912 Date: Tue, 6 Feb 2024 19:08:02 +0900 Subject: [PATCH 2/4] =?UTF-8?q?#226=20[refactor]=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/DesignerController.java | 17 ------------- .../controller/offer/OfferController.java | 24 +++++++++++++++++++ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/moddy/server/controller/designer/DesignerController.java b/src/main/java/com/moddy/server/controller/designer/DesignerController.java index 01470b2e..b9f2464f 100644 --- a/src/main/java/com/moddy/server/controller/designer/DesignerController.java +++ b/src/main/java/com/moddy/server/controller/designer/DesignerController.java @@ -60,23 +60,6 @@ public SuccessResponse getDesignerMainInfo( return SuccessResponse.success(SuccessCode.FIND_DESIGNER_MAIN_INFO_SUCCESS, hairModelApplicationRetrieveService.getDesignerMainInfo(designerId, page, size)); } - @Operation(summary = "[JWT] 제안서 작성하기", description = "제안서 작성하기 API입니다.") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "제안서 작성 성공", content = @Content(schema = @Schema(implementation = SuccessNonDataResponse.class))), - @ApiResponse(responseCode = "401", description = "인증 오류 입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse(responseCode = "404", description = "제안서가 존재하지 않습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse(responseCode = "500", description = "서버 내부 오류 입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - }) - @SecurityRequirement(name = "JWT Auth") - @PostMapping("{applicationId}/offer") - public SuccessNonDataResponse offerCreateRequest( - @Parameter(hidden = true) @UserId Long designerId, - @PathVariable(value = "applicationId") Long applicationId, - @Valid @RequestBody OfferCreateRequest offerCreateRequest) throws IOException { - hairServiceOfferRegisterService.postOffer(designerId, applicationId, offerCreateRequest); - return SuccessNonDataResponse.success(SuccessCode.POST_OFFER_SUCCESS); - } - @Operation(summary = "[JWT] 모델 지원서 상세 조회", description = "모델 지원서 상세 조회 API입니다.") @ApiResponses({ @ApiResponse(responseCode = "200", description = "모델 지원서 상세 조회 성공", content = @Content(schema = @Schema(implementation = ApplicationDetailInfoResponse.class))), diff --git a/src/main/java/com/moddy/server/controller/offer/OfferController.java b/src/main/java/com/moddy/server/controller/offer/OfferController.java index 5b1711ac..bafbc600 100644 --- a/src/main/java/com/moddy/server/controller/offer/OfferController.java +++ b/src/main/java/com/moddy/server/controller/offer/OfferController.java @@ -5,6 +5,7 @@ import com.moddy.server.common.dto.SuccessResponse; import com.moddy.server.common.exception.enums.SuccessCode; import com.moddy.server.config.resolver.user.UserId; +import com.moddy.server.controller.designer.dto.request.OfferCreateRequest; import com.moddy.server.controller.offer.dto.response.ModelMainOfferResponse; import com.moddy.server.controller.offer.response.DetailOfferResponse; import com.moddy.server.service.offer.HairServiceOfferRegisterService; @@ -17,13 +18,18 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; + @RestController @RequiredArgsConstructor public class OfferController { @@ -79,4 +85,22 @@ public SuccessResponse getModelDetailOfferInfo( @Parameter(name = "offerId", description = "제안서아이디") @PathVariable(value = "offerId") Long offerId) { return SuccessResponse.success(SuccessCode.FIND_MODEL_DETAIL_OFFER_SUCCESS, hairServiceOfferRetrieveService.getOfferDetail(modelId, offerId)); } + + @Tag(name = "DesignerController") + @Operation(summary = "[JWT] 제안서 작성하기", description = "제안서 작성하기 API입니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "제안서 작성 성공", content = @Content(schema = @Schema(implementation = SuccessNonDataResponse.class))), + @ApiResponse(responseCode = "401", description = "인증 오류 입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse(responseCode = "404", description = "제안서가 존재하지 않습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + @ApiResponse(responseCode = "500", description = "서버 내부 오류 입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), + }) + @SecurityRequirement(name = "JWT Auth") + @PostMapping("/designer/{applicationId}/offer") + public SuccessNonDataResponse offerCreateRequest( + @Parameter(hidden = true) @UserId Long designerId, + @PathVariable(value = "applicationId") Long applicationId, + @Valid @RequestBody OfferCreateRequest offerCreateRequest) throws IOException { + hairServiceOfferRegisterService.postOffer(designerId, applicationId, offerCreateRequest); + return SuccessNonDataResponse.success(SuccessCode.POST_OFFER_SUCCESS); + } } \ No newline at end of file From da2f769fa3254e021aff9e9a562b041b3d75932b Mon Sep 17 00:00:00 2001 From: pkl0912 Date: Wed, 7 Feb 2024 14:27:02 +0900 Subject: [PATCH 3/4] =?UTF-8?q?#226=20[refactor]=20null=20=EC=A7=80?= =?UTF-8?q?=EC=9A=B0=EA=B8=B0,=20Boolean=20->=20boolean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/hair_service_offer/HairServiceOffer.java | 8 +++----- .../service/offer/HairServiceOfferRetrieveService.java | 6 +++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/moddy/server/domain/hair_service_offer/HairServiceOffer.java b/src/main/java/com/moddy/server/domain/hair_service_offer/HairServiceOffer.java index be617c62..404cef13 100644 --- a/src/main/java/com/moddy/server/domain/hair_service_offer/HairServiceOffer.java +++ b/src/main/java/com/moddy/server/domain/hair_service_offer/HairServiceOffer.java @@ -37,13 +37,11 @@ public class HairServiceOffer extends BaseTimeEntity { @NotNull private String offerDetail; - @NotNull - private Boolean isModelAgree; + private boolean isModelAgree; - @NotNull - private Boolean isClicked; + private boolean isClicked; - public HairServiceOffer(@NotNull HairModelApplication hairModelApplication, @NotNull Model model, @NotNull Designer designer, @NotNull String offerDetail, @NotNull Boolean isModelAgree, @NotNull Boolean isClicked) { + public HairServiceOffer(HairModelApplication hairModelApplication, Model model, Designer designer, String offerDetail, boolean isModelAgree, boolean isClicked) { this.hairModelApplication = hairModelApplication; this.model = model; this.designer = designer; diff --git a/src/main/java/com/moddy/server/service/offer/HairServiceOfferRetrieveService.java b/src/main/java/com/moddy/server/service/offer/HairServiceOfferRetrieveService.java index 93fd2df8..dc1ddf94 100644 --- a/src/main/java/com/moddy/server/service/offer/HairServiceOfferRetrieveService.java +++ b/src/main/java/com/moddy/server/service/offer/HairServiceOfferRetrieveService.java @@ -86,7 +86,7 @@ private StyleDetailResponse getStyleDetailResponse(final HairServiceOffer hairSe StyleDetailResponse styleDetailResponse = StyleDetailResponse .builder() - .isAgree(hairServiceOffer.getIsModelAgree()) + .isAgree(hairServiceOffer.isModelAgree()) .preferStyle(preferHairStyleList) .designerOfferDetail(hairServiceOffer.getOfferDetail()) .modelApplicationDetail(applicationHairDetail) @@ -110,7 +110,7 @@ public ModelMainOfferResponse getModelMainOfferInfo(final Long modelId, final in } private void handleOfferClickStatus(final HairServiceOffer hairServiceOffer) { - if (!hairServiceOffer.getIsClicked()) { + if (!hairServiceOffer.isClicked()) { hairServiceOffer.updateClickStatus(); } } @@ -133,7 +133,7 @@ private List getModelMainOfferList(final Page o return offerCondition.getOfferCondition().getValue(); }).collect(Collectors.toList()); - OfferResponse offerResponse = new OfferResponse(offer.getId(), designer.getProfileImgUrl(), designer.getName(), designer.getHairShop().getName(), offerConditionTop2List, offer.getIsClicked()); + OfferResponse offerResponse = new OfferResponse(offer.getId(), designer.getProfileImgUrl(), designer.getName(), designer.getHairShop().getName(), offerConditionTop2List, offer.isClicked()); return offerResponse; }).collect(Collectors.toList()); From a858967aad1caaa698ce153a92b99bad1e41a2f5 Mon Sep 17 00:00:00 2001 From: pkl0912 Date: Wed, 7 Feb 2024 15:23:22 +0900 Subject: [PATCH 4/4] =?UTF-8?q?#226=20[refactor]=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moddy/server/controller/designer/DesignerController.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/moddy/server/controller/designer/DesignerController.java b/src/main/java/com/moddy/server/controller/designer/DesignerController.java index a21b51d2..4f5dfc27 100644 --- a/src/main/java/com/moddy/server/controller/designer/DesignerController.java +++ b/src/main/java/com/moddy/server/controller/designer/DesignerController.java @@ -41,8 +41,6 @@ public class DesignerController { private final DesignerService designerService; private final DesignerRegisterService designerRegisterService; - private final HairModelApplicationRetrieveService hairModelApplicationRetrieveService; - private final HairServiceOfferRegisterService hairServiceOfferRegisterService; @Tag(name = "Auth Controller", description = "로그인 및 회원 가입 관련 API 입니다.") @Operation(summary = "[JWT] 디자이너 회원가입 API", description = "디자이너 회원가입 조회 API입니다.")