2026-03-08 01:18:12 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Actions;
|
|
|
|
|
|
2026-08-16 23:18:09 +02:00
|
|
|
use App\Events\RouteActivated;
|
2026-03-08 01:18:12 +01:00
|
|
|
use App\Models\Route;
|
|
|
|
|
|
|
|
|
|
class CreateRouteAction
|
|
|
|
|
{
|
2026-03-08 02:53:46 +01:00
|
|
|
/**
|
|
|
|
|
* Create a route or return an existing one for the same feed+channel pair.
|
|
|
|
|
* When a route already exists, the provided priority and isActive values are ignored.
|
|
|
|
|
*/
|
2026-03-08 01:18:12 +01:00
|
|
|
public function execute(int $feedId, int $platformChannelId, int $priority = 0, bool $isActive = true): Route
|
|
|
|
|
{
|
2026-08-16 23:18:09 +02:00
|
|
|
$route = Route::firstOrCreate(
|
2026-03-08 02:53:46 +01:00
|
|
|
[
|
|
|
|
|
'feed_id' => $feedId,
|
|
|
|
|
'platform_channel_id' => $platformChannelId,
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
'priority' => $priority,
|
|
|
|
|
'is_active' => $isActive,
|
|
|
|
|
]
|
|
|
|
|
);
|
2026-08-16 23:18:09 +02:00
|
|
|
|
|
|
|
|
if ($route->wasRecentlyCreated && $route->is_active) {
|
|
|
|
|
RouteActivated::dispatch($route->feed_id, $route->platform_channel_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $route;
|
2026-03-08 01:18:12 +01:00
|
|
|
}
|
|
|
|
|
}
|