netgescon-day0/app/Services/TenantArchiveRegistryService.php

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));
}
}