feat(system): page Status avec endpoint API Platform et composants Vue

- Nouveau domaine System/Domain/Model/SystemStatus (value object)
- QueryHandler agrégeant métriques mangas, chapitres, jobs (global/24h/7j), stockage et sources
- Endpoint GET /api/system/status via API Platform (singleton)
- Calcul de l'espace disque par RecursiveDirectoryIterator sur public/images
- Page Vue /system/status avec 6 cards (Mangas, Chapitres, Jobs, Stockage, Sources, Système)
- Nettoyage du router : suppression des PlaceholderComponent et routes placeholder
- Sidebar : suppression des entrées sans page réelle
This commit is contained in:
ext.jeremy.guillot@maxicoffee.domains
2026-03-17 22:04:48 +01:00
parent c2b55e9018
commit ca8791cc0d
21 changed files with 825 additions and 61 deletions

View File

@@ -0,0 +1,56 @@
<?php
namespace App\Domain\System\Infrastructure\ApiPlatform\Resource;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use App\Domain\System\Infrastructure\ApiPlatform\State\Provider\GetSystemStatusStateProvider;
#[ApiResource(
shortName: 'System',
operations: [
new Get(
uriTemplate: '/system/status',
provider: GetSystemStatusStateProvider::class,
)
]
)]
class GetSystemStatusResource
{
#[ApiProperty(identifier: true)]
public string $id = 'current';
public int $totalMangas = 0;
public int $monitoredMangas = 0;
/** @var array<string, int> */
public array $mangasByStatus = [];
public int $totalChapters = 0;
public int $downloadedChapters = 0;
public int $pendingChapters = 0;
public int $totalJobs = 0;
public int $completedJobs = 0;
public int $failedJobs = 0;
public int $pendingJobs = 0;
public int $inProgressJobs = 0;
public int $totalJobsLast24h = 0;
public int $completedJobsLast24h = 0;
public int $failedJobsLast24h = 0;
public float $successRateLast24h = 0.0;
public int $totalJobsLast7d = 0;
public int $completedJobsLast7d = 0;
public int $failedJobsLast7d = 0;
public float $successRateLast7d = 0.0;
public string $storagePath = '';
public int $storageTotalBytes = 0;
public int $storageFreeBytes = 0;
public int $storageUsedBytes = 0;
public string $storageTotalHuman = '';
public string $storageFreeHuman = '';
public string $storageUsedHuman = '';
public int $totalSources = 0;
/** @var array<string, int> */
public array $sourcesByHealth = [];
public string $phpVersion = '';
public string $generatedAt = '';
}