Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,113 @@ include::{snippets}/admin/alcohols/detail/http-request.adoc[]
[discrete]
include::{snippets}/admin/alcohols/detail/response-fields.adoc[]
include::{snippets}/admin/alcohols/detail/http-response.adoc[]

'''

=== 술(Alcohol) 생성 ===

- 관리자용 술 생성 API입니다.
- 모든 필드는 필수값입니다.

[source]
----
POST /admin/api/v1/alcohols
----

[discrete]
==== 요청 파라미터 ====

[discrete]
include::{snippets}/admin/alcohols/create/request-fields.adoc[]
include::{snippets}/admin/alcohols/create/curl-request.adoc[]
include::{snippets}/admin/alcohols/create/http-request.adoc[]

[discrete]
==== 응답 파라미터 ====

[discrete]
include::{snippets}/admin/alcohols/create/response-fields.adoc[]
include::{snippets}/admin/alcohols/create/http-response.adoc[]

'''

=== 술(Alcohol) 수정 ===

- 관리자용 술 수정 API입니다.
- 전체 수정(PUT)이므로 모든 필드를 전달해야 합니다.
- 이미 삭제된 술은 수정할 수 없습니다.

[source]
----
PUT /admin/api/v1/alcohols/{alcoholId}
----

[discrete]
==== 경로 파라미터 ====

[discrete]
include::{snippets}/admin/alcohols/update/path-parameters.adoc[]

[discrete]
==== 요청 파라미터 ====

[discrete]
include::{snippets}/admin/alcohols/update/request-fields.adoc[]
include::{snippets}/admin/alcohols/update/curl-request.adoc[]
include::{snippets}/admin/alcohols/update/http-request.adoc[]

[discrete]
==== 응답 파라미터 ====

[discrete]
include::{snippets}/admin/alcohols/update/response-fields.adoc[]
include::{snippets}/admin/alcohols/update/http-response.adoc[]

'''

=== 술(Alcohol) 삭제 ===

- 관리자용 술 삭제 API입니다.
- 소프트 삭제로 처리되며, 실제 데이터는 삭제되지 않습니다.
- 리뷰 또는 평점이 존재하는 술은 삭제할 수 없습니다.
- 이미 삭제된 술은 재삭제할 수 없습니다.

[source]
----
DELETE /admin/api/v1/alcohols/{alcoholId}
----

[discrete]
==== 경로 파라미터 ====

[discrete]
include::{snippets}/admin/alcohols/delete/path-parameters.adoc[]
include::{snippets}/admin/alcohols/delete/curl-request.adoc[]
include::{snippets}/admin/alcohols/delete/http-request.adoc[]

[discrete]
==== 응답 파라미터 ====

[discrete]
include::{snippets}/admin/alcohols/delete/response-fields.adoc[]
include::{snippets}/admin/alcohols/delete/http-response.adoc[]

'''

=== 카테고리 레퍼런스 조회 ===

- 현재 DB에 등록된 모든 카테고리 페어(한글/영문) 목록을 조회합니다.
- 술 생성/수정 시 기존 카테고리를 참조하기 위한 API입니다.
- 동일 한글 카테고리라도 영문 카테고리가 다르면 별도 항목으로 조회됩니다.

[source]
----
GET /admin/api/v1/alcohols/categories/reference
----

[discrete]
==== 응답 파라미터 ====

[discrete]
include::{snippets}/admin/alcohols/category-reference/response-fields.adoc[]
include::{snippets}/admin/alcohols/category-reference/http-response.adoc[]
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
package app.bottlenote.alcohols.presentation

import app.bottlenote.alcohols.dto.request.AdminAlcoholSearchRequest
import app.bottlenote.alcohols.dto.request.AdminAlcoholUpsertRequest
import app.bottlenote.alcohols.service.AdminAlcoholCommandService
import app.bottlenote.alcohols.service.AlcoholQueryService
import app.bottlenote.global.data.response.GlobalResponse
import jakarta.validation.Valid
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.DeleteMapping
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.ModelAttribute
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("/alcohols")
class AdminAlcoholsController(
private val alcoholQueryService: AlcoholQueryService
private val alcoholQueryService: AlcoholQueryService,
private val adminAlcoholCommandService: AdminAlcoholCommandService
) {

@GetMapping
Expand All @@ -26,4 +34,29 @@ class AdminAlcoholsController(
fun getAlcoholDetail(@PathVariable alcoholId: Long): ResponseEntity<*> {
return GlobalResponse.ok(alcoholQueryService.findAdminAlcoholDetailById(alcoholId))
}

@GetMapping("/categories/reference")
fun getCategoryReference(): ResponseEntity<*> {
val pairs = alcoholQueryService.findAllCategoryPairs()
val response = pairs.map { mapOf("korCategory" to it.left, "engCategory" to it.right) }
return GlobalResponse.ok(response)
}

@PostMapping
fun createAlcohol(@RequestBody @Valid request: AdminAlcoholUpsertRequest): ResponseEntity<*> {
return GlobalResponse.ok(adminAlcoholCommandService.createAlcohol(request))
}

@PutMapping("/{alcoholId}")
fun updateAlcohol(
@PathVariable alcoholId: Long,
@RequestBody @Valid request: AdminAlcoholUpsertRequest
): ResponseEntity<*> {
return GlobalResponse.ok(adminAlcoholCommandService.updateAlcohol(alcoholId, request))
}

@DeleteMapping("/{alcoholId}")
fun deleteAlcohol(@PathVariable alcoholId: Long): ResponseEntity<*> {
return GlobalResponse.ok(adminAlcoholCommandService.deleteAlcohol(alcoholId))
}
}
Loading