feat: CEO 대시보드 API 구현 및 DB 컬럼 오류 수정

- StatusBoardService: 현황판 8개 항목 집계 API
- CalendarService: 캘린더 일정 조회 API (작업지시/계약/휴가)
- TodayIssueService: 오늘의 이슈 리스트 API
- VatService: 부가세 신고 현황 API
- EntertainmentService: 접대비 현황 API
- WelfareService: 복리후생 현황 API

버그 수정:
- orders 테이블 status → status_code 컬럼명 수정
- users 테이블 department 관계 → tenantProfile.department로 수정
- Swagger 문서 및 라우트 추가
This commit is contained in:
2026-01-21 10:25:18 +09:00
parent 637ebe2e7f
commit f7850e43a7
20 changed files with 2712 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
<?php
namespace App\Swagger\v1;
/**
* @OA\Tag(
* name="TodayIssue",
* description="CEO 대시보드 - 오늘의 이슈 리스트 API"
* )
*
* @OA\Schema(
* schema="TodayIssueItem",
* type="object",
* description="오늘의 이슈 항목",
* required={"id", "badge", "content", "time"},
* @OA\Property(property="id", type="string", example="order_123", description="항목 고유 ID"),
* @OA\Property(
* property="badge",
* type="string",
* enum={"수주 성공", "주식 이슈", "직정 제고", "지출예상내역서", "세금 신고", "결재 요청", "기타"},
* example="수주 성공",
* description="이슈 카테고리 뱃지"
* ),
* @OA\Property(property="content", type="string", example="A전자 신규 수주 450,000,000원 확정", description="이슈 내용"),
* @OA\Property(property="time", type="string", example="10분 전", description="상대 시간"),
* @OA\Property(property="date", type="string", format="date", example="2026-01-20", description="날짜 (ISO 형식)"),
* @OA\Property(property="needsApproval", type="boolean", example=false, description="승인/반려 버튼 표시 여부"),
* @OA\Property(property="path", type="string", example="/sales/order-management-sales", description="클릭 시 이동할 경로")
* )
*
* @OA\Schema(
* 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="전체 이슈 건수")
* )
*/
class TodayIssueApi
{
/**
* @OA\Get(
* path="/api/v1/today-issues/summary",
* operationId="getTodayIssueSummary",
* tags={"TodayIssue"},
* summary="오늘의 이슈 리스트 조회",
* description="CEO 대시보드용 오늘의 이슈 리스트를 조회합니다. 수주 성공, 미수금 이슈, 재고 이슈, 지출예상내역서, 세금 신고, 결재 요청, 기타 카테고리의 알림을 집계합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(
* name="limit",
* 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(
* property="data",
* ref="#/components/schemas/TodayIssueSummaryResponse"
* )
* )
* ),
*
* @OA\Response(
* response=401,
* description="인증 실패",
* @OA\JsonContent(
* type="object",
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="인증에 실패했습니다.")
* )
* )
* )
*/
public function summary() {}
}