71 lines
3.2 KiB
Java
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);
|
|
}
|
|
}
|