Files
sam-api/app/Swagger/v1/BankTransactionApi.php

249 lines
9.7 KiB
PHP
Raw Normal View History

<?php
namespace App\Swagger\v1;
/**
* @OA\Tag(
* name="BankTransaction",
* description="은행 거래 조회 API - 입출금 통합 조회 및 통계"
* )
*/
/**
* @OA\Schema(
* schema="BankTransactionItem",
* description="은행 거래 항목",
*
* @OA\Property(property="id", type="integer", description="거래 ID", example=1),
* @OA\Property(property="type", type="string", enum={"deposit", "withdrawal"}, description="구분", example="deposit"),
* @OA\Property(property="transaction_date", type="string", format="date", description="거래일", example="2025-01-15"),
* @OA\Property(property="bank_account_id", type="integer", description="계좌 ID", example=1),
* @OA\Property(property="bank_name", type="string", description="은행명", example="국민은행"),
* @OA\Property(property="account_name", type="string", description="계좌명", example="영업계좌"),
* @OA\Property(property="note", type="string", description="적요", example="거래 메모", nullable=true),
* @OA\Property(property="vendor_id", type="integer", description="거래처 ID", example=1, nullable=true),
* @OA\Property(property="vendor_name", type="string", description="거래처명", example="(주)삼성전자", nullable=true),
* @OA\Property(property="depositor_name", type="string", description="입금자/수취인", example="홍길동", nullable=true),
* @OA\Property(property="deposit_amount", type="number", format="float", description="입금액", example=1000000),
* @OA\Property(property="withdrawal_amount", type="number", format="float", description="출금액", example=0),
* @OA\Property(property="balance", type="number", format="float", description="잔액", example=50000000),
* @OA\Property(property="transaction_type", type="string", description="입출금 유형", example="salesRevenue", nullable=true),
* @OA\Property(property="source_id", type="string", description="원본 ID", example="deposit-1"),
* @OA\Property(property="created_at", type="string", format="date-time", description="생성일시"),
* @OA\Property(property="updated_at", type="string", format="date-time", description="수정일시")
* )
*
* @OA\Schema(
* schema="BankTransactionSummary",
* description="은행 거래 요약 통계",
*
* @OA\Property(property="total_deposit", type="number", format="float", description="총 입금액", example=15000000),
* @OA\Property(property="total_withdrawal", type="number", format="float", description="총 출금액", example=8500000),
* @OA\Property(property="deposit_unset_count", type="integer", description="입금 유형 미설정 건수", example=5),
* @OA\Property(property="withdrawal_unset_count", type="integer", description="출금 유형 미설정 건수", example=3)
* )
*
* @OA\Schema(
* schema="BankTransactionPagination",
* description="은행 거래 목록 페이지네이션",
* type="object",
*
* @OA\Property(property="current_page", type="integer", example=1),
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/BankTransactionItem")),
* @OA\Property(property="first_page_url", type="string"),
* @OA\Property(property="from", type="integer"),
* @OA\Property(property="last_page", type="integer"),
* @OA\Property(property="last_page_url", type="string"),
* @OA\Property(property="next_page_url", type="string", nullable=true),
* @OA\Property(property="path", type="string"),
* @OA\Property(property="per_page", type="integer"),
* @OA\Property(property="prev_page_url", type="string", nullable=true),
* @OA\Property(property="to", type="integer"),
* @OA\Property(property="total", type="integer")
* )
*
* @OA\Schema(
* schema="BankAccountOption",
* description="계좌 선택 옵션",
*
* @OA\Property(property="id", type="integer", description="계좌 ID", example=1),
* @OA\Property(property="label", type="string", description="표시명", example="국민은행|영업계좌")
* )
*/
class BankTransactionApi
{
/**
* @OA\Get(
* path="/api/v1/bank-transactions",
* operationId="getBankTransactionList",
* tags={"BankTransaction"},
* summary="입출금 통합 목록 조회",
* description="은행 계좌의 입출금 내역을 통합 조회합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(
* name="start_date",
* in="query",
* description="조회 시작일",
*
* @OA\Schema(type="string", format="date", example="2025-01-01")
* ),
*
* @OA\Parameter(
* name="end_date",
* in="query",
* description="조회 종료일",
*
* @OA\Schema(type="string", format="date", example="2025-12-31")
* ),
*
* @OA\Parameter(
* name="bank_account_id",
* in="query",
* description="계좌 ID 필터",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\Parameter(
* name="transaction_type",
* in="query",
* description="입출금 유형 필터 (unset: 미설정)",
*
* @OA\Schema(type="string", example="salesRevenue")
* ),
*
* @OA\Parameter(
* name="search",
* in="query",
* description="검색어 (은행명, 계좌명, 거래처, 적요)",
*
* @OA\Schema(type="string", example="국민")
* ),
*
* @OA\Parameter(
* name="sort_by",
* in="query",
* description="정렬 기준",
*
* @OA\Schema(type="string", enum={"transaction_date", "amount"}, default="transaction_date")
* ),
*
* @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/BankTransactionPagination")
* )
* ),
*
* @OA\Response(response=401, description="인증 실패"),
* @OA\Response(response=403, description="권한 없음")
* )
*/
public function index() {}
/**
* @OA\Get(
* path="/api/v1/bank-transactions/summary",
* operationId="getBankTransactionSummary",
* tags={"BankTransaction"},
* summary="입출금 요약 통계",
* description="입금/출금 합계 및 유형 미설정 건수를 조회합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(
* name="start_date",
* in="query",
* description="조회 시작일",
*
* @OA\Schema(type="string", format="date", example="2025-01-01")
* ),
*
* @OA\Parameter(
* name="end_date",
* in="query",
* description="조회 종료일",
*
* @OA\Schema(type="string", format="date", example="2025-12-31")
* ),
*
* @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/BankTransactionSummary")
* )
* ),
*
* @OA\Response(response=401, description="인증 실패"),
* @OA\Response(response=403, description="권한 없음")
* )
*/
public function summary() {}
/**
* @OA\Get(
* path="/api/v1/bank-transactions/accounts",
* operationId="getBankTransactionAccounts",
* tags={"BankTransaction"},
* 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="array",
*
* @OA\Items(ref="#/components/schemas/BankAccountOption")
* )
* )
* ),
*
* @OA\Response(response=401, description="인증 실패"),
* @OA\Response(response=403, description="권한 없음")
* )
*/
public function accounts() {}
}