Files
animethemes-server/app/Actions/Models/Aggregate/SyncViewAggregatesAction.php
T
2025-07-24 01:22:29 -03:00

42 lines
1001 B
PHP

<?php
declare(strict_types=1);
namespace App\Actions\Models\Aggregate;
use App\Actions\ActionResult;
use App\Enums\Actions\ActionStatus;
use Exception;
use Illuminate\Support\Facades\DB;
class SyncViewAggregatesAction
{
/**
* Handles the action.
*
* @throws Exception
*/
public function handle(): ActionResult
{
try {
DB::statement('
INSERT INTO view_aggregates (viewable_id, viewable_type, value)
SELECT viewable_id, viewable_type, COUNT(*) as value
FROM views
GROUP BY viewable_type, viewable_id
ON DUPLICATE KEY UPDATE value = VALUES(value);
');
} catch (Exception $e) {
return new ActionResult(
ActionStatus::FAILED,
$e->getMessage()
);
}
return new ActionResult(
ActionStatus::PASSED,
'View aggregates synced successfully',
);
}
}