diff --git a/app/Swagger/v1/AdminFcmApi.php b/app/Swagger/v1/AdminFcmApi.php index 5dace36..50dc846 100644 --- a/app/Swagger/v1/AdminFcmApi.php +++ b/app/Swagger/v1/AdminFcmApi.php @@ -144,6 +144,7 @@ * @OA\Property( * property="data", * type="array", + * * @OA\Items(ref="#/components/schemas/AdminFcmToken") * ) * ) @@ -159,6 +160,7 @@ * @OA\Property( * property="data", * type="array", + * * @OA\Items(ref="#/components/schemas/AdminFcmSendLog") * ) * ) @@ -177,6 +179,7 @@ class AdminFcmApi * header="X-Sender-Id", * description="발송자 ID (MNG 관리자 ID)", * required=false, + * * @OA\Schema(type="integer", example=10) * ), * @@ -216,6 +219,7 @@ class AdminFcmApi * * @OA\JsonContent(ref="#/components/schemas/ErrorResponse") * ), + * * @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse")) * ) */ @@ -559,4 +563,4 @@ public function deleteToken() {} * ) */ public function history() {} -} \ No newline at end of file +} diff --git a/app/Swagger/v1/BillApi.php b/app/Swagger/v1/BillApi.php index 3ae51c6..5357c1b 100644 --- a/app/Swagger/v1/BillApi.php +++ b/app/Swagger/v1/BillApi.php @@ -12,6 +12,7 @@ * schema="Bill", * type="object", * required={"id", "tenant_id", "bill_number", "bill_type", "amount", "issue_date", "maturity_date", "status"}, + * * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="tenant_id", type="integer", example=1), * @OA\Property(property="bill_number", type="string", example="202412000001", description="어음번호"), @@ -49,6 +50,7 @@ * @OA\Property( * property="installments", * type="array", + * * @OA\Items(ref="#/components/schemas/BillInstallment") * ) * ) @@ -56,6 +58,7 @@ * @OA\Schema( * schema="BillInstallment", * type="object", + * * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="bill_id", type="integer", example=1), * @OA\Property(property="installment_date", type="string", format="date", example="2024-12-15", description="차수 일자"), @@ -68,11 +71,14 @@ * @OA\Schema( * schema="BillPagination", * type="object", + * * @OA\Property( * property="data", * type="array", + * * @OA\Items(ref="#/components/schemas/Bill") * ), + * * @OA\Property(property="current_page", type="integer", example=1), * @OA\Property(property="last_page", type="integer", example=5), * @OA\Property(property="per_page", type="integer", example=20), @@ -85,6 +91,7 @@ * schema="BillCreateRequest", * type="object", * required={"bill_type", "amount", "issue_date", "maturity_date"}, + * * @OA\Property(property="bill_number", type="string", nullable=true, example="202412000001", description="어음번호 (미입력시 자동생성)"), * @OA\Property(property="bill_type", type="string", enum={"received", "issued"}, example="received", description="어음 구분"), * @OA\Property(property="client_id", type="integer", nullable=true, example=10, description="거래처 ID"), @@ -101,8 +108,10 @@ * property="installments", * type="array", * nullable=true, + * * @OA\Items( * type="object", + * * @OA\Property(property="date", type="string", format="date", example="2024-12-15"), * @OA\Property(property="amount", type="number", example=5000000), * @OA\Property(property="note", type="string", nullable=true, example="1차 분할") @@ -113,6 +122,7 @@ * @OA\Schema( * schema="BillUpdateRequest", * type="object", + * * @OA\Property(property="bill_number", type="string", nullable=true, example="202412000001"), * @OA\Property(property="bill_type", type="string", enum={"received", "issued"}, nullable=true), * @OA\Property(property="client_id", type="integer", nullable=true), @@ -131,14 +141,17 @@ * @OA\Schema( * schema="BillSummary", * type="object", + * * @OA\Property(property="total_amount", type="number", example=50000000, description="총 금액"), * @OA\Property(property="total_count", type="integer", example=10, description="총 건수"), * @OA\Property( * property="by_type", * type="object", * description="구분별 합계", + * * @OA\AdditionalProperties( * type="object", + * * @OA\Property(property="bill_type", type="string"), * @OA\Property(property="total", type="number"), * @OA\Property(property="count", type="integer") @@ -162,6 +175,7 @@ class BillApi * summary="어음 목록 조회", * description="어음 목록을 페이지네이션하여 조회합니다.", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="search", in="query", description="검색어 (어음번호, 거래처명, 메모)", @OA\Schema(type="string")), * @OA\Parameter(name="bill_type", in="query", description="어음 구분", @OA\Schema(type="string", enum={"received", "issued"})), * @OA\Parameter(name="status", in="query", description="상태", @OA\Schema(type="string")), @@ -175,10 +189,13 @@ class BillApi * @OA\Parameter(name="sort_dir", in="query", description="정렬 방향", @OA\Schema(type="string", enum={"asc", "desc"}, default="desc")), * @OA\Parameter(name="per_page", in="query", description="페이지당 건수", @OA\Schema(type="integer", default=20)), * @OA\Parameter(name="page", in="query", description="페이지 번호", @OA\Schema(type="integer", default=1)), + * * @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/BillPagination") @@ -196,19 +213,25 @@ public function index() {} * summary="어음 등록", * description="새로운 어음을 등록합니다.", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\RequestBody( * required=true, + * * @OA\JsonContent(ref="#/components/schemas/BillCreateRequest") * ), + * * @OA\Response( * response=201, * 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/Bill") * ) * ), + * * @OA\Response(response=422, description="유효성 검사 실패") * ) */ @@ -222,16 +245,21 @@ public function store() {} * 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( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string", example="데이터를 조회했습니다."), * @OA\Property(property="data", ref="#/components/schemas/Bill") * ) * ), + * * @OA\Response(response=404, description="어음을 찾을 수 없음") * ) */ @@ -245,20 +273,27 @@ public function show() {} * 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/BillUpdateRequest") * ), + * * @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/Bill") * ) * ), + * * @OA\Response(response=404, description="어음을 찾을 수 없음"), * @OA\Response(response=422, description="유효성 검사 실패") * ) @@ -273,16 +308,21 @@ public function update() {} * summary="어음 삭제", * description="어음을 삭제합니다. (Soft Delete)", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="id", in="path", required=true, description="어음 ID", @OA\Schema(type="integer")), + * * @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="null") * ) * ), + * * @OA\Response(response=404, description="어음을 찾을 수 없음") * ) */ @@ -296,23 +336,31 @@ public function destroy() {} * 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( * required={"status"}, + * * @OA\Property(property="status", type="string", example="paymentComplete", description="변경할 상태") * ) * ), + * * @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/Bill") * ) * ), + * * @OA\Response(response=404, description="어음을 찾을 수 없음"), * @OA\Response(response=422, description="유효성 검사 실패") * ) @@ -327,15 +375,19 @@ public function updateStatus() {} * summary="어음 요약 조회", * description="기간별 어음 요약 정보를 조회합니다.", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="bill_type", in="query", description="어음 구분", @OA\Schema(type="string", enum={"received", "issued"})), * @OA\Parameter(name="issue_start_date", in="query", description="발행일 시작", @OA\Schema(type="string", format="date")), * @OA\Parameter(name="issue_end_date", in="query", description="발행일 종료", @OA\Schema(type="string", format="date")), * @OA\Parameter(name="maturity_start_date", in="query", description="만기일 시작", @OA\Schema(type="string", format="date")), * @OA\Parameter(name="maturity_end_date", in="query", description="만기일 종료", @OA\Schema(type="string", format="date")), + * * @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/BillSummary") diff --git a/app/Swagger/v1/ExpectedExpenseApi.php b/app/Swagger/v1/ExpectedExpenseApi.php index c503ad7..adfeb0e 100644 --- a/app/Swagger/v1/ExpectedExpenseApi.php +++ b/app/Swagger/v1/ExpectedExpenseApi.php @@ -11,6 +11,7 @@ * @OA\Schema( * schema="ExpectedExpense", * type="object", + * * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="tenant_id", type="integer", example=1), * @OA\Property(property="expected_payment_date", type="string", format="date", example="2025-01-15"), @@ -46,6 +47,7 @@ * @OA\Schema( * schema="ExpectedExpensePagination", * type="object", + * * @OA\Property(property="current_page", type="integer", example=1), * @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/ExpectedExpense")), * @OA\Property(property="first_page_url", type="string"), @@ -64,6 +66,7 @@ * schema="ExpectedExpenseCreateRequest", * type="object", * required={"expected_payment_date", "transaction_type", "amount"}, + * * @OA\Property(property="expected_payment_date", type="string", format="date", example="2025-01-15"), * @OA\Property(property="settlement_date", type="string", format="date", nullable=true, example="2025-01-10"), * @OA\Property(property="transaction_type", type="string", enum={"purchase","advance","suspense","rent","salary","insurance","tax","utilities","other"}, example="purchase"), @@ -80,6 +83,7 @@ * @OA\Schema( * schema="ExpectedExpenseUpdateRequest", * type="object", + * * @OA\Property(property="expected_payment_date", type="string", format="date", example="2025-01-20"), * @OA\Property(property="settlement_date", type="string", format="date", nullable=true), * @OA\Property(property="transaction_type", type="string", enum={"purchase","advance","suspense","rent","salary","insurance","tax","utilities","other"}), @@ -96,6 +100,7 @@ * @OA\Schema( * schema="ExpectedExpenseSummary", * type="object", + * * @OA\Property(property="total_amount", type="number", format="float", example=15000000), * @OA\Property(property="total_count", type="integer", example=12), * @OA\Property(property="by_payment_status", type="object"), @@ -111,6 +116,7 @@ class ExpectedExpenseApi * summary="미지급비용 목록 조회", * tags={"ExpectedExpense"}, * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="search", in="query", description="검색어 (거래처명, 계정과목, 적요)", @OA\Schema(type="string")), * @OA\Parameter(name="start_date", in="query", description="시작일", @OA\Schema(type="string", format="date")), * @OA\Parameter(name="end_date", in="query", description="종료일", @OA\Schema(type="string", format="date")), @@ -122,10 +128,13 @@ class ExpectedExpenseApi * @OA\Parameter(name="sort_dir", in="query", description="정렬 방향", @OA\Schema(type="string", enum={"asc","desc"}, default="asc")), * @OA\Parameter(name="per_page", in="query", description="페이지당 항목 수", @OA\Schema(type="integer", default=50)), * @OA\Parameter(name="page", in="query", description="페이지 번호", @OA\Schema(type="integer", default=1)), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", ref="#/components/schemas/ExpectedExpensePagination") @@ -141,14 +150,19 @@ public function index() {} * summary="미지급비용 등록", * tags={"ExpectedExpense"}, * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\RequestBody( * required=true, + * * @OA\JsonContent(ref="#/components/schemas/ExpectedExpenseCreateRequest") * ), + * * @OA\Response( * response=201, * description="생성 성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", ref="#/components/schemas/ExpectedExpense") @@ -164,11 +178,15 @@ public function store() {} * summary="미지급비용 상세 조회", * tags={"ExpectedExpense"}, * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="id", in="path", required=true, description="미지급비용 ID", @OA\Schema(type="integer")), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", ref="#/components/schemas/ExpectedExpense") @@ -184,15 +202,21 @@ public function show() {} * summary="미지급비용 수정", * tags={"ExpectedExpense"}, * 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/ExpectedExpenseUpdateRequest") * ), + * * @OA\Response( * response=200, * description="수정 성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", ref="#/components/schemas/ExpectedExpense") @@ -208,11 +232,15 @@ public function update() {} * summary="미지급비용 삭제", * tags={"ExpectedExpense"}, * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="id", in="path", required=true, description="미지급비용 ID", @OA\Schema(type="integer")), + * * @OA\Response( * response=200, * description="삭제 성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string") * ) @@ -227,16 +255,22 @@ public function destroy() {} * summary="미지급비용 일괄 삭제", * tags={"ExpectedExpense"}, * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\RequestBody( * required=true, + * * @OA\JsonContent( + * * @OA\Property(property="ids", type="array", @OA\Items(type="integer"), example={1, 2, 3}) * ) * ), + * * @OA\Response( * response=200, * description="일괄 삭제 성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", type="object", @@ -254,17 +288,23 @@ public function destroyMany() {} * summary="예상 지급일 일괄 변경", * tags={"ExpectedExpense"}, * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\RequestBody( * required=true, + * * @OA\JsonContent( + * * @OA\Property(property="ids", type="array", @OA\Items(type="integer"), example={1, 2, 3}), * @OA\Property(property="expected_payment_date", type="string", format="date", example="2025-02-01") * ) * ), + * * @OA\Response( * response=200, * description="일괄 변경 성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", type="object", @@ -282,13 +322,17 @@ public function updateExpectedPaymentDate() {} * summary="미지급비용 요약 (기간별 합계)", * tags={"ExpectedExpense"}, * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="start_date", in="query", description="시작일", @OA\Schema(type="string", format="date")), * @OA\Parameter(name="end_date", in="query", description="종료일", @OA\Schema(type="string", format="date")), * @OA\Parameter(name="payment_status", in="query", description="지급상태", @OA\Schema(type="string")), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", ref="#/components/schemas/ExpectedExpenseSummary") diff --git a/app/Swagger/v1/PositionApi.php b/app/Swagger/v1/PositionApi.php index e0dad96..ae341bd 100644 --- a/app/Swagger/v1/PositionApi.php +++ b/app/Swagger/v1/PositionApi.php @@ -12,6 +12,7 @@ * schema="Position", * type="object", * required={"id", "tenant_id", "type", "name", "sort_order", "is_active"}, + * * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="tenant_id", type="integer", example=287), * @OA\Property(property="type", type="string", enum={"rank", "title"}, example="rank", description="유형: rank(직급), title(직책)"), @@ -26,6 +27,7 @@ * schema="PositionCreateRequest", * type="object", * required={"type", "name"}, + * * @OA\Property(property="type", type="string", enum={"rank", "title"}, example="rank", description="유형: rank(직급), title(직책)"), * @OA\Property(property="name", type="string", example="과장", description="명칭"), * @OA\Property(property="sort_order", type="integer", example=3, description="정렬 순서 (생략시 자동)"), @@ -35,6 +37,7 @@ * @OA\Schema( * schema="PositionUpdateRequest", * type="object", + * * @OA\Property(property="name", type="string", example="과장", description="명칭"), * @OA\Property(property="sort_order", type="integer", example=3, description="정렬 순서"), * @OA\Property(property="is_active", type="boolean", example=true, description="활성화 여부") @@ -44,12 +47,15 @@ * schema="PositionReorderRequest", * type="object", * required={"items"}, + * * @OA\Property( * property="items", * type="array", + * * @OA\Items( * type="object", * required={"id", "sort_order"}, + * * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="sort_order", type="integer", example=1) * ) @@ -64,15 +70,19 @@ class PositionApi * tags={"Position"}, * summary="직급/직책 목록 조회", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="type", in="query", description="유형 필터 (rank: 직급, title: 직책)", @OA\Schema(type="string", enum={"rank", "title"})), * @OA\Parameter(name="is_active", in="query", description="활성화 필터", @OA\Schema(type="boolean")), * @OA\Parameter(name="q", in="query", description="검색어 (명칭)", @OA\Schema(type="string")), * @OA\Parameter(name="per_page", in="query", description="페이지당 개수 (생략시 전체)", @OA\Schema(type="integer")), * @OA\Parameter(name="page", in="query", description="페이지 번호", @OA\Schema(type="integer")), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/Position")) @@ -88,19 +98,25 @@ public function index() {} * tags={"Position"}, * summary="직급/직책 생성", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\RequestBody( * required=true, + * * @OA\JsonContent(ref="#/components/schemas/PositionCreateRequest") * ), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", ref="#/components/schemas/Position") * ) * ), + * * @OA\Response(response=409, description="중복 오류") * ) */ @@ -112,16 +128,21 @@ public function store() {} * tags={"Position"}, * summary="직급/직책 단건 조회", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", ref="#/components/schemas/Position") * ) * ), + * * @OA\Response(response=404, description="찾을 수 없음") * ) */ @@ -133,20 +154,27 @@ public function show() {} * tags={"Position"}, * summary="직급/직책 수정", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")), + * * @OA\RequestBody( * required=true, + * * @OA\JsonContent(ref="#/components/schemas/PositionUpdateRequest") * ), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", ref="#/components/schemas/Position") * ) * ), + * * @OA\Response(response=404, description="찾을 수 없음"), * @OA\Response(response=409, description="중복 오류") * ) @@ -159,11 +187,15 @@ public function update() {} * tags={"Position"}, * summary="직급/직책 삭제", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", type="object", @@ -172,6 +204,7 @@ public function update() {} * ) * ) * ), + * * @OA\Response(response=404, description="찾을 수 없음") * ) */ @@ -183,14 +216,19 @@ public function destroy() {} * tags={"Position"}, * summary="직급/직책 순서 변경 (벌크)", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\RequestBody( * required=true, + * * @OA\JsonContent(ref="#/components/schemas/PositionReorderRequest") * ), + * * @OA\Response( * response=200, * description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string"), * @OA\Property(property="data", type="object", @@ -202,4 +240,4 @@ public function destroy() {} * ) */ public function reorder() {} -} \ No newline at end of file +} diff --git a/app/Swagger/v1/ProcessApi.php b/app/Swagger/v1/ProcessApi.php index 3186223..497cf2d 100644 --- a/app/Swagger/v1/ProcessApi.php +++ b/app/Swagger/v1/ProcessApi.php @@ -13,6 +13,7 @@ * @OA\Schema( * schema="ProcessItem", * type="object", + * * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="process_id", type="integer", example=1), * @OA\Property(property="item_id", type="integer", example=123), @@ -28,6 +29,7 @@ * @OA\Schema( * schema="ProcessClassificationRule", * type="object", + * * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="process_id", type="integer", example=1), * @OA\Property(property="registration_type", type="string", example="pattern"), @@ -42,6 +44,7 @@ * @OA\Schema( * schema="Process", * type="object", + * * @OA\Property(property="id", type="integer", example=1), * @OA\Property(property="tenant_id", type="integer", example=1), * @OA\Property(property="process_code", type="string", example="P-001"), @@ -63,6 +66,7 @@ * schema="ProcessCreateRequest", * type="object", * required={"process_name", "process_type"}, + * * @OA\Property(property="process_name", type="string", maxLength=100, example="스크린 생산"), * @OA\Property(property="description", type="string", nullable=true), * @OA\Property(property="process_type", type="string", enum={"생산", "검사", "포장", "조립"}), @@ -75,9 +79,11 @@ * @OA\Property(property="is_active", type="boolean", nullable=true), * @OA\Property(property="classification_rules", type="array", nullable=true, * description="패턴 기반 분류 규칙", + * * @OA\Items( * type="object", * required={"rule_type", "matching_type", "condition_value"}, + * * @OA\Property(property="rule_type", type="string", enum={"품목코드", "품목명", "품목구분"}), * @OA\Property(property="matching_type", type="string", enum={"startsWith", "endsWith", "contains", "equals"}), * @OA\Property(property="condition_value", type="string", maxLength=255), @@ -88,6 +94,7 @@ * ), * @OA\Property(property="item_ids", type="array", nullable=true, * description="개별 품목 ID 배열", + * * @OA\Items(type="integer", example=123) * ) * ) @@ -100,13 +107,17 @@ class ProcessApi * tags={"Process"}, * summary="공정 목록 조회", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="page", in="query", @OA\Schema(type="integer", default=1)), * @OA\Parameter(name="size", in="query", @OA\Schema(type="integer", default=20)), * @OA\Parameter(name="q", in="query", description="검색어", @OA\Schema(type="string")), * @OA\Parameter(name="status", in="query", @OA\Schema(type="string", enum={"active", "inactive"})), * @OA\Parameter(name="process_type", in="query", @OA\Schema(type="string", enum={"생산", "검사", "포장", "조립"})), + * * @OA\Response(response=200, description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/Process")) * ) @@ -121,9 +132,13 @@ public function index() {} * tags={"Process"}, * summary="공정 상세 조회", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")), + * * @OA\Response(response=200, description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="data", ref="#/components/schemas/Process") * ) @@ -138,11 +153,16 @@ public function show() {} * tags={"Process"}, * summary="공정 생성", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\RequestBody(required=true, + * * @OA\JsonContent(ref="#/components/schemas/ProcessCreateRequest") * ), + * * @OA\Response(response=201, description="생성됨", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string", example="message.created"), * @OA\Property(property="data", ref="#/components/schemas/Process") @@ -158,12 +178,18 @@ public function store() {} * tags={"Process"}, * summary="공정 수정", * security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}}, + * * @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")), + * * @OA\RequestBody(required=true, + * * @OA\JsonContent(ref="#/components/schemas/ProcessCreateRequest") * ), + * * @OA\Response(response=200, description="성공", + * * @OA\JsonContent( + * * @OA\Property(property="success", type="boolean", example=true), * @OA\Property(property="message", type="string", example="message.updated"), * @OA\Property(property="data", ref="#/components/schemas/Process") diff --git a/app/Swagger/v1/QuoteApi.php b/app/Swagger/v1/QuoteApi.php index 466a3ae..7d1cbd4 100644 --- a/app/Swagger/v1/QuoteApi.php +++ b/app/Swagger/v1/QuoteApi.php @@ -277,8 +277,10 @@ * description="다건 BOM 기반 자동산출 요청. React QuoteFormItem 필드명(camelCase)과 API 변수명(약어) 모두 지원합니다.", * * @OA\Property(property="items", type="array", minItems=1, description="견적 품목 배열", + * * @OA\Items(ref="#/components/schemas/QuoteBomBulkItemInput") * ), + * * @OA\Property(property="debug", type="boolean", example=false, description="디버그 모드 (10단계 디버깅 정보 포함)") * ) * @@ -321,7 +323,9 @@ * @OA\Property(property="grand_total", type="number", format="float", example=1500000, description="성공한 품목 총계") * ), * @OA\Property(property="items", type="array", description="품목별 산출 결과", + * * @OA\Items(type="object", + * * @OA\Property(property="index", type="integer", example=0, description="요청 배열에서의 인덱스"), * @OA\Property(property="finished_goods_code", type="string", example="SC-1000"), * @OA\Property(property="inputs", type="object", description="정규화된 입력 변수"), diff --git a/app/Swagger/v1/ReceivablesApi.php b/app/Swagger/v1/ReceivablesApi.php index 40da9ca..c0a64ea 100644 --- a/app/Swagger/v1/ReceivablesApi.php +++ b/app/Swagger/v1/ReceivablesApi.php @@ -52,6 +52,7 @@ * * @OA\Items(type="integer", example=1) * ), + * * @OA\Property( * property="categories", * type="array", diff --git a/app/Swagger/v1/ShipmentApi.php b/app/Swagger/v1/ShipmentApi.php index 58a205d..077f141 100644 --- a/app/Swagger/v1/ShipmentApi.php +++ b/app/Swagger/v1/ShipmentApi.php @@ -77,7 +77,6 @@ * type="object", * description="출하 상세 정보 (품목 포함)", * allOf={ - * * @OA\Schema(ref="#/components/schemas/Shipment"), * @OA\Schema( * @@ -114,31 +113,24 @@ * @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) * ) diff --git a/app/Swagger/v1/StockApi.php b/app/Swagger/v1/StockApi.php index a71627a..be8d3ff 100644 --- a/app/Swagger/v1/StockApi.php +++ b/app/Swagger/v1/StockApi.php @@ -64,7 +64,6 @@ * type="object", * description="재고 상세 정보 (LOT 포함)", * allOf={ - * * @OA\Schema(ref="#/components/schemas/Stock"), * @OA\Schema( * @@ -98,43 +97,34 @@ * @OA\Property( * property="raw_material", * type="object", - * * @OA\Property(property="label", type="string", example="원자재"), * @OA\Property(property="count", type="integer", example=50), * @OA\Property(property="total_qty", type="number", format="float", example=5000.0) * ), - * * @OA\Property( * property="bent_part", * type="object", - * * @OA\Property(property="label", type="string", example="절곡부품"), * @OA\Property(property="count", type="integer", example=30), * @OA\Property(property="total_qty", type="number", format="float", example=2500.0) * ), - * * @OA\Property( * property="purchased_part", * type="object", - * * @OA\Property(property="label", type="string", example="구매부품"), * @OA\Property(property="count", type="integer", example=40), * @OA\Property(property="total_qty", type="number", format="float", example=3000.0) * ), - * * @OA\Property( * property="sub_material", * type="object", - * * @OA\Property(property="label", type="string", example="부자재"), * @OA\Property(property="count", type="integer", example=20), * @OA\Property(property="total_qty", type="number", format="float", example=1500.0) * ), - * * @OA\Property( * property="consumable", * type="object", - * * @OA\Property(property="label", type="string", example="소모품"), * @OA\Property(property="count", type="integer", example=10), * @OA\Property(property="total_qty", type="number", format="float", example=500.0) diff --git a/app/Swagger/v1/VendorLedgerApi.php b/app/Swagger/v1/VendorLedgerApi.php index f3877d7..ced970b 100644 --- a/app/Swagger/v1/VendorLedgerApi.php +++ b/app/Swagger/v1/VendorLedgerApi.php @@ -94,6 +94,7 @@ * schema="VendorLedgerPagination", * description="거래처원장 목록 페이지네이션", * type="object", + * * @OA\Property(property="current_page", type="integer", example=1), * @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/VendorLedgerItem")), * @OA\Property(property="first_page_url", type="string"),