refactor: ScheduleController 관리자 / 비 관리자 분리

This commit is contained in:
이상진 2025-09-17 10:36:38 +09:00
parent 4aacaddcfc
commit cb9125ef1d
2 changed files with 77 additions and 57 deletions

View File

@ -0,0 +1,66 @@
package roomescape.schedule.web
import jakarta.validation.Valid
import org.springframework.format.annotation.DateTimeFormat
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
import roomescape.common.dto.AuditInfo
import roomescape.common.dto.response.CommonApiResponse
import roomescape.schedule.business.ScheduleService
import roomescape.schedule.docs.AdminScheduleAPI
import java.time.LocalDate
@RestController
@RequestMapping("/admin")
class AdminScheduleController(
private val scheduleService: ScheduleService,
) : AdminScheduleAPI {
@GetMapping("/stores/{storeId}/schedules")
override fun searchSchedules(
@PathVariable("storeId") storeId: Long,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate?,
@RequestParam(required = false) themeId: Long?,
): ResponseEntity<CommonApiResponse<AdminScheduleSummaryListResponse>> {
val response = scheduleService.searchSchedules(storeId, date, themeId)
return ResponseEntity.ok(CommonApiResponse(response))
}
@GetMapping("/schedules/{id}/audits")
override fun findScheduleAudit(
@PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<AuditInfo>> {
val response = scheduleService.findScheduleAuditOrUnknown(id)
return ResponseEntity.ok(CommonApiResponse(response))
}
@PostMapping("/stores/{storeId}/schedules")
override fun createSchedule(
@PathVariable("storeId") storeId: Long,
@Valid @RequestBody request: ScheduleCreateRequest
): ResponseEntity<CommonApiResponse<ScheduleCreateResponse>> {
val response = scheduleService.createSchedule(storeId, request)
return ResponseEntity.ok(CommonApiResponse(response))
}
@PatchMapping("/schedules/{id}")
override fun updateSchedule(
@PathVariable("id") id: Long,
@Valid @RequestBody request: ScheduleUpdateRequest
): ResponseEntity<CommonApiResponse<Unit>> {
scheduleService.updateSchedule(id, request)
return ResponseEntity.ok(CommonApiResponse(Unit))
}
@DeleteMapping("/schedules/{id}")
override fun deleteSchedule(
@PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<Unit>> {
scheduleService.deleteSchedule(id)
return ResponseEntity.noContent().build()
}
}

View File

@ -1,57 +1,20 @@
package roomescape.schedule.web package roomescape.schedule.web
import jakarta.validation.Valid
import org.springframework.format.annotation.DateTimeFormat import org.springframework.format.annotation.DateTimeFormat
import org.springframework.http.ResponseEntity import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.* import org.springframework.web.bind.annotation.*
import roomescape.common.dto.response.CommonApiResponse import roomescape.common.dto.response.CommonApiResponse
import roomescape.schedule.business.ScheduleService import roomescape.schedule.business.ScheduleService
import roomescape.schedule.docs.ScheduleAPI import roomescape.schedule.docs.PublicScheduleAPI
import roomescape.schedule.docs.UserScheduleAPI
import java.time.LocalDate import java.time.LocalDate
@RestController @RestController
@RequestMapping("/schedules")
class ScheduleController( class ScheduleController(
private val scheduleService: ScheduleService private val scheduleService: ScheduleService
) : ScheduleAPI { ) : UserScheduleAPI, PublicScheduleAPI {
@GetMapping("/themes")
override fun findAvailableThemes(
@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate
): ResponseEntity<CommonApiResponse<AvailableThemeIdListResponse>> {
val response = scheduleService.findThemesByDate(date)
return ResponseEntity.ok(CommonApiResponse(response)) @PostMapping("/schedules/{id}/hold")
}
@GetMapping
override fun findAllTime(
@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate,
@RequestParam("themeId") themeId: Long
): ResponseEntity<CommonApiResponse<ScheduleListByDateResponse>> {
val response = scheduleService.findSchedules(date, themeId)
return ResponseEntity.ok(CommonApiResponse(response))
}
@GetMapping("/{id}")
override fun findScheduleDetail(
@PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<ScheduleDetailResponse>> {
val response = scheduleService.findDetail(id)
return ResponseEntity.ok(CommonApiResponse(response))
}
@PostMapping
override fun createSchedule(
@Valid @RequestBody request: ScheduleCreateRequest
): ResponseEntity<CommonApiResponse<ScheduleCreateResponse>> {
val response = scheduleService.createSchedule(request)
return ResponseEntity.ok(CommonApiResponse(response))
}
@PatchMapping("/{id}/hold")
override fun holdSchedule( override fun holdSchedule(
@PathVariable("id") id: Long @PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<Unit>> { ): ResponseEntity<CommonApiResponse<Unit>> {
@ -60,22 +23,13 @@ class ScheduleController(
return ResponseEntity.ok(CommonApiResponse()) return ResponseEntity.ok(CommonApiResponse())
} }
@PatchMapping("/{id}") @GetMapping("/stores/{storeId}/schedules")
override fun updateSchedule( override fun getStoreSchedulesByDate(
@PathVariable("id") id: Long, @PathVariable("storeId") storeId: Long,
@Valid @RequestBody request: ScheduleUpdateRequest @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") date: LocalDate
): ResponseEntity<CommonApiResponse<Unit>> { ): ResponseEntity<CommonApiResponse<ScheduleWithThemeListResponse>> {
scheduleService.updateSchedule(id, request) val response = scheduleService.getStoreScheduleByDate(storeId, date)
return ResponseEntity.ok(CommonApiResponse(Unit)) return ResponseEntity.ok(CommonApiResponse(response))
}
@DeleteMapping("/{id}")
override fun deleteSchedule(
@PathVariable("id") id: Long
): ResponseEntity<CommonApiResponse<Unit>> {
scheduleService.deleteSchedule(id)
return ResponseEntity.noContent().build()
} }
} }