From 3bc33d0c2d3a4294ce7023b4c4263cc230edd62b Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Fri, 30 May 2025 18:23:01 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EA=B7=B8=EB=A3=A8=EB=B0=8D=20=EB=A0=88=EB=B2=A8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20=EC=88=98=EC=A0=95,=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeleteGroomingTestAnswerController.java | 4 +- .../SaveGroomingTestAnswerController.java | 4 ++ .../UpdateGroomingTestAnswerController.java | 9 ++--- .../level/DeleteGroomingLevelController.java | 28 +++++++++++++ .../level/SaveGroomingLevelController.java | 36 +++++++++++++++++ .../level/UpdateGroomingLevelController.java | 39 +++++++++++++++++++ .../DeleteGroomingTestQuestionController.java | 5 ++- .../SaveGroomingTestQuestionController.java | 8 ++-- .../UpdateGroomingTestQuestionController.java | 8 ++-- .../dto/request/SaveGroomingLevelRequest.java | 23 +++++++++++ .../request/UpdateGroomingLevelRequest.java | 22 +++++++++++ .../GroomingDomainPersistenceAdapter.java | 35 ++++++++++++++++- .../model/GroomingLevelJpaEntity.java | 7 ++++ .../level/DeleteGroomingLevelCommand.java | 17 ++++++++ .../level/SaveGroomingLevelCommand.java | 25 ++++++++++++ .../level/UpdateGroomingLevelCommand.java | 36 +++++++++++++++++ .../DeleteGroomingTestQuestionCommand.java | 2 +- .../SaveGroomingTestQuestionCommand.java | 2 +- .../UpdateGroomingTestQuestionCommand.java | 2 +- .../level/DeleteGroomingLevelUseCase.java | 10 +++++ .../level/SaveGroomingLevelUseCase.java | 10 +++++ .../level/UpdateGroomingLevelUseCase.java | 10 +++++ .../DeleteGroomingTestQuestionUseCase.java | 2 +- .../SaveGroomingTestQuestionUseCase.java | 2 +- .../UpdateGroomingTestQuestionUseCase.java | 2 +- .../grooming/DeleteGroomingLevelPort.java | 9 +++++ .../grooming/LoadGroomingLevelPort.java | 3 ++ .../grooming/SaveGroomingLevelPort.java | 10 +++++ .../grooming/UpdateGroomingLevelPort.java | 10 +++++ .../level/DeleteGroomingLevelService.java | 21 ++++++++++ .../level/SaveGroomingLevelService.java | 25 ++++++++++++ .../level/UpdateGroomingLevelService.java | 37 ++++++++++++++++++ .../DeleteGroomingTestQuestionService.java | 2 +- .../SaveGroomingTestQuestionService.java | 2 +- .../UpdateGroomingTestQuestionService.java | 2 +- .../server/domain/entity/GroomingLevel.java | 18 +++++++++ .../domain/entity/GroomingTestQuestion.java | 4 +- .../security/SecurityConfig.java | 2 + .../answer/DeleteGroomingTestAnswerTest.java | 2 +- .../answer/SaveGroomingTestAnswerTest.java | 2 +- .../answer/UpdateGroomingTestAnswerTest.java | 2 +- .../DeleteGroomingTestQuestionTest.java | 2 +- .../UpdateGroomingTestQuestionTest.java | 2 +- 43 files changed, 473 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/DeleteGroomingLevelController.java create mode 100644 src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/SaveGroomingLevelController.java create mode 100644 src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/UpdateGroomingLevelController.java create mode 100644 src/main/java/com/ftm/server/adapter/in/web/grooming/dto/request/SaveGroomingLevelRequest.java create mode 100644 src/main/java/com/ftm/server/adapter/in/web/grooming/dto/request/UpdateGroomingLevelRequest.java create mode 100644 src/main/java/com/ftm/server/application/command/grooming/level/DeleteGroomingLevelCommand.java create mode 100644 src/main/java/com/ftm/server/application/command/grooming/level/SaveGroomingLevelCommand.java create mode 100644 src/main/java/com/ftm/server/application/command/grooming/level/UpdateGroomingLevelCommand.java rename src/main/java/com/ftm/server/application/command/grooming/{ => question}/DeleteGroomingTestQuestionCommand.java (84%) rename src/main/java/com/ftm/server/application/command/grooming/{ => question}/SaveGroomingTestQuestionCommand.java (90%) rename src/main/java/com/ftm/server/application/command/grooming/{ => question}/UpdateGroomingTestQuestionCommand.java (91%) create mode 100644 src/main/java/com/ftm/server/application/port/in/grooming/level/DeleteGroomingLevelUseCase.java create mode 100644 src/main/java/com/ftm/server/application/port/in/grooming/level/SaveGroomingLevelUseCase.java create mode 100644 src/main/java/com/ftm/server/application/port/in/grooming/level/UpdateGroomingLevelUseCase.java create mode 100644 src/main/java/com/ftm/server/application/port/out/persistence/grooming/DeleteGroomingLevelPort.java create mode 100644 src/main/java/com/ftm/server/application/port/out/persistence/grooming/SaveGroomingLevelPort.java create mode 100644 src/main/java/com/ftm/server/application/port/out/persistence/grooming/UpdateGroomingLevelPort.java create mode 100644 src/main/java/com/ftm/server/application/service/grooming/level/DeleteGroomingLevelService.java create mode 100644 src/main/java/com/ftm/server/application/service/grooming/level/SaveGroomingLevelService.java create mode 100644 src/main/java/com/ftm/server/application/service/grooming/level/UpdateGroomingLevelService.java diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/DeleteGroomingTestAnswerController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/DeleteGroomingTestAnswerController.java index b95c16d..b9f3308 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/DeleteGroomingTestAnswerController.java +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/DeleteGroomingTestAnswerController.java @@ -19,7 +19,9 @@ public class DeleteGroomingTestAnswerController { @DeleteMapping("/api/grooming/tests/answers/{answerId}") public ResponseEntity> deleteAnswer(@PathVariable Long answerId) { - deleteGroomingTestAnswerUseCase.execute(DeleteGroomingTestAnswerCommand.of(answerId)); + DeleteGroomingTestAnswerCommand command = DeleteGroomingTestAnswerCommand.of(answerId); + deleteGroomingTestAnswerUseCase.execute(command); + return ResponseEntity.status(HttpStatus.OK) .body(ApiResponse.success(SuccessResponseCode.OK)); } diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/SaveGroomingTestAnswerController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/SaveGroomingTestAnswerController.java index 34580f3..b5099a9 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/SaveGroomingTestAnswerController.java +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/SaveGroomingTestAnswerController.java @@ -24,9 +24,13 @@ public class SaveGroomingTestAnswerController { public ResponseEntity> saveAnswer( @PathVariable Long questionsId, @RequestBody @Valid SaveGroomingTestAnswerRequest request) { + SaveGroomingTestAnswerCommand command = + SaveGroomingTestAnswerCommand.of( + questionsId, request.getAnswer(), request.getScore()); saveGroomingTestAnswerUseCase.execute( SaveGroomingTestAnswerCommand.of( questionsId, request.getAnswer(), request.getScore())); + return ResponseEntity.status(HttpStatus.CREATED) .body(ApiResponse.success(SuccessResponseCode.CREATED)); } diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/UpdateGroomingTestAnswerController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/UpdateGroomingTestAnswerController.java index 1e631c7..387755e 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/UpdateGroomingTestAnswerController.java +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/answer/UpdateGroomingTestAnswerController.java @@ -22,12 +22,11 @@ public class UpdateGroomingTestAnswerController { @PatchMapping("/api/grooming/tests/answers/{answerId}") public ResponseEntity> updateAnswer( @PathVariable Long answerId, @RequestBody UpdateGroomingTestAnswerRequest request) { - updateGroomingTestAnswerUseCase.execute( + UpdateGroomingTestAnswerCommand command = UpdateGroomingTestAnswerCommand.of( - answerId, - request.getQuestionId(), - request.getAnswer(), - request.getScore())); + answerId, request.getQuestionId(), request.getAnswer(), request.getScore()); + updateGroomingTestAnswerUseCase.execute(command); + return ResponseEntity.status(HttpStatus.OK) .body(ApiResponse.success(SuccessResponseCode.OK)); } diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/DeleteGroomingLevelController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/DeleteGroomingLevelController.java new file mode 100644 index 0000000..dec1460 --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/DeleteGroomingLevelController.java @@ -0,0 +1,28 @@ +package com.ftm.server.adapter.in.web.grooming.controller.level; + +import com.ftm.server.application.command.grooming.level.DeleteGroomingLevelCommand; +import com.ftm.server.application.port.in.grooming.level.DeleteGroomingLevelUseCase; +import com.ftm.server.common.response.ApiResponse; +import com.ftm.server.common.response.enums.SuccessResponseCode; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class DeleteGroomingLevelController { + + private final DeleteGroomingLevelUseCase deleteGroomingLevelUseCase; + + @DeleteMapping("/api/grooming/levels/{levelId}") + public ResponseEntity> deleteGroomingLevel(@PathVariable Long levelId) { + DeleteGroomingLevelCommand command = DeleteGroomingLevelCommand.of(levelId); + deleteGroomingLevelUseCase.execute(command); + + return ResponseEntity.status(HttpStatus.OK) + .body(ApiResponse.success(SuccessResponseCode.OK)); + } +} diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/SaveGroomingLevelController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/SaveGroomingLevelController.java new file mode 100644 index 0000000..8ee7309 --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/SaveGroomingLevelController.java @@ -0,0 +1,36 @@ +package com.ftm.server.adapter.in.web.grooming.controller.level; + +import com.ftm.server.adapter.in.web.grooming.dto.request.SaveGroomingLevelRequest; +import com.ftm.server.application.command.grooming.level.SaveGroomingLevelCommand; +import com.ftm.server.application.port.in.grooming.level.SaveGroomingLevelUseCase; +import com.ftm.server.common.response.ApiResponse; +import com.ftm.server.common.response.enums.SuccessResponseCode; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class SaveGroomingLevelController { + + private final SaveGroomingLevelUseCase saveGroomingLevelUseCase; + + @PostMapping("/api/grooming/levels") + public ResponseEntity> saveGroomingLevel( + @RequestBody @Valid SaveGroomingLevelRequest request) { + SaveGroomingLevelCommand command = + SaveGroomingLevelCommand.of( + request.getMinScore(), + request.getMaxScore(), + request.getMildLevelName(), + request.getSpicyLevelName()); + saveGroomingLevelUseCase.execute(command); + + return ResponseEntity.status(HttpStatus.CREATED) + .body(ApiResponse.success(SuccessResponseCode.CREATED)); + } +} diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/UpdateGroomingLevelController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/UpdateGroomingLevelController.java new file mode 100644 index 0000000..809ac58 --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/level/UpdateGroomingLevelController.java @@ -0,0 +1,39 @@ +package com.ftm.server.adapter.in.web.grooming.controller.level; + +import com.ftm.server.adapter.in.web.grooming.dto.request.UpdateGroomingLevelRequest; +import com.ftm.server.application.command.grooming.level.UpdateGroomingLevelCommand; +import com.ftm.server.application.port.in.grooming.level.UpdateGroomingLevelUseCase; +import com.ftm.server.common.response.ApiResponse; +import com.ftm.server.common.response.enums.SuccessResponseCode; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class UpdateGroomingLevelController { + + private final UpdateGroomingLevelUseCase updateGroomingLevelUseCase; + + @PatchMapping("/api/grooming/levels/{levelId}") + public ResponseEntity> saveGroomingLevel( + @PathVariable Long levelId, @RequestBody @Valid UpdateGroomingLevelRequest request) { + + UpdateGroomingLevelCommand command = + UpdateGroomingLevelCommand.of( + levelId, + request.getMinScore(), + request.getMaxScore(), + request.getMildLevelName(), + request.getSpicyLevelName()); + updateGroomingLevelUseCase.execute(command); + + return ResponseEntity.status(HttpStatus.OK) + .body(ApiResponse.success(SuccessResponseCode.OK)); + } +} diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/DeleteGroomingTestQuestionController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/DeleteGroomingTestQuestionController.java index 81fbdb2..8900172 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/DeleteGroomingTestQuestionController.java +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/DeleteGroomingTestQuestionController.java @@ -1,6 +1,6 @@ package com.ftm.server.adapter.in.web.grooming.controller.question; -import com.ftm.server.application.command.grooming.DeleteGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.DeleteGroomingTestQuestionCommand; import com.ftm.server.application.port.in.grooming.question.DeleteGroomingTestQuestionUseCase; import com.ftm.server.common.response.ApiResponse; import com.ftm.server.common.response.enums.SuccessResponseCode; @@ -19,7 +19,10 @@ public class DeleteGroomingTestQuestionController { @DeleteMapping("/api/grooming/tests/questions/{questionId}") public ResponseEntity> deleteQuestion(@PathVariable Long questionId) { + DeleteGroomingTestQuestionCommand command = + DeleteGroomingTestQuestionCommand.of(questionId); deleteGroomingTestQuestionUseCase.execute(DeleteGroomingTestQuestionCommand.of(questionId)); + return ResponseEntity.status(HttpStatus.OK) .body(ApiResponse.success(SuccessResponseCode.OK)); } diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/SaveGroomingTestQuestionController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/SaveGroomingTestQuestionController.java index 596d552..c43da63 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/SaveGroomingTestQuestionController.java +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/SaveGroomingTestQuestionController.java @@ -1,7 +1,7 @@ package com.ftm.server.adapter.in.web.grooming.controller.question; import com.ftm.server.adapter.in.web.grooming.dto.request.SaveGroomingTestQuestionRequest; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; import com.ftm.server.application.port.in.grooming.question.SaveGroomingTestQuestionUseCase; import com.ftm.server.common.response.ApiResponse; import com.ftm.server.common.response.enums.SuccessResponseCode; @@ -22,9 +22,11 @@ public class SaveGroomingTestQuestionController { @PostMapping("/api/grooming/tests/questions") public ResponseEntity> saveQuestion( @RequestBody @Valid SaveGroomingTestQuestionRequest request) { - saveGroomingTestQuestionUseCase.execute( + SaveGroomingTestQuestionCommand command = SaveGroomingTestQuestionCommand.of( - request.getGroomingCategory(), request.getQuestion())); + request.getGroomingCategory(), request.getQuestion()); + saveGroomingTestQuestionUseCase.execute(command); + return ResponseEntity.status(HttpStatus.CREATED) .body(ApiResponse.success(SuccessResponseCode.CREATED)); } diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/UpdateGroomingTestQuestionController.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/UpdateGroomingTestQuestionController.java index 9e73559..01471f8 100644 --- a/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/UpdateGroomingTestQuestionController.java +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/controller/question/UpdateGroomingTestQuestionController.java @@ -1,7 +1,7 @@ package com.ftm.server.adapter.in.web.grooming.controller.question; import com.ftm.server.adapter.in.web.grooming.dto.request.UpdateGroomingTestQuestionRequest; -import com.ftm.server.application.command.grooming.UpdateGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.UpdateGroomingTestQuestionCommand; import com.ftm.server.application.port.in.grooming.question.UpdateGroomingTestQuestionUseCase; import com.ftm.server.common.response.ApiResponse; import com.ftm.server.common.response.enums.SuccessResponseCode; @@ -22,9 +22,11 @@ public class UpdateGroomingTestQuestionController { @PatchMapping("/api/grooming/tests/questions/{questionId}") public ResponseEntity> updateQuestion( @PathVariable Long questionId, @RequestBody UpdateGroomingTestQuestionRequest request) { - updateGroomingTestQuestionUseCase.execute( + UpdateGroomingTestQuestionCommand command = UpdateGroomingTestQuestionCommand.of( - questionId, request.getGroomingCategory(), request.getQuestion())); + questionId, request.getGroomingCategory(), request.getQuestion()); + updateGroomingTestQuestionUseCase.execute(command); + return ResponseEntity.status(HttpStatus.OK) .body(ApiResponse.success(SuccessResponseCode.OK)); } diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/dto/request/SaveGroomingLevelRequest.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/dto/request/SaveGroomingLevelRequest.java new file mode 100644 index 0000000..2a8fc17 --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/dto/request/SaveGroomingLevelRequest.java @@ -0,0 +1,23 @@ +package com.ftm.server.adapter.in.web.grooming.dto.request; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotEmpty; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class SaveGroomingLevelRequest { + + @Min(0) + @Max(100) + private Integer minScore; + + @Min(0) + @Max(100) + private Integer maxScore; + + @NotEmpty private String mildLevelName; + @NotEmpty private String spicyLevelName; +} diff --git a/src/main/java/com/ftm/server/adapter/in/web/grooming/dto/request/UpdateGroomingLevelRequest.java b/src/main/java/com/ftm/server/adapter/in/web/grooming/dto/request/UpdateGroomingLevelRequest.java new file mode 100644 index 0000000..7a69546 --- /dev/null +++ b/src/main/java/com/ftm/server/adapter/in/web/grooming/dto/request/UpdateGroomingLevelRequest.java @@ -0,0 +1,22 @@ +package com.ftm.server.adapter.in.web.grooming.dto.request; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class UpdateGroomingLevelRequest { + + @Min(0) + @Max(100) + private Integer minScore; + + @Min(0) + @Max(100) + private Integer maxScore; + + private String mildLevelName; + private String spicyLevelName; +} diff --git a/src/main/java/com/ftm/server/adapter/out/persistence/adapter/grooming/GroomingDomainPersistenceAdapter.java b/src/main/java/com/ftm/server/adapter/out/persistence/adapter/grooming/GroomingDomainPersistenceAdapter.java index 8524ddc..e0c20b4 100644 --- a/src/main/java/com/ftm/server/adapter/out/persistence/adapter/grooming/GroomingDomainPersistenceAdapter.java +++ b/src/main/java/com/ftm/server/adapter/out/persistence/adapter/grooming/GroomingDomainPersistenceAdapter.java @@ -35,7 +35,10 @@ public class GroomingDomainPersistenceAdapter DeleteGroomingTestQuestionPort, DeleteGroomingTestAnswerPort, SaveGroomingTestAnswerPort, - UpdateGroomingTestAnswerPort { + UpdateGroomingTestAnswerPort, + SaveGroomingLevelPort, + UpdateGroomingLevelPort, + DeleteGroomingLevelPort { // Repository private final GroomingTestQuestionRepository groomingTestQuestionRepository; @@ -116,6 +119,13 @@ public Optional loadGroomingLevelByScore(FIndGroomingLevelByScore .map(groomingLevelMapper::toDomainEntity); } + @Override + public Optional loadGroomingLevelById(FindByIdQuery query) { + return groomingLevelRepository + .findById(query.getId()) + .map(groomingLevelMapper::toDomainEntity); + } + @Override public void updateUserGroomingStatus(User user) { UserJpaEntity userJpaEntity = @@ -239,4 +249,27 @@ public void updateGroomingTestAnswer( // 질문 정보를 제외한 나머지 필드 수정 groomingTestAnswerJpaEntity.updateGroomingTestAnswerForDomainEntity(groomingTestAnswer); } + + @Override + public void saveGroomingLevel(GroomingLevel groomingLevel) { + groomingLevelRepository.save(groomingLevelMapper.toJpaEntity(groomingLevel)); + } + + @Override + public void updateGroomingLevel(GroomingLevel groomingLevel) { + GroomingLevelJpaEntity groomingLevelJpaEntity = + groomingLevelRepository + .findById(groomingLevel.getId()) + .orElseThrow( + () -> + new CustomException( + ErrorResponseCode.GROOMING_LEVEL_NOT_FOUND)); + + groomingLevelJpaEntity.updateGroomingLevelForDomainEntity(groomingLevel); + } + + @Override + public void deleteGroomingLevel(Long id) { + groomingLevelRepository.deleteById(id); + } } diff --git a/src/main/java/com/ftm/server/adapter/out/persistence/model/GroomingLevelJpaEntity.java b/src/main/java/com/ftm/server/adapter/out/persistence/model/GroomingLevelJpaEntity.java index 0fc09d6..8bd00e2 100644 --- a/src/main/java/com/ftm/server/adapter/out/persistence/model/GroomingLevelJpaEntity.java +++ b/src/main/java/com/ftm/server/adapter/out/persistence/model/GroomingLevelJpaEntity.java @@ -36,4 +36,11 @@ public static GroomingLevelJpaEntity from(GroomingLevel groomingLevel) { .spicyLevelName(groomingLevel.getSpicyLevelName()) .build(); } + + public void updateGroomingLevelForDomainEntity(GroomingLevel groomingLevel) { + this.minScore = groomingLevel.getMinScore(); + this.maxScore = groomingLevel.getMaxScore(); + this.mildLevelName = groomingLevel.getMildLevelName(); + this.spicyLevelName = groomingLevel.getSpicyLevelName(); + } } diff --git a/src/main/java/com/ftm/server/application/command/grooming/level/DeleteGroomingLevelCommand.java b/src/main/java/com/ftm/server/application/command/grooming/level/DeleteGroomingLevelCommand.java new file mode 100644 index 0000000..f2c53e7 --- /dev/null +++ b/src/main/java/com/ftm/server/application/command/grooming/level/DeleteGroomingLevelCommand.java @@ -0,0 +1,17 @@ +package com.ftm.server.application.command.grooming.level; + +import lombok.Getter; + +@Getter +public class DeleteGroomingLevelCommand { + + private final Long id; + + private DeleteGroomingLevelCommand(Long id) { + this.id = id; + } + + public static DeleteGroomingLevelCommand of(Long id) { + return new DeleteGroomingLevelCommand(id); + } +} diff --git a/src/main/java/com/ftm/server/application/command/grooming/level/SaveGroomingLevelCommand.java b/src/main/java/com/ftm/server/application/command/grooming/level/SaveGroomingLevelCommand.java new file mode 100644 index 0000000..7f3e3c3 --- /dev/null +++ b/src/main/java/com/ftm/server/application/command/grooming/level/SaveGroomingLevelCommand.java @@ -0,0 +1,25 @@ +package com.ftm.server.application.command.grooming.level; + +import lombok.Getter; + +@Getter +public class SaveGroomingLevelCommand { + + private final Integer minScore; + private final Integer maxScore; + private final String mildLevelName; + private final String spicyLevelName; + + private SaveGroomingLevelCommand( + Integer minScore, Integer maxScore, String mildLevelName, String spicyLevelName) { + this.minScore = minScore; + this.maxScore = maxScore; + this.mildLevelName = mildLevelName; + this.spicyLevelName = spicyLevelName; + } + + public static SaveGroomingLevelCommand of( + Integer minScore, Integer maxScore, String mildLevelName, String spicyLevelName) { + return new SaveGroomingLevelCommand(minScore, maxScore, mildLevelName, spicyLevelName); + } +} diff --git a/src/main/java/com/ftm/server/application/command/grooming/level/UpdateGroomingLevelCommand.java b/src/main/java/com/ftm/server/application/command/grooming/level/UpdateGroomingLevelCommand.java new file mode 100644 index 0000000..812eb3a --- /dev/null +++ b/src/main/java/com/ftm/server/application/command/grooming/level/UpdateGroomingLevelCommand.java @@ -0,0 +1,36 @@ +package com.ftm.server.application.command.grooming.level; + +import lombok.Getter; + +@Getter +public class UpdateGroomingLevelCommand { + + private final Long id; + private final Integer minScore; + private final Integer maxScore; + private final String mildLevelName; + private final String spicyLevelName; + + private UpdateGroomingLevelCommand( + Long id, + Integer minScore, + Integer maxScore, + String mildLevelName, + String spicyLevelName) { + this.id = id; + this.minScore = minScore; + this.maxScore = maxScore; + this.mildLevelName = mildLevelName; + this.spicyLevelName = spicyLevelName; + } + + public static UpdateGroomingLevelCommand of( + Long id, + Integer minScore, + Integer maxScore, + String mildLevelName, + String spicyLevelName) { + return new UpdateGroomingLevelCommand( + id, minScore, maxScore, mildLevelName, spicyLevelName); + } +} diff --git a/src/main/java/com/ftm/server/application/command/grooming/DeleteGroomingTestQuestionCommand.java b/src/main/java/com/ftm/server/application/command/grooming/question/DeleteGroomingTestQuestionCommand.java similarity index 84% rename from src/main/java/com/ftm/server/application/command/grooming/DeleteGroomingTestQuestionCommand.java rename to src/main/java/com/ftm/server/application/command/grooming/question/DeleteGroomingTestQuestionCommand.java index 5c12c6e..6a13a46 100644 --- a/src/main/java/com/ftm/server/application/command/grooming/DeleteGroomingTestQuestionCommand.java +++ b/src/main/java/com/ftm/server/application/command/grooming/question/DeleteGroomingTestQuestionCommand.java @@ -1,4 +1,4 @@ -package com.ftm.server.application.command.grooming; +package com.ftm.server.application.command.grooming.question; import lombok.Getter; diff --git a/src/main/java/com/ftm/server/application/command/grooming/SaveGroomingTestQuestionCommand.java b/src/main/java/com/ftm/server/application/command/grooming/question/SaveGroomingTestQuestionCommand.java similarity index 90% rename from src/main/java/com/ftm/server/application/command/grooming/SaveGroomingTestQuestionCommand.java rename to src/main/java/com/ftm/server/application/command/grooming/question/SaveGroomingTestQuestionCommand.java index 3399030..99f7c53 100644 --- a/src/main/java/com/ftm/server/application/command/grooming/SaveGroomingTestQuestionCommand.java +++ b/src/main/java/com/ftm/server/application/command/grooming/question/SaveGroomingTestQuestionCommand.java @@ -1,4 +1,4 @@ -package com.ftm.server.application.command.grooming; +package com.ftm.server.application.command.grooming.question; import com.ftm.server.domain.enums.GroomingCategory; import lombok.Getter; diff --git a/src/main/java/com/ftm/server/application/command/grooming/UpdateGroomingTestQuestionCommand.java b/src/main/java/com/ftm/server/application/command/grooming/question/UpdateGroomingTestQuestionCommand.java similarity index 91% rename from src/main/java/com/ftm/server/application/command/grooming/UpdateGroomingTestQuestionCommand.java rename to src/main/java/com/ftm/server/application/command/grooming/question/UpdateGroomingTestQuestionCommand.java index 6e037ac..98e8086 100644 --- a/src/main/java/com/ftm/server/application/command/grooming/UpdateGroomingTestQuestionCommand.java +++ b/src/main/java/com/ftm/server/application/command/grooming/question/UpdateGroomingTestQuestionCommand.java @@ -1,4 +1,4 @@ -package com.ftm.server.application.command.grooming; +package com.ftm.server.application.command.grooming.question; import com.ftm.server.domain.enums.GroomingCategory; import lombok.Getter; diff --git a/src/main/java/com/ftm/server/application/port/in/grooming/level/DeleteGroomingLevelUseCase.java b/src/main/java/com/ftm/server/application/port/in/grooming/level/DeleteGroomingLevelUseCase.java new file mode 100644 index 0000000..8539a97 --- /dev/null +++ b/src/main/java/com/ftm/server/application/port/in/grooming/level/DeleteGroomingLevelUseCase.java @@ -0,0 +1,10 @@ +package com.ftm.server.application.port.in.grooming.level; + +import com.ftm.server.application.command.grooming.level.DeleteGroomingLevelCommand; +import com.ftm.server.common.annotation.UseCase; + +@UseCase +public interface DeleteGroomingLevelUseCase { + + void execute(DeleteGroomingLevelCommand command); +} diff --git a/src/main/java/com/ftm/server/application/port/in/grooming/level/SaveGroomingLevelUseCase.java b/src/main/java/com/ftm/server/application/port/in/grooming/level/SaveGroomingLevelUseCase.java new file mode 100644 index 0000000..c069e5b --- /dev/null +++ b/src/main/java/com/ftm/server/application/port/in/grooming/level/SaveGroomingLevelUseCase.java @@ -0,0 +1,10 @@ +package com.ftm.server.application.port.in.grooming.level; + +import com.ftm.server.application.command.grooming.level.SaveGroomingLevelCommand; +import com.ftm.server.common.annotation.UseCase; + +@UseCase +public interface SaveGroomingLevelUseCase { + + void execute(SaveGroomingLevelCommand command); +} diff --git a/src/main/java/com/ftm/server/application/port/in/grooming/level/UpdateGroomingLevelUseCase.java b/src/main/java/com/ftm/server/application/port/in/grooming/level/UpdateGroomingLevelUseCase.java new file mode 100644 index 0000000..7bd7af7 --- /dev/null +++ b/src/main/java/com/ftm/server/application/port/in/grooming/level/UpdateGroomingLevelUseCase.java @@ -0,0 +1,10 @@ +package com.ftm.server.application.port.in.grooming.level; + +import com.ftm.server.application.command.grooming.level.UpdateGroomingLevelCommand; +import com.ftm.server.common.annotation.UseCase; + +@UseCase +public interface UpdateGroomingLevelUseCase { + + void execute(UpdateGroomingLevelCommand command); +} diff --git a/src/main/java/com/ftm/server/application/port/in/grooming/question/DeleteGroomingTestQuestionUseCase.java b/src/main/java/com/ftm/server/application/port/in/grooming/question/DeleteGroomingTestQuestionUseCase.java index f0e9044..07fe336 100644 --- a/src/main/java/com/ftm/server/application/port/in/grooming/question/DeleteGroomingTestQuestionUseCase.java +++ b/src/main/java/com/ftm/server/application/port/in/grooming/question/DeleteGroomingTestQuestionUseCase.java @@ -1,6 +1,6 @@ package com.ftm.server.application.port.in.grooming.question; -import com.ftm.server.application.command.grooming.DeleteGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.DeleteGroomingTestQuestionCommand; import com.ftm.server.common.annotation.UseCase; @UseCase diff --git a/src/main/java/com/ftm/server/application/port/in/grooming/question/SaveGroomingTestQuestionUseCase.java b/src/main/java/com/ftm/server/application/port/in/grooming/question/SaveGroomingTestQuestionUseCase.java index f3a03d9..464c5bd 100644 --- a/src/main/java/com/ftm/server/application/port/in/grooming/question/SaveGroomingTestQuestionUseCase.java +++ b/src/main/java/com/ftm/server/application/port/in/grooming/question/SaveGroomingTestQuestionUseCase.java @@ -1,6 +1,6 @@ package com.ftm.server.application.port.in.grooming.question; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; import com.ftm.server.common.annotation.UseCase; @UseCase diff --git a/src/main/java/com/ftm/server/application/port/in/grooming/question/UpdateGroomingTestQuestionUseCase.java b/src/main/java/com/ftm/server/application/port/in/grooming/question/UpdateGroomingTestQuestionUseCase.java index ed89b11..688a245 100644 --- a/src/main/java/com/ftm/server/application/port/in/grooming/question/UpdateGroomingTestQuestionUseCase.java +++ b/src/main/java/com/ftm/server/application/port/in/grooming/question/UpdateGroomingTestQuestionUseCase.java @@ -1,6 +1,6 @@ package com.ftm.server.application.port.in.grooming.question; -import com.ftm.server.application.command.grooming.UpdateGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.UpdateGroomingTestQuestionCommand; import com.ftm.server.common.annotation.UseCase; @UseCase diff --git a/src/main/java/com/ftm/server/application/port/out/persistence/grooming/DeleteGroomingLevelPort.java b/src/main/java/com/ftm/server/application/port/out/persistence/grooming/DeleteGroomingLevelPort.java new file mode 100644 index 0000000..0f312b8 --- /dev/null +++ b/src/main/java/com/ftm/server/application/port/out/persistence/grooming/DeleteGroomingLevelPort.java @@ -0,0 +1,9 @@ +package com.ftm.server.application.port.out.persistence.grooming; + +import com.ftm.server.common.annotation.Port; + +@Port +public interface DeleteGroomingLevelPort { + + void deleteGroomingLevel(Long id); +} diff --git a/src/main/java/com/ftm/server/application/port/out/persistence/grooming/LoadGroomingLevelPort.java b/src/main/java/com/ftm/server/application/port/out/persistence/grooming/LoadGroomingLevelPort.java index 2333107..fe77c52 100644 --- a/src/main/java/com/ftm/server/application/port/out/persistence/grooming/LoadGroomingLevelPort.java +++ b/src/main/java/com/ftm/server/application/port/out/persistence/grooming/LoadGroomingLevelPort.java @@ -1,6 +1,7 @@ package com.ftm.server.application.port.out.persistence.grooming; import com.ftm.server.application.query.FIndGroomingLevelByScoreQuery; +import com.ftm.server.application.query.FindByIdQuery; import com.ftm.server.common.annotation.Port; import com.ftm.server.domain.entity.GroomingLevel; import java.util.Optional; @@ -9,4 +10,6 @@ public interface LoadGroomingLevelPort { Optional loadGroomingLevelByScore(FIndGroomingLevelByScoreQuery query); + + Optional loadGroomingLevelById(FindByIdQuery query); } diff --git a/src/main/java/com/ftm/server/application/port/out/persistence/grooming/SaveGroomingLevelPort.java b/src/main/java/com/ftm/server/application/port/out/persistence/grooming/SaveGroomingLevelPort.java new file mode 100644 index 0000000..b4a2168 --- /dev/null +++ b/src/main/java/com/ftm/server/application/port/out/persistence/grooming/SaveGroomingLevelPort.java @@ -0,0 +1,10 @@ +package com.ftm.server.application.port.out.persistence.grooming; + +import com.ftm.server.common.annotation.Port; +import com.ftm.server.domain.entity.GroomingLevel; + +@Port +public interface SaveGroomingLevelPort { + + void saveGroomingLevel(GroomingLevel groomingLevel); +} diff --git a/src/main/java/com/ftm/server/application/port/out/persistence/grooming/UpdateGroomingLevelPort.java b/src/main/java/com/ftm/server/application/port/out/persistence/grooming/UpdateGroomingLevelPort.java new file mode 100644 index 0000000..b654481 --- /dev/null +++ b/src/main/java/com/ftm/server/application/port/out/persistence/grooming/UpdateGroomingLevelPort.java @@ -0,0 +1,10 @@ +package com.ftm.server.application.port.out.persistence.grooming; + +import com.ftm.server.common.annotation.Port; +import com.ftm.server.domain.entity.GroomingLevel; + +@Port +public interface UpdateGroomingLevelPort { + + void updateGroomingLevel(GroomingLevel groomingLevel); +} diff --git a/src/main/java/com/ftm/server/application/service/grooming/level/DeleteGroomingLevelService.java b/src/main/java/com/ftm/server/application/service/grooming/level/DeleteGroomingLevelService.java new file mode 100644 index 0000000..950cd88 --- /dev/null +++ b/src/main/java/com/ftm/server/application/service/grooming/level/DeleteGroomingLevelService.java @@ -0,0 +1,21 @@ +package com.ftm.server.application.service.grooming.level; + +import com.ftm.server.application.command.grooming.level.DeleteGroomingLevelCommand; +import com.ftm.server.application.port.in.grooming.level.DeleteGroomingLevelUseCase; +import com.ftm.server.application.port.out.persistence.grooming.DeleteGroomingLevelPort; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class DeleteGroomingLevelService implements DeleteGroomingLevelUseCase { + + private final DeleteGroomingLevelPort deleteGroomingLevelPort; + + @Override + public void execute(DeleteGroomingLevelCommand command) { + + // 레벨 삭제 + deleteGroomingLevelPort.deleteGroomingLevel(command.getId()); + } +} diff --git a/src/main/java/com/ftm/server/application/service/grooming/level/SaveGroomingLevelService.java b/src/main/java/com/ftm/server/application/service/grooming/level/SaveGroomingLevelService.java new file mode 100644 index 0000000..37a33ae --- /dev/null +++ b/src/main/java/com/ftm/server/application/service/grooming/level/SaveGroomingLevelService.java @@ -0,0 +1,25 @@ +package com.ftm.server.application.service.grooming.level; + +import com.ftm.server.application.command.grooming.level.SaveGroomingLevelCommand; +import com.ftm.server.application.port.in.grooming.level.SaveGroomingLevelUseCase; +import com.ftm.server.application.port.out.persistence.grooming.SaveGroomingLevelPort; +import com.ftm.server.domain.entity.GroomingLevel; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class SaveGroomingLevelService implements SaveGroomingLevelUseCase { + + private final SaveGroomingLevelPort saveGroomingLevelPort; + + @Transactional + @Override + public void execute(SaveGroomingLevelCommand command) { + GroomingLevel groomingLevel = GroomingLevel.create(command); + + // 그루밍 레벨 저장 + saveGroomingLevelPort.saveGroomingLevel(groomingLevel); + } +} diff --git a/src/main/java/com/ftm/server/application/service/grooming/level/UpdateGroomingLevelService.java b/src/main/java/com/ftm/server/application/service/grooming/level/UpdateGroomingLevelService.java new file mode 100644 index 0000000..6271f54 --- /dev/null +++ b/src/main/java/com/ftm/server/application/service/grooming/level/UpdateGroomingLevelService.java @@ -0,0 +1,37 @@ +package com.ftm.server.application.service.grooming.level; + +import com.ftm.server.application.command.grooming.level.UpdateGroomingLevelCommand; +import com.ftm.server.application.port.in.grooming.level.UpdateGroomingLevelUseCase; +import com.ftm.server.application.port.out.persistence.grooming.LoadGroomingLevelPort; +import com.ftm.server.application.port.out.persistence.grooming.UpdateGroomingLevelPort; +import com.ftm.server.application.query.FindByIdQuery; +import com.ftm.server.common.exception.CustomException; +import com.ftm.server.common.response.enums.ErrorResponseCode; +import com.ftm.server.domain.entity.GroomingLevel; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class UpdateGroomingLevelService implements UpdateGroomingLevelUseCase { + + private final LoadGroomingLevelPort loadGroomingLevelPort; + private final UpdateGroomingLevelPort updateGroomingLevelPort; + + @Transactional + @Override + public void execute(UpdateGroomingLevelCommand command) { + GroomingLevel groomingLevel = + loadGroomingLevelPort + .loadGroomingLevelById(FindByIdQuery.of(command.getId())) + .orElseThrow( + () -> + new CustomException( + ErrorResponseCode.GROOMING_LEVEL_NOT_FOUND)); + + // 그루밍 레벨 수정 + groomingLevel.update(command); + updateGroomingLevelPort.updateGroomingLevel(groomingLevel); + } +} diff --git a/src/main/java/com/ftm/server/application/service/grooming/question/DeleteGroomingTestQuestionService.java b/src/main/java/com/ftm/server/application/service/grooming/question/DeleteGroomingTestQuestionService.java index ff91e56..f4a1563 100644 --- a/src/main/java/com/ftm/server/application/service/grooming/question/DeleteGroomingTestQuestionService.java +++ b/src/main/java/com/ftm/server/application/service/grooming/question/DeleteGroomingTestQuestionService.java @@ -1,6 +1,6 @@ package com.ftm.server.application.service.grooming.question; -import com.ftm.server.application.command.grooming.DeleteGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.DeleteGroomingTestQuestionCommand; import com.ftm.server.application.port.in.grooming.question.DeleteGroomingTestQuestionUseCase; import com.ftm.server.application.port.out.cache.InvalidGroomingTestsWithCachePort; import com.ftm.server.application.port.out.persistence.grooming.DeleteGroomingTestAnswerPort; diff --git a/src/main/java/com/ftm/server/application/service/grooming/question/SaveGroomingTestQuestionService.java b/src/main/java/com/ftm/server/application/service/grooming/question/SaveGroomingTestQuestionService.java index 0758540..89fb68b 100644 --- a/src/main/java/com/ftm/server/application/service/grooming/question/SaveGroomingTestQuestionService.java +++ b/src/main/java/com/ftm/server/application/service/grooming/question/SaveGroomingTestQuestionService.java @@ -1,6 +1,6 @@ package com.ftm.server.application.service.grooming.question; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; import com.ftm.server.application.port.in.grooming.question.SaveGroomingTestQuestionUseCase; import com.ftm.server.application.port.out.cache.InvalidGroomingTestsWithCachePort; import com.ftm.server.application.port.out.persistence.grooming.SaveGroomingTestQuestionPort; diff --git a/src/main/java/com/ftm/server/application/service/grooming/question/UpdateGroomingTestQuestionService.java b/src/main/java/com/ftm/server/application/service/grooming/question/UpdateGroomingTestQuestionService.java index 767ddc4..99f211c 100644 --- a/src/main/java/com/ftm/server/application/service/grooming/question/UpdateGroomingTestQuestionService.java +++ b/src/main/java/com/ftm/server/application/service/grooming/question/UpdateGroomingTestQuestionService.java @@ -1,6 +1,6 @@ package com.ftm.server.application.service.grooming.question; -import com.ftm.server.application.command.grooming.UpdateGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.UpdateGroomingTestQuestionCommand; import com.ftm.server.application.port.in.grooming.question.UpdateGroomingTestQuestionUseCase; import com.ftm.server.application.port.out.cache.InvalidGroomingTestsWithCachePort; import com.ftm.server.application.port.out.persistence.grooming.LoadGroomingTestQuestionPort; diff --git a/src/main/java/com/ftm/server/domain/entity/GroomingLevel.java b/src/main/java/com/ftm/server/domain/entity/GroomingLevel.java index ac1009b..3b794f2 100644 --- a/src/main/java/com/ftm/server/domain/entity/GroomingLevel.java +++ b/src/main/java/com/ftm/server/domain/entity/GroomingLevel.java @@ -1,5 +1,7 @@ package com.ftm.server.domain.entity; +import com.ftm.server.application.command.grooming.level.SaveGroomingLevelCommand; +import com.ftm.server.application.command.grooming.level.UpdateGroomingLevelCommand; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Builder; @@ -52,4 +54,20 @@ public static GroomingLevel of( .updatedAt(updatedAt) .build(); } + + public static GroomingLevel create(SaveGroomingLevelCommand command) { + return GroomingLevel.builder() + .minScore(command.getMinScore()) + .maxScore(command.getMaxScore()) + .mildLevelName(command.getMildLevelName()) + .spicyLevelName(command.getSpicyLevelName()) + .build(); + } + + public void update(UpdateGroomingLevelCommand command) { + if (command.getMinScore() != null) this.minScore = command.getMinScore(); + if (command.getMaxScore() != null) this.maxScore = command.getMaxScore(); + if (command.getMildLevelName() != null) this.mildLevelName = command.getMildLevelName(); + if (command.getSpicyLevelName() != null) this.spicyLevelName = command.getSpicyLevelName(); + } } diff --git a/src/main/java/com/ftm/server/domain/entity/GroomingTestQuestion.java b/src/main/java/com/ftm/server/domain/entity/GroomingTestQuestion.java index eaab04d..719b8a4 100644 --- a/src/main/java/com/ftm/server/domain/entity/GroomingTestQuestion.java +++ b/src/main/java/com/ftm/server/domain/entity/GroomingTestQuestion.java @@ -1,7 +1,7 @@ package com.ftm.server.domain.entity; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; -import com.ftm.server.application.command.grooming.UpdateGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.UpdateGroomingTestQuestionCommand; import com.ftm.server.domain.enums.GroomingCategory; import java.time.LocalDateTime; import lombok.AccessLevel; diff --git a/src/main/java/com/ftm/server/infrastructure/security/SecurityConfig.java b/src/main/java/com/ftm/server/infrastructure/security/SecurityConfig.java index f05a791..16ccdd2 100644 --- a/src/main/java/com/ftm/server/infrastructure/security/SecurityConfig.java +++ b/src/main/java/com/ftm/server/infrastructure/security/SecurityConfig.java @@ -121,6 +121,8 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .requestMatchers("/api/grooming/tests/questions/**") .hasRole(UserRole.ADMIN.name()) .requestMatchers("/api/grooming/tests/answers/**") + .hasRole(UserRole.ADMIN.name()) + .requestMatchers("/api/grooming/levels/**") .hasRole(UserRole.ADMIN.name()); // 그 외 모든 요청은 인증 필요 diff --git a/src/test/java/com/ftm/server/grooming/answer/DeleteGroomingTestAnswerTest.java b/src/test/java/com/ftm/server/grooming/answer/DeleteGroomingTestAnswerTest.java index 3550a3d..069d4b1 100644 --- a/src/test/java/com/ftm/server/grooming/answer/DeleteGroomingTestAnswerTest.java +++ b/src/test/java/com/ftm/server/grooming/answer/DeleteGroomingTestAnswerTest.java @@ -9,8 +9,8 @@ import com.ftm.server.adapter.out.persistence.model.GroomingTestQuestionJpaEntity; import com.ftm.server.adapter.out.persistence.repository.GroomingTestAnswerRepository; import com.ftm.server.adapter.out.persistence.repository.GroomingTestQuestionRepository; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; import com.ftm.server.application.command.grooming.answer.SaveGroomingTestAnswerCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.GroomingTestAnswer; import com.ftm.server.domain.entity.GroomingTestQuestion; diff --git a/src/test/java/com/ftm/server/grooming/answer/SaveGroomingTestAnswerTest.java b/src/test/java/com/ftm/server/grooming/answer/SaveGroomingTestAnswerTest.java index 1909a03..9765520 100644 --- a/src/test/java/com/ftm/server/grooming/answer/SaveGroomingTestAnswerTest.java +++ b/src/test/java/com/ftm/server/grooming/answer/SaveGroomingTestAnswerTest.java @@ -8,7 +8,7 @@ import com.ftm.server.adapter.in.web.grooming.dto.request.SaveGroomingTestAnswerRequest; import com.ftm.server.adapter.out.persistence.mapper.GroomingTestQuestionMapper; import com.ftm.server.adapter.out.persistence.repository.GroomingTestQuestionRepository; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.GroomingTestQuestion; import com.ftm.server.domain.enums.GroomingCategory; diff --git a/src/test/java/com/ftm/server/grooming/answer/UpdateGroomingTestAnswerTest.java b/src/test/java/com/ftm/server/grooming/answer/UpdateGroomingTestAnswerTest.java index 52e111b..f28735b 100644 --- a/src/test/java/com/ftm/server/grooming/answer/UpdateGroomingTestAnswerTest.java +++ b/src/test/java/com/ftm/server/grooming/answer/UpdateGroomingTestAnswerTest.java @@ -11,8 +11,8 @@ import com.ftm.server.adapter.out.persistence.model.GroomingTestQuestionJpaEntity; import com.ftm.server.adapter.out.persistence.repository.GroomingTestAnswerRepository; import com.ftm.server.adapter.out.persistence.repository.GroomingTestQuestionRepository; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; import com.ftm.server.application.command.grooming.answer.SaveGroomingTestAnswerCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.GroomingTestAnswer; import com.ftm.server.domain.entity.GroomingTestQuestion; diff --git a/src/test/java/com/ftm/server/grooming/question/DeleteGroomingTestQuestionTest.java b/src/test/java/com/ftm/server/grooming/question/DeleteGroomingTestQuestionTest.java index dd1e19b..71c9481 100644 --- a/src/test/java/com/ftm/server/grooming/question/DeleteGroomingTestQuestionTest.java +++ b/src/test/java/com/ftm/server/grooming/question/DeleteGroomingTestQuestionTest.java @@ -6,7 +6,7 @@ import com.ftm.server.BaseTest; import com.ftm.server.adapter.out.persistence.mapper.GroomingTestQuestionMapper; import com.ftm.server.adapter.out.persistence.repository.GroomingTestQuestionRepository; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.GroomingTestQuestion; import com.ftm.server.domain.enums.GroomingCategory; diff --git a/src/test/java/com/ftm/server/grooming/question/UpdateGroomingTestQuestionTest.java b/src/test/java/com/ftm/server/grooming/question/UpdateGroomingTestQuestionTest.java index 2c5158a..61f4513 100644 --- a/src/test/java/com/ftm/server/grooming/question/UpdateGroomingTestQuestionTest.java +++ b/src/test/java/com/ftm/server/grooming/question/UpdateGroomingTestQuestionTest.java @@ -8,7 +8,7 @@ import com.ftm.server.adapter.in.web.grooming.dto.request.UpdateGroomingTestQuestionRequest; import com.ftm.server.adapter.out.persistence.mapper.GroomingTestQuestionMapper; import com.ftm.server.adapter.out.persistence.repository.GroomingTestQuestionRepository; -import com.ftm.server.application.command.grooming.SaveGroomingTestQuestionCommand; +import com.ftm.server.application.command.grooming.question.SaveGroomingTestQuestionCommand; import com.ftm.server.common.response.enums.ErrorResponseCode; import com.ftm.server.domain.entity.GroomingTestQuestion; import com.ftm.server.domain.enums.GroomingCategory; From f0b73d18910338a1ac1c13c6dc7acb3dac75f5df Mon Sep 17 00:00:00 2001 From: songhyeonpk Date: Sat, 31 May 2025 13:25:22 +0900 Subject: [PATCH 2/2] =?UTF-8?q?test:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EA=B7=B8=EB=A3=A8=EB=B0=8D=20=EB=A0=88=EB=B2=A8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20=EC=88=98=EC=A0=95,=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../level/DeleteGroomingLevelTest.java | 63 ++++++++++++ .../grooming/level/SaveGroomingLevelTest.java | 79 +++++++++++++++ .../level/UpdateGroomingLevelTest.java | 96 +++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 src/test/java/com/ftm/server/grooming/level/DeleteGroomingLevelTest.java create mode 100644 src/test/java/com/ftm/server/grooming/level/SaveGroomingLevelTest.java create mode 100644 src/test/java/com/ftm/server/grooming/level/UpdateGroomingLevelTest.java diff --git a/src/test/java/com/ftm/server/grooming/level/DeleteGroomingLevelTest.java b/src/test/java/com/ftm/server/grooming/level/DeleteGroomingLevelTest.java new file mode 100644 index 0000000..5893bc5 --- /dev/null +++ b/src/test/java/com/ftm/server/grooming/level/DeleteGroomingLevelTest.java @@ -0,0 +1,63 @@ +package com.ftm.server.grooming.level; + +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.ftm.server.BaseTest; +import com.ftm.server.adapter.out.persistence.mapper.GroomingLevelMapper; +import com.ftm.server.adapter.out.persistence.repository.GroomingLevelRepository; +import com.ftm.server.application.command.grooming.level.SaveGroomingLevelCommand; +import com.ftm.server.common.response.enums.ErrorResponseCode; +import com.ftm.server.domain.entity.GroomingLevel; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.transaction.annotation.Transactional; + +public class DeleteGroomingLevelTest extends BaseTest { + + @Autowired private GroomingLevelRepository groomingLevelRepository; + @Autowired private GroomingLevelMapper groomingLevelMapper; + + private Long levelId; + + private ResultActions getResultActions(Long levelId, MockHttpSession session) throws Exception { + return mockMvc.perform( + RestDocumentationRequestBuilders.delete("/api/grooming/levels/{levelId}", levelId) + .session(session)); + } + + @BeforeEach + void setUp() { + SaveGroomingLevelCommand command = SaveGroomingLevelCommand.of(0, 10, "테스트 순한맛", "테스트 매운맛"); + GroomingLevel level = GroomingLevel.create(command); + levelId = groomingLevelRepository.save(groomingLevelMapper.toJpaEntity(level)).getId(); + } + + @Test + @Transactional + void 그루밍_레벨_삭제_성공() throws Exception { + // when + MockHttpSession session = createAdminUserAndLogin(); + ResultActions resultActions = getResultActions(levelId, session); + + // given + resultActions.andExpect(status().isOk()).andDo(print()); + } + + @Test + @Transactional + void 그루밍_레벨_삭제_실패() throws Exception { + // when + MockHttpSession session = createUserAndLogin(); + ResultActions resultActions = getResultActions(levelId, session); + + // given + resultActions + .andExpect(status().is(ErrorResponseCode.NOT_AUTHORIZATION.getHttpStatus().value())) + .andDo(print()); + } +} diff --git a/src/test/java/com/ftm/server/grooming/level/SaveGroomingLevelTest.java b/src/test/java/com/ftm/server/grooming/level/SaveGroomingLevelTest.java new file mode 100644 index 0000000..423f83a --- /dev/null +++ b/src/test/java/com/ftm/server/grooming/level/SaveGroomingLevelTest.java @@ -0,0 +1,79 @@ +package com.ftm.server.grooming.level; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.ftm.server.BaseTest; +import com.ftm.server.adapter.in.web.grooming.dto.request.SaveGroomingLevelRequest; +import com.ftm.server.common.response.enums.ErrorResponseCode; +import org.junit.jupiter.api.Test; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.transaction.annotation.Transactional; + +public class SaveGroomingLevelTest extends BaseTest { + + private ResultActions getResultActions( + SaveGroomingLevelRequest request, MockHttpSession session) throws Exception { + return mockMvc.perform( + RestDocumentationRequestBuilders.post("/api/grooming/levels") + .contentType(APPLICATION_JSON_VALUE) + .content(mapper.writeValueAsString(request)) + .session(session)); + } + + @Test + @Transactional + void 그루밍_레벨_저장_성공() throws Exception { + // given + SaveGroomingLevelRequest request = + new SaveGroomingLevelRequest(0, 10, "테스트 순한맛", "테스트 매운맛"); + + // when + MockHttpSession session = createAdminUserAndLogin(); + ResultActions resultActions = getResultActions(request, session); + + // given + resultActions.andExpect(status().isCreated()).andDo(print()); + } + + @Test + @Transactional + void 그루밍_레벨_저장_실패1() throws Exception { + // given + SaveGroomingLevelRequest request = + new SaveGroomingLevelRequest(0, 10, "테스트 순한맛", "테스트 매운맛"); + + // when + MockHttpSession session = createUserAndLogin(); + ResultActions resultActions = getResultActions(request, session); + + // given + resultActions + .andExpect(status().is(ErrorResponseCode.NOT_AUTHORIZATION.getHttpStatus().value())) + .andDo(print()); + } + + @Test + @Transactional + void 그루밍_레벨_저장_실패2() throws Exception { + // given + SaveGroomingLevelRequest request = + new SaveGroomingLevelRequest(-1, 10, "테스트 순한맛", "테스트 매운맛"); + + // when + MockHttpSession session = createAdminUserAndLogin(); + ResultActions resultActions = getResultActions(request, session); + + // given + resultActions + .andExpect( + status().is( + ErrorResponseCode.INVALID_REQUEST_ARGUMENT + .getHttpStatus() + .value())) + .andDo(print()); + } +} diff --git a/src/test/java/com/ftm/server/grooming/level/UpdateGroomingLevelTest.java b/src/test/java/com/ftm/server/grooming/level/UpdateGroomingLevelTest.java new file mode 100644 index 0000000..0b7c8e7 --- /dev/null +++ b/src/test/java/com/ftm/server/grooming/level/UpdateGroomingLevelTest.java @@ -0,0 +1,96 @@ +package com.ftm.server.grooming.level; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.ftm.server.BaseTest; +import com.ftm.server.adapter.in.web.grooming.dto.request.UpdateGroomingLevelRequest; +import com.ftm.server.adapter.out.persistence.mapper.GroomingLevelMapper; +import com.ftm.server.adapter.out.persistence.repository.GroomingLevelRepository; +import com.ftm.server.application.command.grooming.level.SaveGroomingLevelCommand; +import com.ftm.server.common.response.enums.ErrorResponseCode; +import com.ftm.server.domain.entity.GroomingLevel; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.transaction.annotation.Transactional; + +public class UpdateGroomingLevelTest extends BaseTest { + + @Autowired private GroomingLevelRepository groomingLevelRepository; + @Autowired private GroomingLevelMapper groomingLevelMapper; + + private Long levelId; + + private ResultActions getResultActions( + Long levelId, UpdateGroomingLevelRequest request, MockHttpSession session) + throws Exception { + return mockMvc.perform( + RestDocumentationRequestBuilders.patch("/api/grooming/levels/{levelId}", levelId) + .contentType(APPLICATION_JSON_VALUE) + .content(mapper.writeValueAsString(request)) + .session(session)); + } + + @BeforeEach + void setUp() { + SaveGroomingLevelCommand command = SaveGroomingLevelCommand.of(0, 10, "테스트 순한맛", "테스트 매운맛"); + GroomingLevel level = GroomingLevel.create(command); + levelId = groomingLevelRepository.save(groomingLevelMapper.toJpaEntity(level)).getId(); + } + + @Test + @Transactional + void 그루밍_레벨_수정_성공() throws Exception { + // given + UpdateGroomingLevelRequest request = + new UpdateGroomingLevelRequest(1, 9, "테스트 순한맛 수정", "테스트 매운맛 수정"); + + // when + MockHttpSession session = createAdminUserAndLogin(); + ResultActions resultActions = getResultActions(levelId, request, session); + + // given + resultActions.andExpect(status().isOk()).andDo(print()); + } + + @Test + @Transactional + void 그루밍_레벨_수정_실패1() throws Exception { + // given + UpdateGroomingLevelRequest request = new UpdateGroomingLevelRequest(1, 9, null, null); + + // when + MockHttpSession session = createUserAndLogin(); + ResultActions resultActions = getResultActions(levelId, request, session); + + // given + resultActions + .andExpect(status().is(ErrorResponseCode.NOT_AUTHORIZATION.getHttpStatus().value())) + .andDo(print()); + } + + @Test + @Transactional + void 그루밍_레벨_수정_실패2() throws Exception { + // given + UpdateGroomingLevelRequest request = new UpdateGroomingLevelRequest(null, null, null, null); + + // when + MockHttpSession session = createAdminUserAndLogin(); + ResultActions resultActions = getResultActions(1000000L, request, session); + + // given + resultActions + .andExpect( + status().is( + ErrorResponseCode.GROOMING_LEVEL_NOT_FOUND + .getHttpStatus() + .value())) + .andDo(print()); + } +}