Files
sam-api/database/seeders/DimDateSeeder.php
권혁성 c88048db67 feat: sam_stat 통계 DB 인프라 구축 (Phase 1)
- sam_stat DB 연결 설정 (config/database.php, .env)
- 메타 테이블 마이그레이션 (stat_definitions, stat_job_logs)
- dim_date 차원 테이블 + DimDateSeeder (2020~2030, 4018건)
- 기반 모델: BaseStatModel, StatDefinition, StatJobLog, DimDate
- 집계 커맨드: stat:aggregate-daily, stat:aggregate-monthly
- StatAggregatorService + StatDomainServiceInterface 골격

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 17:13:36 +09:00

82 lines
2.4 KiB
PHP

<?php
namespace Database\Seeders;
use Carbon\Carbon;
use Carbon\CarbonPeriod;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DimDateSeeder extends Seeder
{
public function run(): void
{
$start = Carbon::create(2020, 1, 1);
$end = Carbon::create(2030, 12, 31);
$period = CarbonPeriod::create($start, $end);
$holidays = $this->getKoreanHolidays();
$batch = [];
$batchSize = 500;
foreach ($period as $date) {
$dateStr = $date->format('Y-m-d');
$holiday = $holidays[$dateStr] ?? null;
$batch[] = [
'date_key' => $dateStr,
'year' => $date->year,
'quarter' => $date->quarter,
'month' => $date->month,
'week' => (int) $date->isoWeek(),
'day_of_week' => $date->dayOfWeekIso,
'day_of_month' => $date->day,
'is_weekend' => $date->isWeekend(),
'is_holiday' => $holiday !== null,
'holiday_name' => $holiday,
'fiscal_year' => $date->year,
'fiscal_quarter' => $date->quarter,
];
if (count($batch) >= $batchSize) {
DB::connection('sam_stat')->table('dim_date')->insert($batch);
$batch = [];
}
}
if (! empty($batch)) {
DB::connection('sam_stat')->table('dim_date')->insert($batch);
}
$totalCount = DB::connection('sam_stat')->table('dim_date')->count();
$this->command->info("dim_date 시딩 완료: {$totalCount}건 (2020-01-01 ~ 2030-12-31)");
}
/**
* 한국 공휴일 목록 (고정 공휴일만, 음력 공휴일은 수동 추가 필요)
*/
private function getKoreanHolidays(): array
{
$holidays = [];
for ($year = 2020; $year <= 2030; $year++) {
// 고정 공휴일
$fixed = [
"{$year}-01-01" => '신정',
"{$year}-03-01" => '삼일절',
"{$year}-05-05" => '어린이날',
"{$year}-06-06" => '현충일',
"{$year}-08-15" => '광복절',
"{$year}-10-03" => '개천절',
"{$year}-10-09" => '한글날',
"{$year}-12-25" => '크리스마스',
];
$holidays = array_merge($holidays, $fixed);
}
return $holidays;
}
}