feat: sam_stat P2 도메인 + 통계 API + 대시보드 전환 (Phase 4)

- 4.1: stat_project_monthly + ProjectStatService (건설/프로젝트 월간)
- 4.2: stat_system_daily + SystemStatService (API/감사/FCM/파일/결재)
- 4.3: stat_events, stat_snapshots + StatEventService + StatEventObserver
- 4.4: StatController (summary/daily/monthly/alerts) + StatQueryService + FormRequest 3개 + routes/stats.php
- 4.5: DashboardService sam_stat 우선 조회 + 원본 DB 폴백 패턴

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-29 21:56:53 +09:00
parent 595e3d59b4
commit 4d8dac1091
22 changed files with 1011 additions and 7 deletions

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\V1\Stat;
use Illuminate\Foundation\Http\FormRequest;
class StatAlertRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'limit' => 'nullable|integer|min:1|max:100',
'unread_only' => 'nullable|boolean',
];
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Requests\V1\Stat;
use Illuminate\Foundation\Http\FormRequest;
class StatDailyRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'domain' => 'required|string|in:sales,finance,production,inventory,quote,hr,system',
'start_date' => 'required|date|date_format:Y-m-d',
'end_date' => 'required|date|date_format:Y-m-d|after_or_equal:start_date',
];
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Requests\V1\Stat;
use Illuminate\Foundation\Http\FormRequest;
class StatMonthlyRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'domain' => 'required|string|in:sales,finance,production,project',
'year' => 'required|integer|min:2020|max:2099',
'month' => 'nullable|integer|min:1|max:12',
];
}
}