From a7e7771054d2f2070f341787b6da87568d9eb05a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=B1=EC=9E=AC=ED=98=81?= Date: Wed, 15 Jan 2025 05:31:42 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[feat]=20=EB=A9=94=EC=9D=B8=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=88=98=EC=A0=95=20API=20#201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MainClassController.java | 32 +++++++++++-------- .../dto/request/MainClassRequest.java | 22 +++++-------- .../category/service/MainClassService.java | 26 ++++++++++----- 3 files changed, 44 insertions(+), 36 deletions(-) diff --git a/src/main/java/classfit/example/classfit/category/controller/MainClassController.java b/src/main/java/classfit/example/classfit/category/controller/MainClassController.java index 840bd3e6..3db59246 100644 --- a/src/main/java/classfit/example/classfit/category/controller/MainClassController.java +++ b/src/main/java/classfit/example/classfit/category/controller/MainClassController.java @@ -9,17 +9,11 @@ import classfit.example.classfit.member.domain.Member; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController @RequestMapping("/api/v1/home") @@ -32,8 +26,8 @@ public class MainClassController { @PostMapping("/main-category") @Operation(summary = "메인 클래스 추가", description = "메인 클래스 추가하는 api 입니다.") public ApiResponse addMainClass( - @AuthMember Member findMember, - @RequestBody MainClassRequest req + @AuthMember Member findMember, + @Valid @RequestBody MainClassRequest req ) { MainClassResponse result = mainClassService.addMainClass(findMember, req); return ApiResponse.success(result, 201, "CREATED"); @@ -42,7 +36,7 @@ public ApiResponse addMainClass( @GetMapping("/main-category") @Operation(summary = "추가된 메인 클래스 조회", description = "메인 클래스를 조회할 수 있는 api 입니다.") public ApiResponse> showMainClass( - @AuthMember Member findMember) { + @AuthMember Member findMember) { List result = mainClassService.showMainClass(findMember); return ApiResponse.success(result, 200, "SUCCESS"); } @@ -50,8 +44,18 @@ public ApiResponse> showMainClass( @DeleteMapping("/main-category/{mainClassId}") @Operation(summary = "메인 클래스 삭제", description = "메인 클래스 삭제하는 api 입니다. 서브클래스 먼저 삭제 후 삭제 가능") public ApiResponse deleteMainClass(@AuthMember Member findMember, - @PathVariable(name = "mainClassId") Long mainClassId) { + @PathVariable(name = "mainClassId") Long mainClassId) { mainClassService.deleteMainClass(findMember, mainClassId); return ApiResponse.success(null, 200, "DELETED"); } + + @PatchMapping("/main-category/{mainClassId}/update") + @Operation(summary = "메인 클래스 수정", description = "메인 클래스 수정하는 api 입니다.") + public ApiResponse updateMainClass(@AuthMember Member findMember, + @PathVariable(name = "mainClassId") Long mainClassId, + @Valid @RequestBody MainClassRequest request) { + MainClassResponse updateMainClass = mainClassService.updateMainClass(findMember, mainClassId, request); + return ApiResponse.success(updateMainClass, 200, "DELETED"); + } + } diff --git a/src/main/java/classfit/example/classfit/category/dto/request/MainClassRequest.java b/src/main/java/classfit/example/classfit/category/dto/request/MainClassRequest.java index 5088277a..d01af512 100644 --- a/src/main/java/classfit/example/classfit/category/dto/request/MainClassRequest.java +++ b/src/main/java/classfit/example/classfit/category/dto/request/MainClassRequest.java @@ -1,18 +1,12 @@ package classfit.example.classfit.category.dto.request; -import classfit.example.classfit.common.exception.ClassfitException; -import org.springframework.http.HttpStatus; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; -public record MainClassRequest(String mainClassName) { - - public MainClassRequest { - if (mainClassName == null || mainClassName.isBlank()) { - throw new ClassfitException("메인 클래스 이름은 비어 있을 수 없습니다.", - HttpStatus.UNPROCESSABLE_ENTITY); - } - if (mainClassName.length() > 20) { - throw new ClassfitException("메인 클래스 이름은 20자를 초과할 수 없습니다.", - HttpStatus.UNPROCESSABLE_ENTITY); - } - } +public record MainClassRequest + ( + @NotBlank(message = "메인 클래스 이름은 비어 있을 수 없습니다.") + @Size(max = 20, message = "메인 클래스 이름은 20자를 초과할 수 없습니다.") + String mainClassName + ) { } diff --git a/src/main/java/classfit/example/classfit/category/service/MainClassService.java b/src/main/java/classfit/example/classfit/category/service/MainClassService.java index 457e4d9c..c8cbc7a4 100644 --- a/src/main/java/classfit/example/classfit/category/service/MainClassService.java +++ b/src/main/java/classfit/example/classfit/category/service/MainClassService.java @@ -9,7 +9,6 @@ import classfit.example.classfit.category.repository.MainClassRepository; import classfit.example.classfit.common.exception.ClassfitException; import classfit.example.classfit.member.domain.Member; -import classfit.example.classfit.member.repository.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -23,8 +22,6 @@ public class MainClassService { private final MainClassRepository mainClassRepository; - private final MemberRepository memberRepository; - // 메인 클래스 추가 @Transactional @@ -33,7 +30,7 @@ public MainClassResponse addMainClass(@AuthMember Member findMember, MainClassRe Academy academy = findMember.getAcademy(); boolean exists = mainClassRepository.existsByAcademyAndMainClassName(academy, - req.mainClassName()); + req.mainClassName()); if (exists) { throw new ClassfitException("이미 같은 이름의 메인 클래스가 있어요.", HttpStatus.CONFLICT); } @@ -46,22 +43,22 @@ public MainClassResponse addMainClass(@AuthMember Member findMember, MainClassRe // 메인 클래스 전체 조회 @Transactional(readOnly = true) - public List showMainClass(@AuthMember Member findMember) { + public List showMainClass(Member findMember) { Academy academy = findMember.getAcademy(); List mainClasses = mainClassRepository.findByAcademy(academy); return mainClasses.stream().map(mainClass -> new AllMainClassResponse(mainClass.getId(), - mainClass.getMainClassName())).toList(); + mainClass.getMainClassName())).toList(); } // 메인 클래스 삭제 @Transactional - public void deleteMainClass(@AuthMember Member findMember, Long mainClassId) { + public void deleteMainClass(Member findMember, Long mainClassId) { MainClass mainClass = mainClassRepository.findById(mainClassId).orElseThrow( - () -> new ClassfitException("해당 메인 클래스를 찾을 수 없습니다.", HttpStatus.NOT_FOUND)); + () -> new ClassfitException("해당 메인 클래스를 찾을 수 없습니다.", HttpStatus.NOT_FOUND)); if (!Objects.equals(findMember.getAcademy(), mainClass.getAcademy())) { throw new ClassfitException("사용자가 속한 학원 내의 클래스가 아닙니다.", HttpStatus.FORBIDDEN); @@ -70,4 +67,17 @@ public void deleteMainClass(@AuthMember Member findMember, Long mainClassId) { mainClassRepository.delete(mainClass); } + + @Transactional + public MainClassResponse updateMainClass(Member findMember, Long mainClassId, MainClassRequest request) { + + MainClass mainClass = mainClassRepository.findById(mainClassId).orElseThrow( + () -> new ClassfitException("해당 메인 클래스를 찾을 수 없습니다.", HttpStatus.NOT_FOUND)); + + if (!Objects.equals(findMember.getAcademy(), mainClass.getAcademy())) { + throw new ClassfitException("사용자가 속한 학원 내의 클래스가 아닙니다.", HttpStatus.FORBIDDEN); + } + mainClass.updateMainClassName(request.mainClassName()); + return new MainClassResponse(mainClass.getId(), mainClass.getMainClassName()); + } } From 9d8a6d5f641a9333fe885f12f1d1f9ab19e41ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=B1=EC=9E=AC=ED=98=81?= Date: Wed, 15 Jan 2025 05:32:48 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[refactor]=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20?= =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EC=88=98=EC=A0=95=20#201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/classfit/category/dto/request/MainClassRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/classfit/example/classfit/category/dto/request/MainClassRequest.java b/src/main/java/classfit/example/classfit/category/dto/request/MainClassRequest.java index d01af512..3c3e4504 100644 --- a/src/main/java/classfit/example/classfit/category/dto/request/MainClassRequest.java +++ b/src/main/java/classfit/example/classfit/category/dto/request/MainClassRequest.java @@ -6,7 +6,7 @@ public record MainClassRequest ( @NotBlank(message = "메인 클래스 이름은 비어 있을 수 없습니다.") - @Size(max = 20, message = "메인 클래스 이름은 20자를 초과할 수 없습니다.") + @Size(max = 10, message = "메인 클래스 이름은 10자를 초과할 수 없습니다.") String mainClassName ) { }