- Introduced `LogisticsApiException` to handle connection and request errors with user-friendly messages in French. - Updated `LogisticsService` to include configurable timeout, connection timeout, retry attempts, and sleep duration for retries. - Enhanced error handling in Filament pages to catch `LogisticsApiException` and provide clear feedback to users. - Updated `.env` and `config/logistics.php` to support new configuration options. - Added logging for failed API requests in `api_request_logs`. - Created comprehensive API documentation for Logistics endpoints.
4.3 KiB
4.3 KiB
System Patterns
Derniere mise a jour : 2026-02-20
Architecture applicative
Utilisateur --> Filament Dashboard (/admin)
|
v
Pages Filament (Livewire)
|
v
LogisticsService (app/Services/)
|
+---> API Logistics (HTTP POST + X-API-KEY)
| (retry automatique sur ConnectionException)
|
+---> api_request_logs (MySQL)
| (succes ET echecs)
|
+---> LogisticsApiException (en cas d'erreur)
Patterns utilises
Service centralise
App\Services\LogisticsService encapsule tous les appels HTTP vers l'API Logistics. Chaque methode publique correspond a un endpoint. Le service :
- Construit l'URL a partir de
config('logistics.base_url'),config('logistics.folder')et le nom de l'endpoint. - Ajoute automatiquement le header
X-API-KEY. - Configure
timeout()etconnectTimeout()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
LogisticsApiExceptionen cas d'erreur de connexion ou de requete.
Exception dediee
App\Exceptions\LogisticsApiException (etend RuntimeException) fournit :
- Des messages d'erreur en francais lisibles par l'utilisateur.
- Des proprietes
endpointetparamspour le contexte de l'erreur. - Deux methodes statiques :
connectionTimeout()(API injoignable) etrequestFailed()(erreur de requete).
Pages Filament personnalisees (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
LogisticsServiceviaapp(LogisticsService::class)dans des methodes d'action (ex:searchArticles()). - Attrape
LogisticsApiExceptionpour afficher un message clair, et\Throwableen fallback. - Affiche les resultats dans des tableaux HTML dynamiques generes dans les vues Blade.
Configuration externalisee
Les parametres de connexion a l'API (URL, cle, dossier, timeout, retry) sont dans config/logistics.php et lus depuis .env.
Structure des repertoires
app/
Exceptions/
LogisticsApiException.php # Exception dediee API
Filament/
Pages/
Articles.php # Recherche articles + stock
Documents.php # Recherche documents + detail
Journaux.php # Recherche journaux
TablesExplorer.php # Exploration tables + colonnes
Tiers.php # Recherche tiers + historique
Models/
User.php # Modele utilisateur (Fortify)
Providers/
Filament/
AdminPanelProvider.php # Configuration du panel (sans auth)
FortifyServiceProvider.php # Authentification Fortify
AppServiceProvider.php # Config globale (CarbonImmutable, DB safety)
Services/
LogisticsService.php # Service centralise API Logistics
config/
logistics.php # Configuration API Logistics (URL, cle, timeout, retry)
database/
migrations/
...create_users_table.php
...create_cache_table.php
...create_jobs_table.php
...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
Conventions
- Filament v5 : les icones de navigation utilisent l'enum
Filament\Support\Icons\Heroicon(pas de strings). - Filament v5 : la propriete
$viewest non-static (protected string $view). - Les proprietes statiques (
$navigationIcon,$navigationLabel,$title,$navigationSort) restent static. - Les appels API passent toujours par
LogisticsService, jamais directement parHttp::. - Les pages Filament attrapent
LogisticsApiExceptionen premier, puis\Throwableen fallback. - Les messages d'erreur affiches a l'utilisateur sont en francais.