From 4e13735d5fae87c7275414e5e8824d4246cefcda Mon Sep 17 00:00:00 2001 From: pricelees Date: Tue, 16 Sep 2025 22:06:06 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20ScheduleAPI=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=EB=A5=BC=20=EA=B0=81=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=20=ED=83=80=EC=9E=85=EB=B3=84=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roomescape/schedule/docs/ScheduleAPI.kt | 101 +++++++++--------- 1 file changed, 52 insertions(+), 49 deletions(-) diff --git a/src/main/kotlin/roomescape/schedule/docs/ScheduleAPI.kt b/src/main/kotlin/roomescape/schedule/docs/ScheduleAPI.kt index e0009e9f..ab1986ea 100644 --- a/src/main/kotlin/roomescape/schedule/docs/ScheduleAPI.kt +++ b/src/main/kotlin/roomescape/schedule/docs/ScheduleAPI.kt @@ -9,37 +9,59 @@ import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestParam +import roomescape.admin.infrastructure.persistence.AdminType import roomescape.admin.infrastructure.persistence.Privilege import roomescape.auth.web.support.AdminOnly import roomescape.auth.web.support.Public import roomescape.auth.web.support.UserOnly +import roomescape.common.dto.AuditInfo import roomescape.common.dto.response.CommonApiResponse import roomescape.schedule.web.* import java.time.LocalDate -interface ScheduleAPI { +interface AdminScheduleAPI { - @Public - @Operation(summary = "입력된 날짜에 가능한 테마 목록 조회") - @ApiResponses(ApiResponse(responseCode = "200", description = "입력된 날짜에 가능한 테마 목록 조회", useReturnTypeSchema = true)) - fun findAvailableThemes( - @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate - ): ResponseEntity> + @AdminOnly(privilege = Privilege.READ_SUMMARY) + @Operation(summary = "일정 검색", tags = ["관리자 로그인이 필요한 API"]) + @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) + fun searchSchedules( + @PathVariable("storeId") storeId: Long, + @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate?, + @RequestParam(required = false) themeId: Long?, + ): ResponseEntity> - @Public - @Operation(summary = "입력된 날짜, 테마에 대한 모든 시간 조회") - @ApiResponses( - ApiResponse( - responseCode = "200", - description = "입력된 날짜, 테마에 대한 모든 시간 조회", - useReturnTypeSchema = true - ) - ) - fun findAllTime( - @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate, - @RequestParam("themeId") themeId: Long - ): ResponseEntity> + @AdminOnly(privilege = Privilege.READ_DETAIL) + @Operation(summary = "일정 상세 조회", tags = ["관리자 로그인이 필요한 API"]) + @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) + fun findScheduleAudit( + @PathVariable("id") id: Long + ): ResponseEntity> + @AdminOnly(type = AdminType.STORE, privilege = Privilege.CREATE) + @Operation(summary = "일정 생성", tags = ["관리자 로그인이 필요한 API"]) + @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) + fun createSchedule( + @PathVariable("storeId") storeId: Long, + @Valid @RequestBody request: ScheduleCreateRequest + ): ResponseEntity> + + @AdminOnly(type = AdminType.STORE, privilege = Privilege.UPDATE) + @Operation(summary = "일정 수정", tags = ["관리자 로그인이 필요한 API"]) + @ApiResponses(ApiResponse(responseCode = "200", useReturnTypeSchema = true)) + fun updateSchedule( + @PathVariable("id") id: Long, + @Valid @RequestBody request: ScheduleUpdateRequest + ): ResponseEntity> + + @AdminOnly(type = AdminType.STORE, privilege = Privilege.DELETE) + @Operation(summary = "일정 삭제", tags = ["관리자 로그인이 필요한 API"]) + @ApiResponses(ApiResponse(responseCode = "204", useReturnTypeSchema = true)) + fun deleteSchedule( + @PathVariable("id") id: Long + ): ResponseEntity> +} + +interface UserScheduleAPI { @UserOnly @Operation(summary = "일정을 Hold 상태로 변경", tags = ["로그인이 필요한 API"]) @ApiResponses( @@ -52,33 +74,14 @@ interface ScheduleAPI { fun holdSchedule( @PathVariable("id") id: Long ): ResponseEntity> - - @AdminOnly(privilege = Privilege.READ_DETAIL) - @Operation(summary = "일정 상세 조회", tags = ["관리자 로그인이 필요한 API"]) - @ApiResponses(ApiResponse(responseCode = "200", description = "감사 정보를 포함하여 일정 상세 조회", useReturnTypeSchema = true)) - fun findScheduleDetail( - @PathVariable("id") id: Long - ): ResponseEntity> - - @AdminOnly(privilege = Privilege.CREATE) - @Operation(summary = "일정 생성", tags = ["관리자 로그인이 필요한 API"]) - @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun createSchedule( - @Valid @RequestBody request: ScheduleCreateRequest - ): ResponseEntity> - - @AdminOnly(privilege = Privilege.UPDATE) - @Operation(summary = "일정 수정", tags = ["관리자 로그인이 필요한 API"]) - @ApiResponses(ApiResponse(responseCode = "200", description = "성공", useReturnTypeSchema = true)) - fun updateSchedule( - @PathVariable("id") id: Long, - @Valid @RequestBody request: ScheduleUpdateRequest - ): ResponseEntity> - - @AdminOnly(privilege = Privilege.DELETE) - @Operation(summary = "일정 삭제", tags = ["관리자 로그인이 필요한 API"]) - @ApiResponses(ApiResponse(responseCode = "204", description = "성공", useReturnTypeSchema = true)) - fun deleteSchedule( - @PathVariable("id") id: Long - ): ResponseEntity> +} + +interface PublicScheduleAPI { + @Public + @Operation(summary = "특정 날짜 + 매장의 일정 조회") + @ApiResponses(ApiResponse(useReturnTypeSchema = true)) + fun getStoreSchedulesByDate( + @PathVariable("storeId") storeId: Long, + @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate + ): ResponseEntity> }