Skip to content

Commit

Permalink
Merge pull request #202 from ITA-OneByte/feat/201
Browse files Browse the repository at this point in the history
[Feat] 메인 클래스 수정 API 구현
  • Loading branch information
baekjaehyuk authored Jan 14, 2025
2 parents 8ba0de1 + 9d8a6d5 commit b5b7375
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -32,8 +26,8 @@ public class MainClassController {
@PostMapping("/main-category")
@Operation(summary = "메인 클래스 추가", description = "메인 클래스 추가하는 api 입니다.")
public ApiResponse<MainClassResponse> 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");
Expand All @@ -42,16 +36,26 @@ public ApiResponse<MainClassResponse> addMainClass(
@GetMapping("/main-category")
@Operation(summary = "추가된 메인 클래스 조회", description = "메인 클래스를 조회할 수 있는 api 입니다.")
public ApiResponse<List<AllMainClassResponse>> showMainClass(
@AuthMember Member findMember) {
@AuthMember Member findMember) {
List<AllMainClassResponse> result = mainClassService.showMainClass(findMember);
return ApiResponse.success(result, 200, "SUCCESS");
}

@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<MainClassResponse> 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");
}

}
Original file line number Diff line number Diff line change
@@ -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
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -23,8 +22,6 @@
public class MainClassService {

private final MainClassRepository mainClassRepository;
private final MemberRepository memberRepository;


// 메인 클래스 추가
@Transactional
Expand All @@ -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);
}
Expand All @@ -46,22 +43,22 @@ public MainClassResponse addMainClass(@AuthMember Member findMember, MainClassRe

// 메인 클래스 전체 조회
@Transactional(readOnly = true)
public List<AllMainClassResponse> showMainClass(@AuthMember Member findMember) {
public List<AllMainClassResponse> showMainClass(Member findMember) {

Academy academy = findMember.getAcademy();

List<MainClass> 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);
Expand All @@ -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());
}
}

0 comments on commit b5b7375

Please sign in to comment.