Files
course-registration/src/main/java/com/study/course_registration/controller/CourseRegistrationController.java
T

71 lines
3.2 KiB
Java

package com.study.course_registration.controller;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import com.study.course_registration.dto.registration.CourseRegistrationRequest;
import com.study.course_registration.dto.registration.CourseRegistrationResponse;
import com.study.course_registration.dto.registration.RegistrationListResponse;
import com.study.course_registration.service.CourseRegistrationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
@RestController
@Validated
@RequestMapping("/api/v1/users/{userId}/registrations")
@Tag(name = "Registrations", description = "수강신청/조회/취소 API")
public class CourseRegistrationController {
private final CourseRegistrationService courseRegistrationService;
public CourseRegistrationController(CourseRegistrationService courseRegistrationService) {
this.courseRegistrationService = courseRegistrationService;
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "수강신청")
@ApiResponses({
@ApiResponse(responseCode = "201", description = "신청 성공"),
@ApiResponse(responseCode = "403", description = "학년 또는 역할 제한", content = @Content),
@ApiResponse(responseCode = "404", description = "사용자 또는 강의 없음", content = @Content),
@ApiResponse(responseCode = "409", description = "기간/중복/시간표/학점/정원 충돌", content = @Content),
@ApiResponse(responseCode = "503", description = "락 대기 타임아웃", content = @Content)
})
public CourseRegistrationResponse register(
@PathVariable String userId,
@Valid @RequestBody CourseRegistrationRequest request) {
return courseRegistrationService.register(userId, request);
}
@GetMapping
@Operation(summary = "내 수강신청 목록 조회")
public RegistrationListResponse getRegistrations(
@PathVariable String userId,
@RequestParam(required = false) String semesterId) {
return courseRegistrationService.getRegistrations(userId, semesterId);
}
@DeleteMapping("/{registrationId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
@Operation(summary = "수강신청 취소")
public void cancel(
@PathVariable String userId,
@PathVariable String registrationId) {
courseRegistrationService.cancel(userId, registrationId);
}
}