- ai_reports 테이블 마이그레이션 추가 - AiReport 모델 생성 (daily/weekly/monthly 유형) - AiReportService 구현 (비즈니스 데이터 수집 + Gemini API) - 4개 API 엔드포인트 추가 (목록/생성/상세/삭제) - Swagger 문서 및 i18n 메시지 추가
304 lines
12 KiB
PHP
304 lines
12 KiB
PHP
<?php
|
|
|
|
/**
|
|
* 성공/안내/일반 메시지 (비에러)
|
|
* - API 정상 응답의 message 필드용
|
|
* - 도메인 공통 키와 리소스별 하위 그룹을 혼합 사용
|
|
* - 예: return ApiResponse::success($data, __('message.created'));
|
|
*/
|
|
return [
|
|
|
|
// 공통 (CRUD/편의)
|
|
'fetched' => '조회 성공',
|
|
'created' => '등록 성공',
|
|
'updated' => '수정 성공',
|
|
'deleted' => '삭제 성공',
|
|
'restored' => '복구 성공',
|
|
'toggled' => '상태 변경 성공',
|
|
'bulk_upsert' => '대량 저장 성공',
|
|
'reordered' => '정렬 변경 성공',
|
|
'linked' => '연결 성공',
|
|
'unlinked' => '연결 해제 성공',
|
|
'no_changes' => '변경 사항이 없습니다.',
|
|
|
|
// 인증/세션
|
|
'login_success' => '로그인 성공',
|
|
'logout_success' => '로그아웃 되었습니다.',
|
|
'signup_success' => '회원가입이 완료되었습니다.',
|
|
'registered' => '회원가입 처리',
|
|
'token_refreshed' => '토큰이 갱신되었습니다',
|
|
|
|
// 테넌트/컨텍스트
|
|
'tenant_switched' => '활성 테넌트가 전환되었습니다.',
|
|
|
|
// 리소스별 세부 (필요 시)
|
|
'item' => [
|
|
'fetched' => '품목을 조회했습니다.',
|
|
'created' => '품목이 등록되었습니다.',
|
|
'updated' => '품목이 수정되었습니다.',
|
|
'deleted' => '품목이 삭제되었습니다.',
|
|
'batch_deleted' => '품목이 일괄 삭제되었습니다.',
|
|
],
|
|
|
|
'product' => [
|
|
'fetched' => '제품을 조회했습니다.',
|
|
'category_fetched' => '제품 카테고리를 조회했습니다.',
|
|
'created' => '제품이 등록되었습니다.',
|
|
'updated' => '제품이 수정되었습니다.',
|
|
'deleted' => '제품이 삭제되었습니다.',
|
|
'toggled' => '제품 상태가 변경되었습니다.',
|
|
'searched' => '제품을 검색했습니다.',
|
|
],
|
|
|
|
'bom' => [
|
|
'fetched' => 'BOM 항목을 조회했습니다.',
|
|
'created' => 'BOM 항목이 등록되었습니다.',
|
|
'updated' => 'BOM 항목이 수정되었습니다.',
|
|
'deleted' => 'BOM 항목이 삭제되었습니다.',
|
|
'bulk_upsert' => 'BOM 항목이 저장되었습니다.',
|
|
'reordered' => 'BOM 정렬이 변경되었습니다.',
|
|
'fetch' => 'BOM 항목 조회',
|
|
'create' => 'BOM 항목 등록',
|
|
'update' => 'BOM 항목 수정',
|
|
'delete' => 'BOM 항목 삭제',
|
|
'restore' => 'BOM 항목 복구',
|
|
],
|
|
|
|
'category' => [
|
|
'fetched' => '카테고리를 조회했습니다.',
|
|
'created' => '카테고리가 등록되었습니다.',
|
|
'updated' => '카테고리가 수정되었습니다.',
|
|
'deleted' => '카테고리가 삭제되었습니다.',
|
|
'toggled' => '카테고리 상태가 변경되었습니다.',
|
|
'moved' => '카테고리가 이동되었습니다.',
|
|
'reordered' => '카테고리 정렬순서가 변경되었습니다.',
|
|
'tree_fetched' => '카테고리 트리를 조회했습니다.',
|
|
'fields_saved' => '카테고리 필드가 저장되었습니다.',
|
|
'template_saved' => '카테고리 템플릿이 저장되었습니다.',
|
|
'template_applied' => '카테고리 템플릿이 적용되었습니다.',
|
|
],
|
|
|
|
'category_field' => [
|
|
'fetched' => '카테고리 필드를 조회했습니다.',
|
|
'created' => '카테고리 필드가 생성되었습니다.',
|
|
'updated' => '카테고리 필드가 수정되었습니다.',
|
|
'deleted' => '카테고리 필드가 삭제되었습니다.',
|
|
'reordered' => '카테고리 필드 정렬이 변경되었습니다.',
|
|
'bulk_upsert' => '카테고리 필드가 일괄 저장되었습니다.',
|
|
],
|
|
|
|
'design' => [
|
|
'template_cloned' => 'BOM 템플릿이 복제되었습니다.',
|
|
'template_diff' => 'BOM 템플릿 차이를 계산했습니다.',
|
|
],
|
|
|
|
'model_set' => [
|
|
'cloned' => '모델셋이 복제되었습니다.',
|
|
'calculated' => 'BOM 계산이 완료되었습니다.',
|
|
],
|
|
|
|
'estimate' => [
|
|
'cloned' => '견적이 복제되었습니다.',
|
|
'status_changed' => '견적 상태가 변경되었습니다.',
|
|
],
|
|
|
|
// 계산 관련
|
|
'calculated' => '계산 완료',
|
|
|
|
// 설정 관리 (Settings & Configuration 통합)
|
|
'settings' => [
|
|
'fields_updated' => '필드 설정이 업데이트되었습니다.',
|
|
'fields_bulk_saved' => '필드 설정 일괄 저장이 완료되었습니다.',
|
|
'options_saved' => '옵션 그룹이 저장되었습니다.',
|
|
'options_reordered' => '옵션 값 정렬이 변경되었습니다.',
|
|
'common_code_saved' => '공통 코드가 저장되었습니다.',
|
|
],
|
|
|
|
// 자재 관리 (Products & Materials 통합)
|
|
'material' => [
|
|
'fetched' => '자재를 조회했습니다.',
|
|
'created' => '자재가 등록되었습니다.',
|
|
'updated' => '자재가 수정되었습니다.',
|
|
'deleted' => '자재가 삭제되었습니다.',
|
|
],
|
|
|
|
// 단가 관리
|
|
'pricing' => [
|
|
'created' => '단가가 등록되었습니다.',
|
|
'updated' => '단가가 수정되었습니다.',
|
|
'deleted' => '단가가 삭제되었습니다.',
|
|
'finalized' => '단가가 확정되었습니다.',
|
|
],
|
|
|
|
// 거래처 관리
|
|
'client' => [
|
|
'fetched' => '거래처를 조회했습니다.',
|
|
'created' => '거래처가 등록되었습니다.',
|
|
'updated' => '거래처가 수정되었습니다.',
|
|
'deleted' => '거래처가 삭제되었습니다.',
|
|
'toggled' => '거래처 상태가 변경되었습니다.',
|
|
],
|
|
|
|
// 사용자 관리
|
|
'user' => [
|
|
'fetched' => '사용자를 조회했습니다.',
|
|
'me_fetched' => '나의 정보를 조회했습니다.',
|
|
'me_updated' => '나의 정보가 수정되었습니다.',
|
|
'password_changed' => '비밀번호가 변경되었습니다.',
|
|
'tenants_fetched' => '나의 테넌트 목록을 조회했습니다.',
|
|
'tenant_switched' => '활성 테넌트가 전환되었습니다.',
|
|
],
|
|
|
|
// 테넌트 관리
|
|
'tenant' => [
|
|
'fetched' => '테넌트를 조회했습니다.',
|
|
'created' => '테넌트가 등록되었습니다.',
|
|
'updated' => '테넌트가 수정되었습니다.',
|
|
'deleted' => '테넌트가 삭제되었습니다.',
|
|
'restored' => '테넌트가 복구되었습니다.',
|
|
],
|
|
|
|
'tenant_stat_field' => [
|
|
'fetched' => '통계 필드를 조회했습니다.',
|
|
'created' => '통계 필드가 생성되었습니다.',
|
|
'updated' => '통계 필드가 수정되었습니다.',
|
|
'deleted' => '통계 필드가 삭제되었습니다.',
|
|
'reordered' => '통계 필드 정렬이 변경되었습니다.',
|
|
'bulk_upsert' => '통계 필드가 일괄 저장되었습니다.',
|
|
],
|
|
|
|
// 파일 관리
|
|
'file' => [
|
|
'uploaded' => '파일이 업로드되었습니다.',
|
|
'deleted' => '파일이 삭제되었습니다.',
|
|
'fetched' => '파일 목록을 조회했습니다.',
|
|
],
|
|
|
|
// 파일 저장소
|
|
'file_uploaded' => '파일이 업로드되었습니다.',
|
|
'files_moved' => '파일이 이동되었습니다.',
|
|
'file_deleted' => '파일이 삭제되었습니다.',
|
|
'file_restored' => '파일이 복구되었습니다.',
|
|
'file_permanently_deleted' => '파일이 영구 삭제되었습니다.',
|
|
'share_link_created' => '공유 링크가 생성되었습니다.',
|
|
'storage_exceeded_grace_period' => '저장소 용량이 초과되었습니다. 유예 기간이 적용됩니다.',
|
|
|
|
// 폴더 관리
|
|
'folder_created' => '폴더가 생성되었습니다.',
|
|
'folder_updated' => '폴더가 수정되었습니다.',
|
|
'folder_deleted' => '폴더가 비활성화되었습니다.',
|
|
'folders_reordered' => '폴더 순서가 변경되었습니다.',
|
|
|
|
// 견적 관리
|
|
'quote' => [
|
|
'fetched' => '견적을 조회했습니다.',
|
|
'created' => '견적이 등록되었습니다.',
|
|
'updated' => '견적이 수정되었습니다.',
|
|
'deleted' => '견적이 삭제되었습니다.',
|
|
'bulk_deleted' => '견적이 일괄 삭제되었습니다.',
|
|
'finalized' => '견적이 확정되었습니다.',
|
|
'finalize_cancelled' => '견적 확정이 취소되었습니다.',
|
|
'converted' => '견적이 수주로 전환되었습니다.',
|
|
'calculated' => '견적 자동산출이 완료되었습니다.',
|
|
'pdf_generated' => '견적서 PDF가 생성되었습니다.',
|
|
],
|
|
'quote_email_sent' => '견적서가 이메일로 발송되었습니다.',
|
|
'quote_kakao_sent' => '견적서가 카카오톡으로 발송되었습니다.',
|
|
|
|
// 휴가 관리
|
|
'leave' => [
|
|
'fetched' => '휴가를 조회했습니다.',
|
|
'created' => '휴가가 신청되었습니다.',
|
|
'updated' => '휴가가 수정되었습니다.',
|
|
'deleted' => '휴가가 삭제되었습니다.',
|
|
'approved' => '휴가가 승인되었습니다.',
|
|
'rejected' => '휴가가 반려되었습니다.',
|
|
'cancelled' => '휴가가 취소되었습니다.',
|
|
'balance_fetched' => '잔여 휴가를 조회했습니다.',
|
|
'balance_updated' => '휴가 일수가 설정되었습니다.',
|
|
],
|
|
|
|
// 전자결재 관리
|
|
'approval' => [
|
|
'fetched' => '결재 문서를 조회했습니다.',
|
|
'created' => '결재 문서가 작성되었습니다.',
|
|
'updated' => '결재 문서가 수정되었습니다.',
|
|
'deleted' => '결재 문서가 삭제되었습니다.',
|
|
'submitted' => '결재가 상신되었습니다.',
|
|
'approved' => '결재가 승인되었습니다.',
|
|
'rejected' => '결재가 반려되었습니다.',
|
|
'cancelled' => '결재가 회수되었습니다.',
|
|
'marked_read' => '열람 처리되었습니다.',
|
|
'marked_unread' => '미열람 처리되었습니다.',
|
|
'form_created' => '결재 양식이 등록되었습니다.',
|
|
'form_updated' => '결재 양식이 수정되었습니다.',
|
|
'form_deleted' => '결재 양식이 삭제되었습니다.',
|
|
'line_created' => '결재선이 등록되었습니다.',
|
|
'line_updated' => '결재선이 수정되었습니다.',
|
|
'line_deleted' => '결재선이 삭제되었습니다.',
|
|
],
|
|
|
|
// 근무 설정 관리
|
|
'work_setting' => [
|
|
'fetched' => '근무 설정을 조회했습니다.',
|
|
'updated' => '근무 설정이 수정되었습니다.',
|
|
],
|
|
|
|
// 출퇴근 설정 관리
|
|
'attendance_setting' => [
|
|
'fetched' => '출퇴근 설정을 조회했습니다.',
|
|
'updated' => '출퇴근 설정이 수정되었습니다.',
|
|
],
|
|
|
|
// 현장 관리
|
|
'site' => [
|
|
'fetched' => '현장을 조회했습니다.',
|
|
'created' => '현장이 등록되었습니다.',
|
|
'updated' => '현장이 수정되었습니다.',
|
|
'deleted' => '현장이 삭제되었습니다.',
|
|
'active_fetched' => '활성화된 현장 목록을 조회했습니다.',
|
|
],
|
|
|
|
// 보고서 관리
|
|
'report' => [
|
|
'fetched' => '보고서를 조회했습니다.',
|
|
'daily_fetched' => '일일 일보를 조회했습니다.',
|
|
'expense_estimate_fetched' => '지출 예상 내역서를 조회했습니다.',
|
|
'exported' => '보고서가 다운로드되었습니다.',
|
|
'deposit' => '입금',
|
|
'withdrawal' => '출금',
|
|
'purchase' => '매입',
|
|
],
|
|
|
|
// 급여 관리
|
|
'payroll' => [
|
|
'fetched' => '급여를 조회했습니다.',
|
|
'created' => '급여가 등록되었습니다.',
|
|
'updated' => '급여가 수정되었습니다.',
|
|
'deleted' => '급여가 삭제되었습니다.',
|
|
'confirmed' => '급여가 확정되었습니다.',
|
|
'paid' => '급여가 지급 처리되었습니다.',
|
|
'bulk_confirmed' => '급여가 일괄 확정되었습니다.',
|
|
'calculated' => '급여가 일괄 계산되었습니다.',
|
|
'payslip_fetched' => '급여명세서를 조회했습니다.',
|
|
],
|
|
|
|
// 급여 설정 관리
|
|
'payroll_setting' => [
|
|
'fetched' => '급여 설정을 조회했습니다.',
|
|
'updated' => '급여 설정이 수정되었습니다.',
|
|
],
|
|
|
|
// 대시보드
|
|
'dashboard' => [
|
|
'unknown_client' => '미지정',
|
|
],
|
|
|
|
// AI 리포트
|
|
'ai_report' => [
|
|
'fetched' => 'AI 리포트를 조회했습니다.',
|
|
'generated' => 'AI 리포트가 생성되었습니다.',
|
|
'deleted' => 'AI 리포트가 삭제되었습니다.',
|
|
],
|
|
];
|