feat : 수강신청 도메인 구성
This commit is contained in:
+48
-16
@@ -1,38 +1,70 @@
|
||||
package com.study.course_registration.controller;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
|
||||
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 com.study.course_registration.dto.RequestDto;
|
||||
import com.study.course_registration.dto.ResponseDto;
|
||||
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
|
||||
@RequestMapping ("/api/v1")
|
||||
@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("/course-register")
|
||||
@Operation(summary = "Register a course",
|
||||
description = "Registers a new course with the provided details.")
|
||||
@PostMapping
|
||||
@ResponseStatus(HttpStatus.CREATED)
|
||||
@Operation(summary = "수강신청")
|
||||
@ApiResponses({
|
||||
@ApiResponse (responseCode = "200", description = "Course registered successfully"),
|
||||
@ApiResponse (responseCode = "400", description = "Invalid request data")
|
||||
@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 ResponseDto registerCourse(@Validated RequestDto requestDto) {
|
||||
return courseRegistrationService.registerCourse(requestDto);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user