Update project dependencies and enhance documentation

- Added `barryvdh/laravel-dompdf` to `composer.json` for PDF generation capabilities.
- Updated `boost.json` to include `tailwindcss-development` in skills.
- Modified `package.json` and `package-lock.json` to upgrade Tailwind CSS and related packages.
- Improved README.md for clarity and corrected French language errors.
- Created design system documentation for Filament components.
- Added new Filament pages for Dashboard and Documentation with dynamic content loading.
- Enhanced TablesExplorer functionality with improved table and column management.
This commit is contained in:
2026-02-20 14:16:24 +01:00
parent 4aef33f270
commit 657c5ad5e3
46 changed files with 3318 additions and 857 deletions

View File

@@ -1,6 +1,6 @@
# System Patterns
Derniere mise a jour : 2026-02-20
Dernière mise à jour : 2026-02-20
## Architecture applicative
@@ -17,72 +17,131 @@ Utilisateur --> Filament Dashboard (/admin)
| (retry automatique sur ConnectionException)
|
+---> api_request_logs (MySQL)
| (succes ET echecs)
| (succès ET échecs)
|
+---> LogisticsApiException (en cas d'erreur)
```
## Patterns utilises
## Patterns utilisés
### Service centralise
### Service centralisé
`App\Services\LogisticsService` encapsule tous les appels HTTP vers l'API Logistics. Chaque methode publique correspond a un endpoint. Le service :
`App\Services\LogisticsService` encapsule tous les appels HTTP vers l'API Logistics. Chaque méthode publique correspond à un endpoint. Le service :
- Construit l'URL a partir de `config('logistics.base_url')`, `config('logistics.folder')` et le nom de l'endpoint.
- Construit l'URL à partir de `config('logistics.base_url')`, `config('logistics.folder')` et le nom de l'endpoint.
- Ajoute automatiquement le header `X-API-KEY`.
- Configure `timeout()` et `connectTimeout()` depuis la config.
- Effectue un retry automatique (nombre et delai configurables) uniquement sur les `ConnectionException`.
- Enregistre chaque requete dans la table `api_request_logs` (succes et echecs).
- Retourne un tableau PHP avec les cles `data`, `metadata`, `error`.
- Lance une `LogisticsApiException` en cas d'erreur de connexion ou de requete.
- Effectue un retry automatique (nombre et délai configurables) uniquement sur les `ConnectionException`.
- Enregistre chaque requête dans la table `api_request_logs` (succès et échecs).
- Retourne un tableau PHP avec les clés `data`, `metadata`, `error`.
- Lance une `LogisticsApiException` en cas d'erreur de connexion ou de requête.
### Exception dediee
### Exception dédiée
`App\Exceptions\LogisticsApiException` (etend `RuntimeException`) fournit :
`App\Exceptions\LogisticsApiException` (étend `RuntimeException`) fournit :
- Des messages d'erreur en francais lisibles par l'utilisateur.
- Des proprietes `endpoint` et `params` pour le contexte de l'erreur.
- Deux methodes statiques : `connectionTimeout()` (API injoignable) et `requestFailed()` (erreur de requete).
- Des messages d'erreur en français lisibles par l'utilisateur.
- Des propriétés `endpoint` et `params` pour le contexte de l'erreur.
- Deux méthodes statiques : `connectionTimeout()` (API injoignable) et `requestFailed()` (erreur de requête).
### Pages Filament personnalisees (pas de Resources)
### Pages Filament personnalisées (pas de Resources)
L'application n'utilise pas de Resources Filament (pas de CRUD local). Chaque page Filament :
- Etend `Filament\Pages\Page`.
- Utilise des proprietes Livewire publiques pour les champs de formulaire.
- Appelle `LogisticsService` via `app(LogisticsService::class)` dans des methodes d'action (ex: `searchArticles()`).
- Attrape `LogisticsApiException` pour afficher un message clair, et `\Throwable` en fallback.
- Affiche les resultats dans des tableaux HTML dynamiques generes dans les vues Blade.
- Étend `Filament\Pages\Page`.
- Utilise des propriétés Livewire publiques pour les champs de formulaire.
- Appelle `LogisticsService` via `app(LogisticsService::class)` dans des méthodes d'action (ex: `searchArticles()`).
- Attrape `LogisticsApiException` en premier, puis `\Throwable` en fallback.
- Affiche les résultats via les composants du système de design `x-logistics.*`.
### Configuration externalisee
### Page Documentation
Les parametres de connexion a l'API (URL, cle, dossier, timeout, retry) sont dans `config/logistics.php` et lus depuis `.env`.
`App\Filament\Pages\Documentation` est une page spéciale qui :
## Structure des repertoires
- Lit le fichier `documentation/documentation_api_logistics.md` au montage.
- Convertit le markdown en HTML via `Str::markdown()`.
- Affiche le contenu dans une vue avec la classe CSS `.documentation-prose` pour un rendu stylisé.
- Propose deux actions d'en-tête : télécharger en PDF (via `barryvdh/laravel-dompdf`) et ouvrir dans un nouvel onglet.
### Système de design (composants Blade)
Convention documentée dans `.cursor/rules/design-system.mdc`. Tous les composants visuels réutilisables sont dans `resources/views/components/logistics/` :
| Composant | Rôle |
|-----------|------|
| `<x-logistics.card>` | Conteneur blanc arrondi avec ombre et anneau |
| `<x-logistics.section-header>` | En-tête de section (titre, description, slot `actions`) |
| `<x-logistics.error-banner>` | Bandeau d'erreur API conditionnel |
| `<x-logistics.stat-bar>` | Barre horizontale de métadonnées |
| `<x-logistics.stat-item>` | Élément individuel (icône + label + valeur) |
| `<x-logistics.data-table>` | Tableau dynamique avec en-têtes auto-détectés et état vide |
| `<x-logistics.empty-state>` | État vide centré (icône + titre + description) |
| `<x-logistics.search-input>` | Champ de recherche avec icône loupe intégrée |
| `<x-logistics.form-field>` | Champ de formulaire (label + input) à espacement homogène |
| `<x-logistics.json-block>` | Bloc JSON formaté avec bordure et fond adapté |
Règles :
- Toujours utiliser les composants `x-logistics.*` au lieu de dupliquer les classes CSS.
- Un `<x-logistics.card>` n'a pas de padding interne. Le padding est géré par les enfants (`<div class="p-6">`).
- Le `<x-logistics.section-header>` est le premier enfant d'une carte et crée une bordure de séparation.
- Toutes les actions réseau doivent avoir un indicateur de chargement (`wire:loading`).
### Thème Filament personnalisé
Le panel Filament utilise un thème CSS personnalisé (`resources/css/filament/admin/theme.css`) enregistré via `->viteTheme()` dans `AdminPanelProvider`. Ce thème :
- Importe le CSS de base Filament.
- Active le plugin `@tailwindcss/typography` pour les classes `prose`.
- Scanne les fichiers `app/Filament/**/*`, `resources/views/filament/**/*`, et `resources/views/components/logistics/**/*` pour inclure les classes Tailwind utilisées dans les composants.
- Contient des styles CSS personnalisés pour la classe `.documentation-prose` : hiérarchie de titres (h1-h4 avec bordures), tableaux avec bordures et en-têtes stylisés, blocs de code avec fond sombre, code inline avec fond distinct, liens colorés, listes avec marqueurs, séparateurs horizontaux visibles.
Après tout ajout de nouvelles classes Tailwind dans ces fichiers, il faut exécuter `npm run build`.
### Configuration externalisée
Les paramètres de connexion à l'API (URL, clé, dossier, timeout, retry) sont dans `config/logistics.php` et lus depuis `.env`.
## Structure des répertoires
```
app/
Exceptions/
LogisticsApiException.php # Exception dediee API
LogisticsApiException.php # Exception dédiée API
Filament/
Pages/
Articles.php # Recherche articles + stock
Documents.php # Recherche documents + detail
Dashboard.php # Page d'accueil
Documentation.php # Documentation API (markdown -> HTML)
Documents.php # Recherche documents + détail
Journaux.php # Recherche journaux
TablesExplorer.php # Exploration tables + colonnes
TablesExplorer.php # Exploration tables + colonnes (filtre, déduplication, types)
Tiers.php # Recherche tiers + historique
Models/
User.php # Modele utilisateur (Fortify)
User.php # Modèle utilisateur (Fortify)
Providers/
Filament/
AdminPanelProvider.php # Configuration du panel (sans auth)
AdminPanelProvider.php # Configuration du panel (sans auth, viteTheme)
FortifyServiceProvider.php # Authentification Fortify
AppServiceProvider.php # Config globale (CarbonImmutable, DB safety)
Services/
LogisticsService.php # Service centralise API Logistics
LogisticsService.php # Service centralisé API Logistics
config/
logistics.php # Configuration API Logistics (URL, cle, timeout, retry)
logistics.php # Configuration API Logistics (URL, clé, timeout, retry)
documentation/
documentation_api_logistics.md # Documentation complète de l'API (avec accents)
resources/
css/
app.css # CSS principal (Tailwind 4, Flux UI)
filament/admin/
theme.css # Thème Filament personnalisé (Tailwind 4 + Typography + prose)
views/
components/logistics/ # 10 composants du système de design
filament/pages/ # 6 vues de pages Filament
pdf/
documentation.blade.php # Template PDF pour la documentation
database/
migrations/
@@ -92,23 +151,32 @@ database/
...add_two_factor_columns_to_users_table.php
...create_api_request_logs_table.php
resources/views/
filament/pages/
articles.blade.php
documents.blade.php
journaux.blade.php
tables-explorer.blade.php
tiers.blade.php
tests/Feature/
LogisticsServiceTest.php # 12 tests avec mocks HTTP
DocumentationTest.php # 5 tests page Documentation (Livewire + PDF)
LogisticsServiceTest.php # 12 tests service API (mocks HTTP)
TablesExplorerTest.php # 6 tests page TablesExplorer (Livewire)
FilamentDashboardTest.php # Tests dashboard Filament
DashboardTest.php # Tests dashboard
ExampleTest.php # Test d'exemple Laravel
routes/
web.php # Routes web (home, dashboard, documentation PDF)
.cursor/rules/
design-system.mdc # Convention de design (composants, CSS, structure)
memory-bank.mdc # Gestion du memory bank
update-documentation.mdc # Procédure de mise à jour de la documentation
laravel-boost.mdc # Règles Laravel Boost
```
## Conventions
- Filament v5 : les icones de navigation utilisent l'enum `Filament\Support\Icons\Heroicon` (pas de strings).
- Filament v5 : la propriete `$view` est non-static (`protected string $view`).
- Les proprietes statiques (`$navigationIcon`, `$navigationLabel`, `$title`, `$navigationSort`) restent static.
- Filament v5 : les icônes de navigation utilisent l'enum `Filament\Support\Icons\Heroicon` (pas de strings).
- Filament v5 : la propriété `$view` est non-static (`protected string $view`).
- Les propriétés statiques (`$navigationIcon`, `$navigationLabel`, `$title`, `$navigationSort`) restent static.
- Les appels API passent toujours par `LogisticsService`, jamais directement par `Http::`.
- Les pages Filament attrapent `LogisticsApiException` en premier, puis `\Throwable` en fallback.
- Les messages d'erreur affiches a l'utilisateur sont en francais.
- Les messages d'erreur affichés à l'utilisateur sont en français.
- Toutes les vues Filament utilisent les composants `x-logistics.*` du système de design.
- Après modification des vues ou composants, exécuter `npm run build` pour recompiler le thème.
- Tous les contenus rédigés en français doivent utiliser les accents appropriés.