feat(gift): 선물 관리자 API를 추가한다

This commit is contained in:
2026-09-30 13:39:44 +09:00
parent 6f9dcaa1e2
commit d360db6f08
2 changed files with 298 additions and 0 deletions
@@ -0,0 +1,74 @@
package kr.co.vividnext.sodalive.v2.api.admin.gift.adapter.`in`.web
import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftCategoryRequest
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftCategoryResponse
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftMarkUndeliverableRequest
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftOperationStatusResponse
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftSizePriceRequest
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftSizePriceResponse
import kr.co.vividnext.sodalive.v2.gift.application.GiftAdminService
import kr.co.vividnext.sodalive.v2.gift.domain.GiftSize
import org.springframework.security.access.prepost.PreAuthorize
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.PutMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/api/v2/admin")
@PreAuthorize("hasRole('ADMIN')")
class AdminGiftController(private val service: GiftAdminService) {
@GetMapping("/gift-categories")
fun getCategories() = ApiResponse.ok(service.getCategories().map { AdminGiftCategoryResponse.from(it) })
@PostMapping("/gift-categories")
fun createCategory(@RequestBody request: AdminGiftCategoryRequest) = ApiResponse.ok(
AdminGiftCategoryResponse.from(service.createCategory(request.toCommand()))
)
@PutMapping("/gift-categories/{categoryId}")
fun updateCategory(
@PathVariable categoryId: Long,
@RequestBody request: AdminGiftCategoryRequest
) = ApiResponse.ok(AdminGiftCategoryResponse.from(service.updateCategory(categoryId, request.toCommand())))
@DeleteMapping("/gift-categories/{categoryId}")
fun deleteCategory(@PathVariable categoryId: Long) = ApiResponse.ok(
AdminGiftCategoryResponse.from(service.deleteCategory(categoryId))
)
@GetMapping("/gift-size-prices")
fun getSizePrices() = ApiResponse.ok(service.getSizePrices().map { AdminGiftSizePriceResponse.from(it) })
@PutMapping("/gift-size-prices/{sizeCode}")
fun updateSizePrice(
@PathVariable sizeCode: GiftSize,
@RequestBody request: AdminGiftSizePriceRequest
) = ApiResponse.ok(AdminGiftSizePriceResponse.from(service.updateSizePrice(sizeCode, request.toCommand())))
@PostMapping("/gifts/{applicationNo}/arrive-mailbox")
fun arriveMailbox(@PathVariable applicationNo: String) = ApiResponse.ok(
AdminGiftOperationStatusResponse.from(service.arriveMailbox(applicationNo))
)
@PostMapping("/gifts/{applicationNo}/complete-inspection")
fun completeInspection(@PathVariable applicationNo: String) = ApiResponse.ok(
AdminGiftOperationStatusResponse.from(service.completeInspection(applicationNo))
)
@PostMapping("/gifts/{applicationNo}/mark-undeliverable")
fun markUndeliverable(
@PathVariable applicationNo: String,
@RequestBody request: AdminGiftMarkUndeliverableRequest
) = ApiResponse.ok(AdminGiftOperationStatusResponse.from(service.markUndeliverable(applicationNo, request.reason)))
@PostMapping("/gifts/{applicationNo}/complete-delivery")
fun completeDelivery(@PathVariable applicationNo: String) = ApiResponse.ok(
AdminGiftOperationStatusResponse.from(service.completeDelivery(applicationNo))
)
}