feat(gift): 선물 사용자 API를 추가한다

This commit is contained in:
2026-09-30 13:39:04 +09:00
parent 08347f9ab5
commit 6a2ae38483
2 changed files with 581 additions and 0 deletions
@@ -0,0 +1,153 @@
package kr.co.vividnext.sodalive.v2.api.gift.adapter.`in`.web
import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftApplicationRequest
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftApplicationResponse
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftCancellationResponse
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftDeliveryConfirmationResponse
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftDetailResponse
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftFormOptionsResponse
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftListResponse
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftRecipientAddressRegistrationRequest
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftRecipientAddressRegistrationResponse
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftReviewRequest
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftReviewResponse
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftTrackingRegistrationRequest
import kr.co.vividnext.sodalive.v2.api.gift.dto.GiftTrackingRegistrationResponse
import kr.co.vividnext.sodalive.v2.gift.application.GiftCommandService
import kr.co.vividnext.sodalive.v2.gift.application.GiftQueryService
import kr.co.vividnext.sodalive.v2.gift.domain.GiftListType
import org.springframework.security.core.annotation.AuthenticationPrincipal
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.RestController
@RestController
@RequestMapping("/api/v2/gifts")
class GiftController(
private val queryService: GiftQueryService,
private val commandService: GiftCommandService
) {
@GetMapping("/form-options")
fun getFormOptions() = ApiResponse.ok(GiftFormOptionsResponse.from(queryService.getFormOptions()))
@GetMapping
fun getGifts(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
@RequestParam(defaultValue = "ALL") type: GiftListType,
@RequestParam(defaultValue = "0") page: Int,
@RequestParam(defaultValue = "20") size: Int
) = ApiResponse.ok(
GiftListResponse.from(
queryService.getGifts(
memberId = member?.id ?: throw SodaException(messageKey = "common.error.bad_credentials"),
type = type,
page = page,
size = size
)
)
)
@GetMapping("/{applicationNo}")
fun getGiftDetail(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
@PathVariable applicationNo: String
) = ApiResponse.ok(
GiftDetailResponse.from(
queryService.getGiftDetail(
memberId = member?.id ?: throw SodaException(messageKey = "common.error.bad_credentials"),
applicationNo = applicationNo
)
)
)
@PostMapping
fun registerGift(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
@RequestBody request: GiftApplicationRequest
) = ApiResponse.ok(
GiftApplicationResponse.from(
commandService.registerGift(
member = member ?: throw SodaException(messageKey = "common.error.bad_credentials"),
command = request.toCommand()
)
)
)
@PostMapping("/{applicationNo}/cancel")
fun cancelGift(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
@PathVariable applicationNo: String
) = ApiResponse.ok(
GiftCancellationResponse.from(
commandService.cancelGift(
member = member ?: throw SodaException(messageKey = "common.error.bad_credentials"),
applicationNo = applicationNo
)
)
)
@PostMapping("/{applicationNo}/tracking")
fun registerTracking(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
@PathVariable applicationNo: String,
@RequestBody request: GiftTrackingRegistrationRequest
) = ApiResponse.ok(
GiftTrackingRegistrationResponse.from(
commandService.registerTracking(
member = member ?: throw SodaException(messageKey = "common.error.bad_credentials"),
applicationNo = applicationNo,
command = request.toCommand()
)
)
)
@PostMapping("/{applicationNo}/recipient-address")
fun registerRecipientAddress(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
@PathVariable applicationNo: String,
@RequestBody request: GiftRecipientAddressRegistrationRequest
) = ApiResponse.ok(
GiftRecipientAddressRegistrationResponse.from(
commandService.registerRecipientAddress(
member = member ?: throw SodaException(messageKey = "common.error.bad_credentials"),
applicationNo = applicationNo,
command = request.toCommand()
)
)
)
@PostMapping("/{applicationNo}/delivery-complete")
fun confirmDelivery(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
@PathVariable applicationNo: String
) = ApiResponse.ok(
GiftDeliveryConfirmationResponse.from(
commandService.confirmDelivery(
member = member ?: throw SodaException(messageKey = "common.error.bad_credentials"),
applicationNo = applicationNo
)
)
)
@PostMapping("/{applicationNo}/review")
fun writeReview(
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
@PathVariable applicationNo: String,
@RequestBody request: GiftReviewRequest
) = ApiResponse.ok(
GiftReviewResponse.from(
commandService.writeReview(
member = member ?: throw SodaException(messageKey = "common.error.bad_credentials"),
applicationNo = applicationNo,
command = request.toCommand()
)
)
)
}