feat(gift): 선물 받을 주소 관리자 API를 추가한다
This commit is contained in:
+10
@@ -5,6 +5,8 @@ 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.AdminGiftCategoryResponse
|
||||||
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftDetailResponse
|
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftDetailResponse
|
||||||
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftListResponse
|
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftListResponse
|
||||||
|
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftMailboxRequest
|
||||||
|
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftMailboxResponse
|
||||||
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftMarkUndeliverableRequest
|
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.AdminGiftOperationStatusResponse
|
||||||
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftSizePriceRequest
|
import kr.co.vividnext.sodalive.v2.api.admin.gift.dto.AdminGiftSizePriceRequest
|
||||||
@@ -45,6 +47,14 @@ class AdminGiftController(
|
|||||||
AdminGiftDetailResponse.from(queryService.getGiftDetail(applicationNo))
|
AdminGiftDetailResponse.from(queryService.getGiftDetail(applicationNo))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@GetMapping("/gift-mailbox")
|
||||||
|
fun getMailbox() = ApiResponse.ok(service.getMailbox()?.let { AdminGiftMailboxResponse.from(it) })
|
||||||
|
|
||||||
|
@PutMapping("/gift-mailbox")
|
||||||
|
fun updateMailbox(@RequestBody request: AdminGiftMailboxRequest) = ApiResponse.ok(
|
||||||
|
AdminGiftMailboxResponse.from(service.updateMailbox(request.toCommand()))
|
||||||
|
)
|
||||||
|
|
||||||
@GetMapping("/gift-categories")
|
@GetMapping("/gift-categories")
|
||||||
fun getCategories() = ApiResponse.ok(service.getCategories().map { AdminGiftCategoryResponse.from(it) })
|
fun getCategories() = ApiResponse.ok(service.getCategories().map { AdminGiftCategoryResponse.from(it) })
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package kr.co.vividnext.sodalive.v2.api.admin.gift.dto
|
package kr.co.vividnext.sodalive.v2.api.admin.gift.dto
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.v2.gift.application.GiftCategoryCommand
|
import kr.co.vividnext.sodalive.v2.gift.application.GiftCategoryCommand
|
||||||
|
import kr.co.vividnext.sodalive.v2.gift.application.GiftMailboxCommand
|
||||||
import kr.co.vividnext.sodalive.v2.gift.application.GiftSizePriceCommand
|
import kr.co.vividnext.sodalive.v2.gift.application.GiftSizePriceCommand
|
||||||
|
|
||||||
data class AdminGiftCategoryRequest(
|
data class AdminGiftCategoryRequest(
|
||||||
@@ -35,6 +36,22 @@ data class AdminGiftSizePriceRequest(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class AdminGiftMailboxRequest(
|
||||||
|
val name: String,
|
||||||
|
val phoneNumber: String,
|
||||||
|
val zipCode: String,
|
||||||
|
val address: String,
|
||||||
|
val addressDetail: String?
|
||||||
|
) {
|
||||||
|
fun toCommand() = GiftMailboxCommand(
|
||||||
|
name = name,
|
||||||
|
phoneNumber = phoneNumber,
|
||||||
|
zipCode = zipCode,
|
||||||
|
address = address,
|
||||||
|
addressDetail = addressDetail
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
data class AdminGiftMarkUndeliverableRequest(
|
data class AdminGiftMarkUndeliverableRequest(
|
||||||
val reason: String
|
val reason: String
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import kr.co.vividnext.sodalive.v2.gift.application.AdminGiftListResult
|
|||||||
import kr.co.vividnext.sodalive.v2.gift.application.AdminGiftMemberInfoResult
|
import kr.co.vividnext.sodalive.v2.gift.application.AdminGiftMemberInfoResult
|
||||||
import kr.co.vividnext.sodalive.v2.gift.application.AdminGiftProductInfoResult
|
import kr.co.vividnext.sodalive.v2.gift.application.AdminGiftProductInfoResult
|
||||||
import kr.co.vividnext.sodalive.v2.gift.application.GiftCategoryResult
|
import kr.co.vividnext.sodalive.v2.gift.application.GiftCategoryResult
|
||||||
|
import kr.co.vividnext.sodalive.v2.gift.application.GiftMailboxResult
|
||||||
import kr.co.vividnext.sodalive.v2.gift.application.GiftOperationStatusResult
|
import kr.co.vividnext.sodalive.v2.gift.application.GiftOperationStatusResult
|
||||||
import kr.co.vividnext.sodalive.v2.gift.application.GiftSizePriceResult
|
import kr.co.vividnext.sodalive.v2.gift.application.GiftSizePriceResult
|
||||||
import kr.co.vividnext.sodalive.v2.gift.domain.GiftStatus
|
import kr.co.vividnext.sodalive.v2.gift.domain.GiftStatus
|
||||||
@@ -70,6 +71,20 @@ data class AdminGiftOperationStatusResponse(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class AdminGiftMailboxResponse(
|
||||||
|
val name: String,
|
||||||
|
val address: String,
|
||||||
|
val phoneNumber: String
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
fun from(result: GiftMailboxResult) = AdminGiftMailboxResponse(
|
||||||
|
name = result.name,
|
||||||
|
address = result.address,
|
||||||
|
phoneNumber = result.phoneNumber
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
data class AdminGiftListResponse(
|
data class AdminGiftListResponse(
|
||||||
val totalCount: Long,
|
val totalCount: Long,
|
||||||
val items: List<AdminGiftListItemResponse>,
|
val items: List<AdminGiftListItemResponse>,
|
||||||
|
|||||||
+48
@@ -59,6 +59,54 @@ class AdminGiftControllerTest @Autowired constructor(
|
|||||||
categoryRepository.deleteAll()
|
categoryRepository.deleteAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("관리자는 받을 주소를 조회하고 저장한다")
|
||||||
|
fun shouldManageGiftMailbox() {
|
||||||
|
mockMvc.perform(get("/api/v2/admin/gift-mailbox").with(user("admin").roles("ADMIN")))
|
||||||
|
.andExpect(status().isOk)
|
||||||
|
.andExpect(jsonPath("$.success").value(true))
|
||||||
|
.andExpect(jsonPath("$.data").isEmpty)
|
||||||
|
|
||||||
|
mockMvc.perform(
|
||||||
|
put("/api/v2/admin/gift-mailbox")
|
||||||
|
.with(user("admin").roles("ADMIN"))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON)
|
||||||
|
.content(
|
||||||
|
"""
|
||||||
|
{
|
||||||
|
"name":"소다라이브 선물 담당자",
|
||||||
|
"phoneNumber":"01012345678",
|
||||||
|
"zipCode":"06234",
|
||||||
|
"address":"서울시 강남구",
|
||||||
|
"addressDetail":"3층 선물 접수처"
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.andExpect(status().isOk)
|
||||||
|
.andExpect(jsonPath("$.success").value(true))
|
||||||
|
.andExpect(jsonPath("$.data.name").value("소다라이브 선물 담당자"))
|
||||||
|
.andExpect(jsonPath("$.data.phoneNumber").value("01012345678"))
|
||||||
|
.andExpect(jsonPath("$.data.address").value("(06234) 서울시 강남구, 3층 선물 접수처"))
|
||||||
|
|
||||||
|
mockMvc.perform(get("/api/v2/admin/gift-mailbox").with(user("admin").roles("ADMIN")))
|
||||||
|
.andExpect(status().isOk)
|
||||||
|
.andExpect(jsonPath("$.data.name").value("소다라이브 선물 담당자"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("관리자는 공백 받을 주소를 저장할 수 없다")
|
||||||
|
fun shouldRejectInvalidGiftMailbox() {
|
||||||
|
mockMvc.perform(
|
||||||
|
put("/api/v2/admin/gift-mailbox")
|
||||||
|
.with(user("admin").roles("ADMIN"))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON)
|
||||||
|
.content("""{"name":" ","phoneNumber":"01012345678","zipCode":"06234","address":"서울시 강남구"}""")
|
||||||
|
)
|
||||||
|
.andExpect(status().isOk)
|
||||||
|
.andExpect(jsonPath("$.success").value(false))
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("관리자는 전체 선물함 목록을 필터링해 조회한다")
|
@DisplayName("관리자는 전체 선물함 목록을 필터링해 조회한다")
|
||||||
fun shouldListAdminGifts() {
|
fun shouldListAdminGifts() {
|
||||||
|
|||||||
Reference in New Issue
Block a user