102 lines
4.4 KiB
PHP
Executable File
102 lines
4.4 KiB
PHP
Executable File
<?php
|
|
namespace App\Services;
|
|
|
|
use App\Models\Amministratore;
|
|
use App\Models\Stabile;
|
|
use App\Models\TenantArchiveRegistry;
|
|
use Illuminate\Support\Collection;
|
|
|
|
class TenantArchiveRegistryService
|
|
{
|
|
public function __construct(private TenantArchivePathService $tenantArchivePath)
|
|
{
|
|
}
|
|
|
|
public function buildAmministratorePayload(Amministratore $amministratore): array
|
|
{
|
|
$adminCode = $this->tenantArchivePath->amministratoreCode($amministratore);
|
|
|
|
return [
|
|
'archive_type' => 'amministratore',
|
|
'archive_code' => $adminCode,
|
|
'amministratore_id' => $amministratore->id,
|
|
'stabile_id' => null,
|
|
'owner_amministratore_id' => $amministratore->id,
|
|
'owner_amministratore_code' => $adminCode,
|
|
'database_name' => $amministratore->database_attivo ?: null,
|
|
'database_strategy' => $amministratore->database_attivo ? 'dedicated' : 'shared',
|
|
'storage_disk' => 'local',
|
|
'storage_relative_path' => $this->tenantArchivePath->amministratoreRelativePath($amministratore),
|
|
'status' => (bool) ($amministratore->attivo ?? true) ? 'active' : 'inactive',
|
|
'last_aligned_at' => now(),
|
|
'meta' => [
|
|
'codice_univoco' => $amministratore->codice_univoco,
|
|
'codice_amministratore' => $amministratore->codice_amministratore,
|
|
'cartella_dati' => $amministratore->cartella_dati,
|
|
],
|
|
];
|
|
}
|
|
|
|
public function buildStabilePayload(Stabile $stabile): array
|
|
{
|
|
$ownerCode = $this->tenantArchivePath->amministratoreCode($stabile->amministratore);
|
|
$transfer = $stabile->latestAmministratoreTransfer;
|
|
|
|
return [
|
|
'archive_type' => 'stabile',
|
|
'archive_code' => $this->tenantArchivePath->stabileCode($stabile),
|
|
'amministratore_id' => $stabile->amministratore_id,
|
|
'stabile_id' => $stabile->id,
|
|
'owner_amministratore_id' => $stabile->amministratore_id,
|
|
'owner_amministratore_code' => $ownerCode,
|
|
'database_name' => $stabile->database_dedicato ?: null,
|
|
'database_strategy' => $stabile->database_dedicato ? 'dedicated' : 'shared',
|
|
'storage_disk' => 'local',
|
|
'storage_relative_path' => $this->tenantArchivePath->stabileRelativePath($stabile),
|
|
'status' => (bool) ($stabile->attivo ?? true) ? 'active' : 'inactive',
|
|
'last_aligned_at' => now(),
|
|
'meta' => [
|
|
'denominazione' => $stabile->denominazione,
|
|
'codice_stabile' => $stabile->codice_stabile,
|
|
'documenti_path' => $stabile->documenti_path,
|
|
'latest_transfer_at' => optional($transfer?->created_at)->toIso8601String(),
|
|
'latest_transfer_source' => $transfer?->source,
|
|
'latest_transfer_reason' => $transfer?->reason,
|
|
'latest_transfer_meta' => $transfer?->meta ?? [],
|
|
],
|
|
];
|
|
}
|
|
|
|
public function syncAmministratore(Amministratore $amministratore): TenantArchiveRegistry
|
|
{
|
|
return TenantArchiveRegistry::updateOrCreate(
|
|
[
|
|
'archive_type' => 'amministratore',
|
|
'archive_code' => $this->tenantArchivePath->amministratoreCode($amministratore),
|
|
],
|
|
$this->buildAmministratorePayload($amministratore)
|
|
);
|
|
}
|
|
|
|
public function syncStabile(Stabile $stabile): TenantArchiveRegistry
|
|
{
|
|
return TenantArchiveRegistry::updateOrCreate(
|
|
[
|
|
'archive_type' => 'stabile',
|
|
'archive_code' => $this->tenantArchivePath->stabileCode($stabile),
|
|
],
|
|
$this->buildStabilePayload($stabile)
|
|
);
|
|
}
|
|
|
|
public function syncAmministratori(iterable $amministratori): Collection
|
|
{
|
|
return collect($amministratori)->map(fn(Amministratore $amministratore) => $this->syncAmministratore($amministratore));
|
|
}
|
|
|
|
public function syncStabili(iterable $stabili): Collection
|
|
{
|
|
return collect($stabili)->map(fn(Stabile $stabile) => $this->syncStabile($stabile));
|
|
}
|
|
}
|