feat:테넌트설정 API 및 다수 서비스 개선
- TenantSetting CRUD API 추가 - Calendar, Entertainment, VAT 서비스 개선 - 5130 BOM 계산 로직 수정 - quote_items에 item_type 컬럼 추가 - tenant_settings 테이블 마이그레이션 - Swagger 문서 업데이트
This commit is contained in:
@@ -44,6 +44,7 @@
|
||||
*
|
||||
* @OA\Items(ref="#/components/schemas/CalendarScheduleItem")
|
||||
* ),
|
||||
*
|
||||
* @OA\Property(property="total_count", type="integer", description="총 일정 수", example=15)
|
||||
* )
|
||||
*/
|
||||
@@ -143,4 +144,4 @@ class CalendarApi
|
||||
* )
|
||||
*/
|
||||
public function summary() {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
*
|
||||
* @OA\Items(ref="#/components/schemas/EntertainmentAmountCard")
|
||||
* ),
|
||||
*
|
||||
* @OA\Property(
|
||||
* property="check_points",
|
||||
* type="array",
|
||||
@@ -144,4 +145,4 @@ class EntertainmentApi
|
||||
* )
|
||||
*/
|
||||
public function summary() {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,6 +162,7 @@
|
||||
* description="거래명세서 일괄 발행 요청",
|
||||
*
|
||||
* @OA\Property(property="ids", type="array", minItems=1, maxItems=100, description="발행할 매출 ID 목록 (최대 100개)",
|
||||
*
|
||||
* @OA\Items(type="integer", example=1)
|
||||
* )
|
||||
* )
|
||||
@@ -174,6 +175,7 @@
|
||||
* @OA\Property(property="issued", type="integer", example=8, description="발행 성공 건수"),
|
||||
* @OA\Property(property="failed", type="integer", example=2, description="발행 실패 건수"),
|
||||
* @OA\Property(property="errors", type="object", description="실패 상세 (ID: 에러메시지)",
|
||||
*
|
||||
* @OA\AdditionalProperties(type="string", example="확정 상태가 아닌 매출입니다.")
|
||||
* )
|
||||
* )
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
* },
|
||||
* description="건수 또는 텍스트"
|
||||
* ),
|
||||
*
|
||||
* @OA\Property(property="path", type="string", description="이동 경로", example="/sales/order-management-sales"),
|
||||
* @OA\Property(property="isHighlighted", type="boolean", description="강조 표시 여부", example=false)
|
||||
* )
|
||||
@@ -91,4 +92,4 @@ class StatusBoardApi
|
||||
* )
|
||||
*/
|
||||
public function summary() {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,6 +177,7 @@
|
||||
* description="세금계산서 일괄 발행 요청",
|
||||
*
|
||||
* @OA\Property(property="ids", type="array", minItems=1, maxItems=100, description="발행할 세금계산서 ID 목록 (최대 100개)",
|
||||
*
|
||||
* @OA\Items(type="integer", example=1)
|
||||
* )
|
||||
* )
|
||||
@@ -189,6 +190,7 @@
|
||||
* @OA\Property(property="issued", type="integer", example=8, description="발행 성공 건수"),
|
||||
* @OA\Property(property="failed", type="integer", example=2, description="발행 실패 건수"),
|
||||
* @OA\Property(property="errors", type="object", description="실패 상세 (ID: 에러메시지)",
|
||||
*
|
||||
* @OA\AdditionalProperties(type="string", example="이미 발행된 세금계산서입니다.")
|
||||
* )
|
||||
* )
|
||||
|
||||
293
app/Swagger/v1/TenantSettingApi.php
Normal file
293
app/Swagger/v1/TenantSettingApi.php
Normal file
@@ -0,0 +1,293 @@
|
||||
<?php
|
||||
|
||||
namespace App\Swagger\v1;
|
||||
|
||||
/**
|
||||
* @OA\Tag(
|
||||
* name="TenantSettings",
|
||||
* description="테넌트 설정 관리 API"
|
||||
* )
|
||||
*
|
||||
* @OA\Schema(
|
||||
* schema="TenantSetting",
|
||||
* type="object",
|
||||
* required={"id", "tenant_id", "setting_group", "setting_key"},
|
||||
*
|
||||
* @OA\Property(property="id", type="integer", example=1),
|
||||
* @OA\Property(property="tenant_id", type="integer", example=287),
|
||||
* @OA\Property(property="setting_group", type="string", example="stock"),
|
||||
* @OA\Property(property="setting_key", type="string", example="stock_item_types"),
|
||||
* @OA\Property(property="setting_value", type="object", example={"RM", "SM", "CS", "PT", "SF"}),
|
||||
* @OA\Property(property="description", type="string", nullable=true, example="재고관리 대상 품목유형"),
|
||||
* @OA\Property(property="updated_by", type="integer", nullable=true, example=1),
|
||||
* @OA\Property(property="created_at", type="string", format="date-time"),
|
||||
* @OA\Property(property="updated_at", type="string", format="date-time")
|
||||
* )
|
||||
*
|
||||
* @OA\Schema(
|
||||
* schema="TenantSettingStoreRequest",
|
||||
* type="object",
|
||||
* required={"group", "key", "value"},
|
||||
*
|
||||
* @OA\Property(property="group", type="string", maxLength=50, example="stock", description="설정 그룹"),
|
||||
* @OA\Property(property="key", type="string", maxLength=100, example="stock_item_types", description="설정 키"),
|
||||
* @OA\Property(property="value", type="object", example={"RM", "SM", "CS", "PT", "SF"}, description="설정 값 (JSON)"),
|
||||
* @OA\Property(property="description", type="string", nullable=true, maxLength=255, example="재고관리 대상 품목유형", description="설정 설명")
|
||||
* )
|
||||
*
|
||||
* @OA\Schema(
|
||||
* schema="TenantSettingBulkRequest",
|
||||
* type="object",
|
||||
* required={"group", "settings"},
|
||||
*
|
||||
* @OA\Property(property="group", type="string", maxLength=50, example="stock", description="설정 그룹"),
|
||||
* @OA\Property(
|
||||
* property="settings",
|
||||
* type="array",
|
||||
*
|
||||
* @OA\Items(
|
||||
* type="object",
|
||||
* required={"key", "value"},
|
||||
*
|
||||
* @OA\Property(property="key", type="string", example="stock_item_types"),
|
||||
* @OA\Property(property="value", type="object", example={"RM", "SM", "CS"}),
|
||||
* @OA\Property(property="description", type="string", nullable=true)
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
class TenantSettingApi
|
||||
{
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/api/v1/tenant-settings",
|
||||
* tags={"TenantSettings"},
|
||||
* summary="테넌트 설정 목록 조회",
|
||||
* description="현재 테넌트의 모든 설정을 그룹별로 조회합니다.",
|
||||
* security={{"ApiKeyAuth":{}}, {"BearerAuth":{}}},
|
||||
*
|
||||
* @OA\Parameter(
|
||||
* name="group",
|
||||
* in="query",
|
||||
* required=false,
|
||||
* description="특정 그룹만 조회",
|
||||
*
|
||||
* @OA\Schema(type="string", example="stock")
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="조회 성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="조회되었습니다."),
|
||||
* @OA\Property(
|
||||
* property="data",
|
||||
* type="object",
|
||||
* @OA\Property(
|
||||
* property="stock",
|
||||
* type="object",
|
||||
* @OA\Property(
|
||||
* property="stock_item_types",
|
||||
* type="object",
|
||||
* @OA\Property(property="value", type="array", @OA\Items(type="string")),
|
||||
* @OA\Property(property="description", type="string"),
|
||||
* @OA\Property(property="updated_at", type="string")
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function index() {}
|
||||
|
||||
/**
|
||||
* @OA\Get(
|
||||
* path="/api/v1/tenant-settings/{group}/{key}",
|
||||
* tags={"TenantSettings"},
|
||||
* summary="단일 설정 조회",
|
||||
* description="그룹과 키로 특정 설정값을 조회합니다.",
|
||||
* security={{"ApiKeyAuth":{}}, {"BearerAuth":{}}},
|
||||
*
|
||||
* @OA\Parameter(
|
||||
* name="group",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* description="설정 그룹",
|
||||
*
|
||||
* @OA\Schema(type="string", example="stock")
|
||||
* ),
|
||||
*
|
||||
* @OA\Parameter(
|
||||
* name="key",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* description="설정 키",
|
||||
*
|
||||
* @OA\Schema(type="string", example="stock_item_types")
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="조회 성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="조회되었습니다."),
|
||||
* @OA\Property(
|
||||
* property="data",
|
||||
* type="object",
|
||||
* @OA\Property(property="group", type="string", example="stock"),
|
||||
* @OA\Property(property="key", type="string", example="stock_item_types"),
|
||||
* @OA\Property(property="value", type="array", @OA\Items(type="string"), example={"RM", "SM", "CS", "PT", "SF"})
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function show() {}
|
||||
|
||||
/**
|
||||
* @OA\Post(
|
||||
* path="/api/v1/tenant-settings",
|
||||
* tags={"TenantSettings"},
|
||||
* summary="설정 저장/업데이트",
|
||||
* description="설정을 저장하거나 업데이트합니다. 이미 존재하는 경우 업데이트됩니다.",
|
||||
* security={{"ApiKeyAuth":{}}, {"BearerAuth":{}}},
|
||||
*
|
||||
* @OA\RequestBody(
|
||||
* required=true,
|
||||
*
|
||||
* @OA\JsonContent(ref="#/components/schemas/TenantSettingStoreRequest")
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="저장 성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="수정되었습니다."),
|
||||
* @OA\Property(property="data", ref="#/components/schemas/TenantSetting")
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function store() {}
|
||||
|
||||
/**
|
||||
* @OA\Put(
|
||||
* path="/api/v1/tenant-settings/bulk",
|
||||
* tags={"TenantSettings"},
|
||||
* summary="설정 일괄 저장",
|
||||
* description="같은 그룹의 여러 설정을 일괄 저장합니다.",
|
||||
* security={{"ApiKeyAuth":{}}, {"BearerAuth":{}}},
|
||||
*
|
||||
* @OA\RequestBody(
|
||||
* required=true,
|
||||
*
|
||||
* @OA\JsonContent(ref="#/components/schemas/TenantSettingBulkRequest")
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="일괄 저장 성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="일괄 저장되었습니다."),
|
||||
* @OA\Property(
|
||||
* property="data",
|
||||
* type="object",
|
||||
* @OA\Property(property="updated", type="integer", example=3)
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function bulkUpdate() {}
|
||||
|
||||
/**
|
||||
* @OA\Post(
|
||||
* path="/api/v1/tenant-settings/initialize",
|
||||
* tags={"TenantSettings"},
|
||||
* summary="기본 설정 초기화",
|
||||
* description="시스템 기본 설정값으로 초기화합니다. 이미 존재하는 설정은 건드리지 않습니다.",
|
||||
* security={{"ApiKeyAuth":{}}, {"BearerAuth":{}}},
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="초기화 성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="생성되었습니다."),
|
||||
* @OA\Property(
|
||||
* property="data",
|
||||
* type="object",
|
||||
* @OA\Property(property="initialized", type="integer", example=3)
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function initialize() {}
|
||||
|
||||
/**
|
||||
* @OA\Delete(
|
||||
* path="/api/v1/tenant-settings/{group}/{key}",
|
||||
* tags={"TenantSettings"},
|
||||
* summary="설정 삭제",
|
||||
* description="특정 설정을 삭제합니다.",
|
||||
* security={{"ApiKeyAuth":{}}, {"BearerAuth":{}}},
|
||||
*
|
||||
* @OA\Parameter(
|
||||
* name="group",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* description="설정 그룹",
|
||||
*
|
||||
* @OA\Schema(type="string", example="stock")
|
||||
* ),
|
||||
*
|
||||
* @OA\Parameter(
|
||||
* name="key",
|
||||
* in="path",
|
||||
* required=true,
|
||||
* description="설정 키",
|
||||
*
|
||||
* @OA\Schema(type="string", example="stock_item_types")
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="삭제 성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="삭제되었습니다.")
|
||||
* )
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=404,
|
||||
* description="설정을 찾을 수 없음",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=false),
|
||||
* @OA\Property(property="message", type="string", example="해당 데이터를 찾을 수 없습니다.")
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function destroy() {}
|
||||
}
|
||||
@@ -13,6 +13,7 @@
|
||||
* type="object",
|
||||
* description="오늘의 이슈 항목",
|
||||
* required={"id", "badge", "content", "time"},
|
||||
*
|
||||
* @OA\Property(property="id", type="string", example="order_123", description="항목 고유 ID"),
|
||||
* @OA\Property(
|
||||
* property="badge",
|
||||
@@ -32,12 +33,15 @@
|
||||
* schema="TodayIssueSummaryResponse",
|
||||
* type="object",
|
||||
* description="오늘의 이슈 리스트 응답",
|
||||
*
|
||||
* @OA\Property(
|
||||
* property="items",
|
||||
* type="array",
|
||||
* description="이슈 항목 리스트",
|
||||
*
|
||||
* @OA\Items(ref="#/components/schemas/TodayIssueItem")
|
||||
* ),
|
||||
*
|
||||
* @OA\Property(property="total_count", type="integer", example=25, description="전체 이슈 건수")
|
||||
* )
|
||||
*
|
||||
@@ -46,6 +50,7 @@
|
||||
* type="object",
|
||||
* description="읽지 않은 이슈 항목 (헤더 알림용)",
|
||||
* required={"id", "badge", "content", "time", "created_at"},
|
||||
*
|
||||
* @OA\Property(property="id", type="integer", example=123, description="이슈 고유 ID"),
|
||||
* @OA\Property(
|
||||
* property="badge",
|
||||
@@ -72,12 +77,15 @@
|
||||
* schema="TodayIssueUnreadResponse",
|
||||
* type="object",
|
||||
* description="읽지 않은 이슈 목록 응답",
|
||||
*
|
||||
* @OA\Property(
|
||||
* property="items",
|
||||
* type="array",
|
||||
* description="읽지 않은 이슈 항목 리스트",
|
||||
*
|
||||
* @OA\Items(ref="#/components/schemas/TodayIssueUnreadItem")
|
||||
* ),
|
||||
*
|
||||
* @OA\Property(property="total", type="integer", example=5, description="읽지 않은 전체 이슈 건수")
|
||||
* )
|
||||
*
|
||||
@@ -85,6 +93,7 @@
|
||||
* schema="TodayIssueUnreadCountResponse",
|
||||
* type="object",
|
||||
* description="읽지 않은 이슈 개수 응답",
|
||||
*
|
||||
* @OA\Property(property="count", type="integer", example=5, description="읽지 않은 이슈 건수")
|
||||
* )
|
||||
*
|
||||
@@ -92,6 +101,7 @@
|
||||
* schema="TodayIssueMarkAllReadResponse",
|
||||
* type="object",
|
||||
* description="모든 이슈 읽음 처리 응답",
|
||||
*
|
||||
* @OA\Property(property="count", type="integer", example=5, description="읽음 처리된 이슈 건수")
|
||||
* )
|
||||
*/
|
||||
@@ -111,14 +121,17 @@ class TodayIssueApi
|
||||
* in="query",
|
||||
* description="조회할 최대 항목 수",
|
||||
* required=false,
|
||||
*
|
||||
* @OA\Schema(type="integer", default=30, minimum=1, maximum=100)
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="데이터를 조회했습니다."),
|
||||
* @OA\Property(
|
||||
@@ -131,8 +144,10 @@ class TodayIssueApi
|
||||
* @OA\Response(
|
||||
* response=401,
|
||||
* description="인증 실패",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=false),
|
||||
* @OA\Property(property="message", type="string", example="인증에 실패했습니다.")
|
||||
* )
|
||||
@@ -155,14 +170,17 @@ public function summary() {}
|
||||
* in="query",
|
||||
* description="조회할 최대 항목 수 (기본 10)",
|
||||
* required=false,
|
||||
*
|
||||
* @OA\Schema(type="integer", default=10, minimum=1, maximum=50)
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="데이터를 조회했습니다."),
|
||||
* @OA\Property(
|
||||
@@ -175,8 +193,10 @@ public function summary() {}
|
||||
* @OA\Response(
|
||||
* response=401,
|
||||
* description="인증 실패",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=false),
|
||||
* @OA\Property(property="message", type="string", example="인증에 실패했습니다.")
|
||||
* )
|
||||
@@ -197,8 +217,10 @@ public function unread() {}
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="데이터를 조회했습니다."),
|
||||
* @OA\Property(
|
||||
@@ -211,8 +233,10 @@ public function unread() {}
|
||||
* @OA\Response(
|
||||
* response=401,
|
||||
* description="인증 실패",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=false),
|
||||
* @OA\Property(property="message", type="string", example="인증에 실패했습니다.")
|
||||
* )
|
||||
@@ -235,14 +259,17 @@ public function unreadCount() {}
|
||||
* in="path",
|
||||
* description="이슈 ID",
|
||||
* required=true,
|
||||
*
|
||||
* @OA\Schema(type="integer", example=123)
|
||||
* ),
|
||||
*
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="알림을 읽음 처리했습니다.")
|
||||
* )
|
||||
@@ -251,8 +278,10 @@ public function unreadCount() {}
|
||||
* @OA\Response(
|
||||
* response=404,
|
||||
* description="이슈를 찾을 수 없음",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=false),
|
||||
* @OA\Property(property="message", type="string", example="데이터를 찾을 수 없습니다.")
|
||||
* )
|
||||
@@ -261,8 +290,10 @@ public function unreadCount() {}
|
||||
* @OA\Response(
|
||||
* response=401,
|
||||
* description="인증 실패",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=false),
|
||||
* @OA\Property(property="message", type="string", example="인증에 실패했습니다.")
|
||||
* )
|
||||
@@ -283,8 +314,10 @@ public function markAsRead() {}
|
||||
* @OA\Response(
|
||||
* response=200,
|
||||
* description="성공",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=true),
|
||||
* @OA\Property(property="message", type="string", example="모든 알림을 읽음 처리했습니다."),
|
||||
* @OA\Property(
|
||||
@@ -297,8 +330,10 @@ public function markAsRead() {}
|
||||
* @OA\Response(
|
||||
* response=401,
|
||||
* description="인증 실패",
|
||||
*
|
||||
* @OA\JsonContent(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="success", type="boolean", example=false),
|
||||
* @OA\Property(property="message", type="string", example="인증에 실패했습니다.")
|
||||
* )
|
||||
@@ -306,4 +341,4 @@ public function markAsRead() {}
|
||||
* )
|
||||
*/
|
||||
public function markAllAsRead() {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
*
|
||||
* @OA\Items(ref="#/components/schemas/VatAmountCard")
|
||||
* ),
|
||||
*
|
||||
* @OA\Property(
|
||||
* property="check_points",
|
||||
* type="array",
|
||||
|
||||
@@ -431,6 +431,7 @@ public function resolveIssue() {}
|
||||
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
|
||||
* @OA\Schema(@OA\Property(property="data", type="array", @OA\Items(
|
||||
* type="object",
|
||||
*
|
||||
* @OA\Property(property="id", type="integer", example=1),
|
||||
* @OA\Property(property="material_code", type="string", example="MAT-100"),
|
||||
* @OA\Property(property="material_name", type="string", example="방충망 프레임"),
|
||||
@@ -467,6 +468,7 @@ public function materials() {}
|
||||
*
|
||||
* @OA\Schema(ref="#/components/schemas/ApiResponse"),
|
||||
* @OA\Schema(@OA\Property(property="data", type="object",
|
||||
*
|
||||
* @OA\Property(property="work_order_id", type="integer", example=1),
|
||||
* @OA\Property(property="material_count", type="integer", example=3),
|
||||
* @OA\Property(property="input_at", type="string", example="2025-01-20 10:30:00")
|
||||
|
||||
Reference in New Issue
Block a user