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..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 @@ -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 = 10, message = "메인 클래스 이름은 10자를 초과할 수 없습니다.") + 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()); + } }