Files
sam-api/app/Swagger/v1/ShipmentApi.php
kent e571f8c38e docs(API): Swagger API 문서 업데이트
- AdminFcmApi, BillApi, ExpectedExpenseApi 개선
- PositionApi, ProcessApi, QuoteApi 개선
- ReceivablesApi, ShipmentApi, StockApi, VendorLedgerApi 개선

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-13 19:48:54 +09:00

618 lines
30 KiB
PHP

<?php
namespace App\Swagger\v1;
/**
* @OA\Tag(name="Shipments", description="출하 관리")
*
* @OA\Schema(
* schema="Shipment",
* type="object",
* description="출하 정보",
*
* @OA\Property(property="id", type="integer", example=1, description="출하 ID"),
* @OA\Property(property="tenant_id", type="integer", example=1, description="테넌트 ID"),
* @OA\Property(property="shipment_no", type="string", example="SHP-20251226-0001", description="출하번호"),
* @OA\Property(property="lot_no", type="string", example="LOT-001", nullable=true, description="LOT번호"),
* @OA\Property(property="order_id", type="integer", nullable=true, description="수주 ID"),
* @OA\Property(property="scheduled_date", type="string", format="date", example="2025-12-26", description="출고예정일"),
* @OA\Property(property="status", type="string", enum={"scheduled","ready","shipping","completed"}, example="scheduled", description="상태"),
* @OA\Property(property="status_label", type="string", example="출고예정", description="상태 라벨"),
* @OA\Property(property="priority", type="string", enum={"urgent","normal","low"}, example="normal", description="우선순위"),
* @OA\Property(property="priority_label", type="string", example="보통", description="우선순위 라벨"),
* @OA\Property(property="delivery_method", type="string", enum={"pickup","direct","logistics"}, example="pickup", description="배송방식"),
* @OA\Property(property="delivery_method_label", type="string", example="상차", description="배송방식 라벨"),
* @OA\Property(property="client_id", type="integer", nullable=true, description="거래처 ID"),
* @OA\Property(property="customer_name", type="string", example="(주)고객사", nullable=true, description="발주처명"),
* @OA\Property(property="site_name", type="string", example="서울현장", nullable=true, description="현장명"),
* @OA\Property(property="delivery_address", type="string", example="서울시 강남구", nullable=true, description="배송주소"),
* @OA\Property(property="receiver", type="string", example="홍길동", nullable=true, description="인수자"),
* @OA\Property(property="receiver_contact", type="string", example="010-1234-5678", nullable=true, description="인수자 연락처"),
* @OA\Property(property="can_ship", type="boolean", example=true, description="출하가능 여부"),
* @OA\Property(property="deposit_confirmed", type="boolean", example=true, description="입금확인 여부"),
* @OA\Property(property="invoice_issued", type="boolean", example=false, description="세금계산서 발행 여부"),
* @OA\Property(property="customer_grade", type="string", example="A", nullable=true, description="거래처 등급"),
* @OA\Property(property="loading_manager", type="string", example="김상차", nullable=true, description="상차담당자"),
* @OA\Property(property="loading_completed_at", type="string", format="date-time", nullable=true, description="상차완료 일시"),
* @OA\Property(property="loading_time", type="string", format="date-time", nullable=true, description="상차시간(입차예정)"),
* @OA\Property(property="logistics_company", type="string", example="CJ대한통운", nullable=true, description="물류사"),
* @OA\Property(property="vehicle_tonnage", type="string", example="5톤", nullable=true, description="차량 톤수"),
* @OA\Property(property="shipping_cost", type="number", example=150000, nullable=true, description="운송비"),
* @OA\Property(property="vehicle_no", type="string", example="12가1234", nullable=true, description="차량번호"),
* @OA\Property(property="driver_name", type="string", example="이운전", nullable=true, description="운전자명"),
* @OA\Property(property="driver_contact", type="string", example="010-9876-5432", nullable=true, description="운전자 연락처"),
* @OA\Property(property="expected_arrival", type="string", format="date-time", nullable=true, description="입차예정시간"),
* @OA\Property(property="confirmed_arrival", type="string", format="date-time", nullable=true, description="입차확정시간"),
* @OA\Property(property="remarks", type="string", nullable=true, description="비고"),
* @OA\Property(property="is_urgent", type="boolean", example=false, description="긴급 여부"),
* @OA\Property(property="item_count", type="integer", example=3, description="품목 수"),
* @OA\Property(property="total_quantity", type="number", format="float", example=150.5, description="총 수량"),
* @OA\Property(property="created_at", type="string", format="date-time"),
* @OA\Property(property="updated_at", type="string", format="date-time")
* )
*
* @OA\Schema(
* schema="ShipmentItem",
* type="object",
* description="출하 품목 정보",
*
* @OA\Property(property="id", type="integer", example=1, description="품목 ID"),
* @OA\Property(property="shipment_id", type="integer", example=1, description="출하 ID"),
* @OA\Property(property="seq", type="integer", example=1, description="순번"),
* @OA\Property(property="item_code", type="string", example="ITEM-001", nullable=true, description="품목코드"),
* @OA\Property(property="item_name", type="string", example="제품 A", description="품목명"),
* @OA\Property(property="floor_unit", type="string", example="1층/M01", nullable=true, description="층/M호"),
* @OA\Property(property="specification", type="string", example="100x200mm", nullable=true, description="규격"),
* @OA\Property(property="quantity", type="number", format="float", example=10.5, description="수량"),
* @OA\Property(property="unit", type="string", example="EA", nullable=true, description="단위"),
* @OA\Property(property="lot_no", type="string", example="LOT-001", nullable=true, description="LOT번호"),
* @OA\Property(property="stock_lot_id", type="integer", nullable=true, description="재고 LOT ID"),
* @OA\Property(property="remarks", type="string", nullable=true, description="비고"),
* @OA\Property(property="created_at", type="string", format="date-time"),
* @OA\Property(property="updated_at", type="string", format="date-time")
* )
*
* @OA\Schema(
* schema="ShipmentWithItems",
* type="object",
* description="출하 상세 정보 (품목 포함)",
* allOf={
* @OA\Schema(ref="#/components/schemas/Shipment"),
* @OA\Schema(
*
* @OA\Property(
* property="items",
* type="array",
* description="출하 품목 목록",
*
* @OA\Items(ref="#/components/schemas/ShipmentItem")
* )
* )
* }
* )
*
* @OA\Schema(
* schema="ShipmentStats",
* type="object",
* description="출하 통계",
*
* @OA\Property(property="total", type="integer", example=100, description="전체 건수"),
* @OA\Property(property="scheduled", type="integer", example=30, description="출고예정 건수"),
* @OA\Property(property="ready", type="integer", example=20, description="출하대기 건수"),
* @OA\Property(property="shipping", type="integer", example=15, description="배송중 건수"),
* @OA\Property(property="completed", type="integer", example=35, description="배송완료 건수"),
* @OA\Property(property="urgent", type="integer", example=5, description="긴급 건수"),
* @OA\Property(property="today_scheduled", type="integer", example=10, description="오늘 출고예정 건수")
* )
*
* @OA\Schema(
* schema="ShipmentStatsByStatus",
* type="object",
* description="상태별 출하 통계",
*
* @OA\Property(
* property="scheduled",
* type="object",
* @OA\Property(property="label", type="string", example="출고예정"),
* @OA\Property(property="count", type="integer", example=30)
* ),
* @OA\Property(
* property="ready",
* type="object",
* @OA\Property(property="label", type="string", example="출하대기"),
* @OA\Property(property="count", type="integer", example=20)
* ),
* @OA\Property(
* property="shipping",
* type="object",
* @OA\Property(property="label", type="string", example="배송중"),
* @OA\Property(property="count", type="integer", example=15)
* ),
* @OA\Property(
* property="completed",
* type="object",
* @OA\Property(property="label", type="string", example="배송완료"),
* @OA\Property(property="count", type="integer", example=35)
* )
* )
*
* @OA\Schema(
* schema="ShipmentStoreRequest",
* type="object",
* required={"scheduled_date"},
*
* @OA\Property(property="shipment_no", type="string", example="SHP-20251226-0001", description="출하번호 (자동 생성 가능)"),
* @OA\Property(property="lot_no", type="string", example="LOT-001", description="LOT번호"),
* @OA\Property(property="order_id", type="integer", example=1, description="수주 ID"),
* @OA\Property(property="scheduled_date", type="string", format="date", example="2025-12-26", description="출고예정일"),
* @OA\Property(property="status", type="string", enum={"scheduled","ready","shipping","completed"}, example="scheduled", description="상태"),
* @OA\Property(property="priority", type="string", enum={"urgent","normal","low"}, example="normal", description="우선순위"),
* @OA\Property(property="delivery_method", type="string", enum={"pickup","direct","logistics"}, example="pickup", description="배송방식"),
* @OA\Property(property="client_id", type="integer", description="거래처 ID"),
* @OA\Property(property="customer_name", type="string", example="(주)고객사", description="발주처명"),
* @OA\Property(property="site_name", type="string", example="서울현장", description="현장명"),
* @OA\Property(property="delivery_address", type="string", example="서울시 강남구", description="배송주소"),
* @OA\Property(property="receiver", type="string", example="홍길동", description="인수자"),
* @OA\Property(property="receiver_contact", type="string", example="010-1234-5678", description="인수자 연락처"),
* @OA\Property(property="can_ship", type="boolean", example=true, description="출하가능 여부"),
* @OA\Property(property="deposit_confirmed", type="boolean", example=true, description="입금확인 여부"),
* @OA\Property(property="invoice_issued", type="boolean", example=false, description="세금계산서 발행 여부"),
* @OA\Property(property="loading_manager", type="string", description="상차담당자"),
* @OA\Property(property="loading_time", type="string", format="date-time", description="상차시간"),
* @OA\Property(property="logistics_company", type="string", description="물류사"),
* @OA\Property(property="vehicle_tonnage", type="string", description="차량 톤수"),
* @OA\Property(property="shipping_cost", type="number", description="운송비"),
* @OA\Property(property="vehicle_no", type="string", description="차량번호"),
* @OA\Property(property="driver_name", type="string", description="운전자명"),
* @OA\Property(property="driver_contact", type="string", description="운전자 연락처"),
* @OA\Property(property="expected_arrival", type="string", format="date-time", description="입차예정시간"),
* @OA\Property(property="remarks", type="string", description="비고"),
* @OA\Property(
* property="items",
* type="array",
* description="출하 품목",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="seq", type="integer", example=1),
* @OA\Property(property="item_code", type="string", example="ITEM-001"),
* @OA\Property(property="item_name", type="string", example="제품 A"),
* @OA\Property(property="floor_unit", type="string", example="1층/M01"),
* @OA\Property(property="specification", type="string", example="100x200mm"),
* @OA\Property(property="quantity", type="number", example=10.5),
* @OA\Property(property="unit", type="string", example="EA"),
* @OA\Property(property="lot_no", type="string", example="LOT-001"),
* @OA\Property(property="stock_lot_id", type="integer"),
* @OA\Property(property="remarks", type="string")
* )
* )
* )
*
* @OA\Schema(
* schema="ShipmentUpdateStatusRequest",
* type="object",
* required={"status"},
*
* @OA\Property(property="status", type="string", enum={"scheduled","ready","shipping","completed"}, example="shipping", description="변경할 상태"),
* @OA\Property(property="loading_time", type="string", format="date-time", description="상차시간 (ready 상태 시)"),
* @OA\Property(property="loading_completed_at", type="string", format="date-time", description="상차완료 일시 (shipping 상태 시)"),
* @OA\Property(property="vehicle_no", type="string", description="차량번호 (shipping 상태 시)"),
* @OA\Property(property="driver_name", type="string", description="운전자명 (shipping 상태 시)"),
* @OA\Property(property="driver_contact", type="string", description="운전자 연락처 (shipping 상태 시)"),
* @OA\Property(property="confirmed_arrival", type="string", format="date-time", description="입차확정시간 (completed 상태 시)")
* )
*
* @OA\Schema(
* schema="LotOption",
* type="object",
* description="LOT 옵션",
*
* @OA\Property(property="id", type="integer", example=1, description="LOT ID"),
* @OA\Property(property="lot_no", type="string", example="251226-01", description="LOT번호"),
* @OA\Property(property="item_code", type="string", example="ITEM-001", description="품목코드"),
* @OA\Property(property="item_name", type="string", example="원재료 A", description="품목명"),
* @OA\Property(property="qty", type="number", format="float", example=100.0, description="수량"),
* @OA\Property(property="available_qty", type="number", format="float", example=80.0, description="가용수량"),
* @OA\Property(property="unit", type="string", example="EA", description="단위"),
* @OA\Property(property="location", type="string", example="A-01-01", description="위치"),
* @OA\Property(property="fifo_order", type="integer", example=1, description="FIFO 순서")
* )
*/
class ShipmentApi
{
/**
* @OA\Get(
* path="/api/v1/shipments",
* tags={"Shipments"},
* summary="출하 목록 조회",
* description="출하 목록을 조회합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Parameter(name="search", in="query", description="검색어 (출하번호, LOT번호, 발주처명, 현장명)", @OA\Schema(type="string")),
* @OA\Parameter(name="status", in="query", description="상태", @OA\Schema(type="string", enum={"scheduled","ready","shipping","completed"})),
* @OA\Parameter(name="priority", in="query", description="우선순위", @OA\Schema(type="string", enum={"urgent","normal","low"})),
* @OA\Parameter(name="delivery_method", in="query", description="배송방식", @OA\Schema(type="string", enum={"pickup","direct","logistics"})),
* @OA\Parameter(name="scheduled_from", in="query", description="예정일 시작", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="scheduled_to", in="query", description="예정일 종료", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="can_ship", in="query", description="출하가능 여부", @OA\Schema(type="boolean")),
* @OA\Parameter(name="deposit_confirmed", in="query", description="입금확인 여부", @OA\Schema(type="boolean")),
* @OA\Parameter(name="sort_by", in="query", description="정렬 기준", @OA\Schema(type="string", enum={"scheduled_date","shipment_no","customer_name","priority"}, default="scheduled_date")),
* @OA\Parameter(name="sort_dir", in="query", description="정렬 방향", @OA\Schema(type="string", enum={"asc","desc"}, default="desc")),
* @OA\Parameter(ref="#/components/parameters/Page"),
* @OA\Parameter(ref="#/components/parameters/Size"),
*
* @OA\Response(
* response=200,
* description="조회 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(
* property="data",
* type="object",
* @OA\Property(property="current_page", type="integer", example=1),
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/ShipmentWithItems")),
* @OA\Property(property="per_page", type="integer", example=20),
* @OA\Property(property="total", type="integer", example=100)
* )
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function index() {}
/**
* @OA\Get(
* path="/api/v1/shipments/stats",
* tags={"Shipments"},
* summary="출하 통계 조회",
* description="전체 출하 통계를 조회합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Response(
* response=200,
* description="조회 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(property="data", ref="#/components/schemas/ShipmentStats")
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function stats() {}
/**
* @OA\Get(
* path="/api/v1/shipments/stats-by-status",
* tags={"Shipments"},
* summary="상태별 출하 통계 조회",
* description="상태별 출하 통계를 조회합니다 (탭용).",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Response(
* response=200,
* description="조회 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(property="data", ref="#/components/schemas/ShipmentStatsByStatus")
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function statsByStatus() {}
/**
* @OA\Get(
* path="/api/v1/shipments/{id}",
* tags={"Shipments"},
* summary="출하 상세 조회",
* description="출하 상세 정보를 조회합니다. 품목 목록이 포함됩니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="출하 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="조회 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(property="data", ref="#/components/schemas/ShipmentWithItems")
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=404, description="출하 없음", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function show() {}
/**
* @OA\Post(
* path="/api/v1/shipments",
* tags={"Shipments"},
* summary="출하 생성",
* description="새 출하를 생성합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/ShipmentStoreRequest")
* ),
*
* @OA\Response(
* response=201,
* description="생성 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(property="data", ref="#/components/schemas/ShipmentWithItems")
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=422, description="유효성 검증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function store() {}
/**
* @OA\Put(
* path="/api/v1/shipments/{id}",
* tags={"Shipments"},
* summary="출하 수정",
* description="출하 정보를 수정합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="출하 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/ShipmentStoreRequest")
* ),
*
* @OA\Response(
* response=200,
* description="수정 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(property="data", ref="#/components/schemas/ShipmentWithItems")
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=404, description="출하 없음", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=422, description="유효성 검증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function update() {}
/**
* @OA\Patch(
* path="/api/v1/shipments/{id}/status",
* tags={"Shipments"},
* summary="출하 상태 변경",
* description="출하 상태를 변경합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="출하 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/ShipmentUpdateStatusRequest")
* ),
*
* @OA\Response(
* response=200,
* description="상태 변경 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(property="data", ref="#/components/schemas/ShipmentWithItems")
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=404, description="출하 없음", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=422, description="유효성 검증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function updateStatus() {}
/**
* @OA\Delete(
* path="/api/v1/shipments/{id}",
* tags={"Shipments"},
* summary="출하 삭제",
* description="출하를 삭제합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="출하 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="삭제 성공",
*
* @OA\JsonContent(ref="#/components/schemas/ApiResponse")
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=404, description="출하 없음", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function destroy() {}
/**
* @OA\Get(
* path="/api/v1/shipments/options/lots",
* tags={"Shipments"},
* summary="LOT 옵션 조회",
* description="출고 가능한 LOT 목록을 조회합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Response(
* response=200,
* description="조회 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/LotOption"))
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function lotOptions() {}
/**
* @OA\Get(
* path="/api/v1/shipments/options/logistics",
* tags={"Shipments"},
* summary="물류사 옵션 조회",
* description="물류사 목록을 조회합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Response(
* response=200,
* description="조회 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="value", type="string", example="CJ대한통운"),
* @OA\Property(property="label", type="string", example="CJ대한통운")
* )
* )
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function logisticsOptions() {}
/**
* @OA\Get(
* path="/api/v1/shipments/options/vehicle-tonnage",
* tags={"Shipments"},
* summary="차량 톤수 옵션 조회",
* description="차량 톤수 목록을 조회합니다.",
* security={{"ApiKeyAuth":{}},{"BearerAuth":{}}},
*
* @OA\Response(
* response=200,
* description="조회 성공",
*
* @OA\JsonContent(
* allOf={
*
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
* @OA\Schema(
*
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="value", type="string", example="5톤"),
* @OA\Property(property="label", type="string", example="5톤")
* )
* )
* )
* }
* )
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")),
* @OA\Response(response=500, description="서버 에러", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
public function vehicleTonnageOptions() {}
}