mirror of
https://github.com/coollabsio/coolify.git
synced 2026-08-28 18:14:35 -05:00
Split V5 dashboard behavior into domain controllers and policies, add agent token rotation/revocation, status reconciliation jobs, ingress firewall syncing, and canvas connection APIs. Add migrations for V5 status tracking, server capabilities, resource connection aliases, and revoked agent tokens.
74 lines
2.5 KiB
PHP
74 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Support\V5;
|
|
|
|
use App\Models\V5\Application as V5Application;
|
|
use App\Models\V5\ResourceConnection;
|
|
use Illuminate\Support\Collection;
|
|
|
|
/**
|
|
* Single source of truth for the resource connection payloads served by the
|
|
* dashboard Inertia props and the connection endpoints — the wire format is
|
|
* consumed by resources/js/v5/types.ts and must stay stable.
|
|
*/
|
|
class ResourceConnectionSerializer
|
|
{
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function serialize(ResourceConnection $connection): array
|
|
{
|
|
$applications = $this->applicationsById($connection);
|
|
$resourceOneUuid = $applications->get($connection->resource_one_id)?->uuid;
|
|
$resourceTwoUuid = $applications->get($connection->resource_two_id)?->uuid;
|
|
$applicationsById = $applications;
|
|
|
|
return [
|
|
'id' => $connection->uuid,
|
|
'applicationIds' => array_values(array_filter([
|
|
$resourceOneUuid,
|
|
$resourceTwoUuid,
|
|
])),
|
|
'fromApplicationId' => $resourceOneUuid,
|
|
'toApplicationId' => $resourceTwoUuid,
|
|
'portsByDirection' => $connection->rules
|
|
->groupBy(function ($rule) use ($applicationsById): string {
|
|
$sourceUuid = $applicationsById->get($rule->source_resource_id)?->uuid;
|
|
$targetUuid = $applicationsById->get($rule->target_resource_id)?->uuid;
|
|
|
|
return "{$sourceUuid}->{$targetUuid}";
|
|
})
|
|
->filter(fn (Collection $rules, string $direction): bool => ! str_starts_with($direction, '->') && ! str_ends_with($direction, '->'))
|
|
->map(fn (Collection $rules) => $rules
|
|
->sortBy('port')
|
|
->pluck('port')
|
|
->map(fn ($port) => (string) $port)
|
|
->values()
|
|
->all())
|
|
->all(),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return Collection<string, V5Application>
|
|
*/
|
|
public function applicationsByUuid(ResourceConnection $connection): Collection
|
|
{
|
|
return $this->applicationsById($connection)->keyBy('uuid');
|
|
}
|
|
|
|
/**
|
|
* @return Collection<int, V5Application>
|
|
*/
|
|
public function applicationsById(ResourceConnection $connection): Collection
|
|
{
|
|
return V5Application::query()
|
|
->whereIn('id', [
|
|
(int) $connection->resource_one_id,
|
|
(int) $connection->resource_two_id,
|
|
])
|
|
->get()
|
|
->keyBy('id');
|
|
}
|
|
}
|