Initial commit: Slim Framework 4 API Retribusi dengan modular architecture
This commit is contained in:
79
bin/hourly_summary.php
Normal file
79
bin/hourly_summary.php
Normal file
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* CLI script untuk generate hourly summary
|
||||
*
|
||||
* Usage:
|
||||
* php bin/hourly_summary.php [date]
|
||||
*
|
||||
* Examples:
|
||||
* php bin/hourly_summary.php 2025-01-01
|
||||
* php bin/hourly_summary.php # default: yesterday
|
||||
*
|
||||
* Note:
|
||||
* Default menggunakan yesterday karena:
|
||||
* - Data hari ini mungkin belum lengkap (masih ada event yang masuk)
|
||||
* - Cron biasanya jalan di akhir hari untuk rekap hari sebelumnya
|
||||
* - Lebih aman untuk rekap data yang sudah final
|
||||
*/
|
||||
|
||||
// Get project root directory
|
||||
$rootPath = dirname(__DIR__);
|
||||
|
||||
// Load autoloader
|
||||
require $rootPath . '/vendor/autoload.php';
|
||||
|
||||
use App\Config\AppConfig;
|
||||
use App\Modules\Retribusi\Summary\HourlySummaryService;
|
||||
use App\Support\Database;
|
||||
|
||||
// Load environment variables
|
||||
AppConfig::loadEnv($rootPath);
|
||||
|
||||
// Get date from command line argument or use yesterday (deterministic)
|
||||
$date = $argv[1] ?? date('Y-m-d', strtotime('-1 day'));
|
||||
|
||||
// Validate date format
|
||||
$dateTime = DateTime::createFromFormat('Y-m-d', $date);
|
||||
if ($dateTime === false || $dateTime->format('Y-m-d') !== $date) {
|
||||
echo "Error: Invalid date format. Expected Y-m-d (e.g., 2025-01-01)\n";
|
||||
echo "Usage: php bin/hourly_summary.php [date]\n";
|
||||
echo " If date is omitted, defaults to yesterday\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
// Get database connection
|
||||
$dbHost = AppConfig::get('DB_HOST', 'localhost');
|
||||
$dbName = AppConfig::get('DB_NAME', '');
|
||||
$dbUser = AppConfig::get('DB_USER', '');
|
||||
$dbPass = AppConfig::get('DB_PASS', '');
|
||||
|
||||
if (empty($dbName) || empty($dbUser)) {
|
||||
echo "Error: Database configuration not found in .env\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$db = Database::getConnection($dbHost, $dbName, $dbUser, $dbPass);
|
||||
|
||||
// Initialize service
|
||||
$service = new HourlySummaryService($db);
|
||||
|
||||
// Run aggregation
|
||||
echo "Processing hourly summary for date: {$date}\n";
|
||||
$result = $service->aggregateForDate($date);
|
||||
|
||||
echo "Success!\n";
|
||||
echo "Date: {$result['date']}\n";
|
||||
echo "Rows processed: {$result['rows_processed']}\n";
|
||||
|
||||
exit(0);
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo "Error: " . $e->getMessage() . "\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user