diff --git a/src/main/java/umc/haruchi/web/controller/BudgetRedistributionController.java b/src/main/java/umc/haruchi/web/controller/BudgetRedistributionController.java index cf90109..fe8fca5 100644 --- a/src/main/java/umc/haruchi/web/controller/BudgetRedistributionController.java +++ b/src/main/java/umc/haruchi/web/controller/BudgetRedistributionController.java @@ -1,6 +1,9 @@ package umc.haruchi.web.controller; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; @@ -25,6 +28,17 @@ public class BudgetRedistributionController { private final BudgetRedistributionService budgetRedistributionService; @Operation(summary = "넘겨쓰기 API", description = "DATE(특정일)을 제외한 EVENLY(1/n) 와 SAFEBOX는 targetId를 null로 넘겨주세요") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MEMBER4005",description = "존재하지 않는 회원입니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MONTHBUDGET4001", description = "한 달 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "DAYBUDGET4001", description = "하루 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4005", description = "입력된 금액이 해당 예산 범위를 초과하거나 유효하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4009", description = "마지막 날에는 해당 기능을 사용할 수 없습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4001", description = "타겟 날짜는 NULL 이어야 합니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4007", description = "돈이 부족합니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4002", description = "타겟 날짜가 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4006", description = "해당하는 재분배 옵션이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) @PostMapping("/push") public ApiResponse pushBudget(@Valid @RequestBody BudgetRedistributionRequestDTO.createPushDTO request, @AuthenticationPrincipal MemberDetail memberDetail){ @@ -33,6 +47,19 @@ public ApiResponse pushBudg } @Operation(summary = "당겨쓰기 API", description = "DATE(특정일)을 제외한 EVENLY(1/n) 와 SAFEBOX는 sourceId를 null로 넘겨주세요") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MEMBER4005",description = "존재하지 않는 회원입니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MONTHBUDGET4001", description = "한 달 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "DAYBUDGET4001", description = "하루 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4008", description = "당기는 금액이 남은 한달 예산을 초과합니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4005", description = "입력된 금액이 해당 예산 범위를 초과하거나 유효하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4009", description = "마지막 날에는 해당 기능을 사용할 수 없습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4003", description = "소스 날짜는 NULL 이어야 합니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4007", description = "돈이 부족합니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4004", description = "소스 날짜가 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4003", description = "소스 날짜는 NULL 이어야 합니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4006", description = "해당하는 재분배 옵션이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) @PostMapping("/pull") public ApiResponse pullBudget(@Valid @RequestBody BudgetRedistributionRequestDTO.createPullDTO request, @AuthenticationPrincipal MemberDetail memberDetail){ @@ -41,6 +68,14 @@ public ApiResponse pullBudg } @Operation(summary = "지출 마감 API", description = "0일떄는 옵션을 ZERO로 넘겨주시고, 마지막 날의 1/n 방식은 에러처리 되어있습니다.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MEMBER4005",description = "존재하지 않는 회원입니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MONTHBUDGET4001", description = "한 달 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "DAYBUDGET4002", description = "특정 날짜의 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "DAYBUDGET4003", description = "오늘 지출은 마감되었습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4009", description = "마지막 날에는 해당 기능을 사용할 수 없습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4007", description = "돈이 부족합니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) @PostMapping("/closing") public ApiResponse closingBudget(@Valid @RequestBody BudgetRedistributionRequestDTO.createClosingDTO request, @AuthenticationPrincipal MemberDetail memberDetail){ @@ -56,6 +91,12 @@ public ApiResponse closi } @Operation(summary = "지출 마감에서 1/n경우의 하루 차감/분배 값 조회 API", description = "지출 마감 영수증에서 고르게 분배하기 선택 시 얼마씩 분배/차감할 지 알려주는 API입니다.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MONTHBUDGET4001", description = "한 달 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "DAYBUDGET4002", description = "특정 날짜의 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4010", description ="amount가 0일 때는 1/n을 할 수 없습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4009", description = "마지막 날에는 해당 기능을 사용할 수 없습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) @GetMapping("/closing/amount") public ApiResponse getCalculatedAmount(@RequestParam @NotNull(message = "year 값은 필수 입력 값입니다.") int year, @RequestParam @NotNull(message = "month 값은 필수 입력 값입니다.") int month, @@ -66,6 +107,10 @@ public ApiResponse } @Operation(summary = "지출 영수증 조회 API", description = "지출 영수증 조회 API입니다.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MONTHBUDGET4001", description = "한 달 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "DAYBUDGET4002", description = "특정 날짜의 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) @GetMapping("/closing") public ApiResponse getReceipt(@RequestParam @NotNull(message = "year 값은 필수 입력 값입니다.") int year, @RequestParam @NotNull(message = "month 값은 필수 입력 값입니다.") int month, @@ -81,6 +126,10 @@ public ApiResponse getReceipt } @Operation(summary = "지출 마감 확인 API", description = "true면 지출 마감, false면 마감 x") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MONTHBUDGET4001", description = "한 달 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "DAYBUDGET4002", description = "특정 날짜의 예산이 존재하지 않습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) @GetMapping("/closing/check") public ApiResponse getClosingCheck(@RequestParam @NotNull(message = "year 값은 필수 입력 값입니다.") int year, @RequestParam @NotNull(message = "month 값은 필수 입력 값입니다.") int month, @@ -91,6 +140,10 @@ public ApiResponse getClosin } @Operation(summary = "마지막 지출 마감일 확인 API", description = "마지막 지출 마감일 확인 API") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "MEMBER4005", description = "존재하지 않는 회원입니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "REDISTRIBUTION4011", description = "지출 마감을 아직 한번도 하지 않았습니다.",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) @GetMapping("/closing/check/last") public ApiResponse getClosingCheckLast(@AuthenticationPrincipal MemberDetail memberDetail){ LocalDate last = budgetRedistributionService.closingCheckLast(memberDetail.getMember().getId());