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

@@ -11,24 +11,9 @@ import ScrapperConfigurations from '../domain/setting/presentation/pages/Scrappe
import ScrapperEdit from '../domain/setting/presentation/pages/ScrapperEdit.vue';
import UserPreferencesPage from '../domain/setting/presentation/pages/UserPreferencesPage.vue';
import LogsPage from '../domain/system/presentation/pages/LogsPage.vue';
import StatusPage from '../domain/system/presentation/pages/StatusPage.vue';
import Layout from '../shared/components/layout/Layout.vue';
// Placeholder component for new routes
const PlaceholderComponent = {
props: {
title: {
type: String,
required: true
}
},
template: `
<div class="container mx-auto px-4 py-8">
<h1 class="text-2xl font-bold mb-4">{{ title }}</h1>
<p class="text-gray-600">Cette fonctionnalité sera bientôt disponible.</p>
</div>
`
};
const routes = [
{
path: '/',
@@ -66,13 +51,6 @@ const routes = [
name: 'import',
component: NewImportPage
},
// Pages placeholder avec chargement différé
{
path: '/manga/import',
name: 'manga-import',
component: PlaceholderComponent,
props: { title: 'Import de bibliothèque' }
},
{
path: '/manga/discover',
name: 'discover',
@@ -91,21 +69,7 @@ const routes = [
// Paramètres
{
path: '/settings',
name: 'settings',
component: PlaceholderComponent,
props: { title: 'Paramètres' }
},
{
path: '/settings/general',
name: 'settings-general',
component: PlaceholderComponent,
props: { title: 'Paramètres généraux' }
},
{
path: '/settings/folders',
name: 'settings-folders',
component: PlaceholderComponent,
props: { title: 'Gestion des dossiers' }
redirect: '/settings/scrappers',
},
{
path: '/settings/scrappers',
@@ -130,33 +94,18 @@ const routes = [
// Système
{
path: '/system',
name: 'system',
component: PlaceholderComponent,
props: { title: 'Système' }
redirect: '/system/status',
},
{
path: '/system/status',
name: 'system-status',
component: PlaceholderComponent,
props: { title: 'Status du système' }
},
{
path: '/system/backup',
name: 'system-backup',
component: PlaceholderComponent,
props: { title: 'Sauvegarde' }
component: StatusPage,
},
{
path: '/system/logs',
name: 'system-logs',
component: LogsPage,
},
{
path: '/system/updates',
name: 'system-updates',
component: PlaceholderComponent,
props: { title: 'Mises à jour' }
}
]
}
];