Refactor error handling and enhance API interactions across Filament pages
- Introduced `ApiErrorTranslator` to normalize and translate API error messages, providing clearer feedback in French. - Updated all Filament pages (Articles, Documents, Divers, Journaux, Tiers, TablesExplorer) to utilize the new error translation mechanism, improving user experience during API interactions. - Added validation for required fields before API calls, ensuring users receive immediate feedback when mandatory inputs are missing. - Implemented tracking properties to distinguish between "never searched" and "searched without results," enhancing the user interface. - Removed the obsolete `$results` property from the Articles page and added a new `$barcode` property to align with API requirements. - Updated documentation to reflect changes in API behavior and error handling, including new metadata returned by the `art_list` endpoint. - Added new tests to verify the functionality of the barcode handling and validation logic.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# System Patterns
|
||||
|
||||
Dernière mise à jour : 2026-02-21
|
||||
Dernière mise à jour : 2026-02-23
|
||||
|
||||
## Architecture applicative
|
||||
|
||||
@@ -70,6 +70,23 @@ Le toggle est implémenté avec deux boutons et un `wire:click="$set('mode', 're
|
||||
|
||||
La page Documents utilise une méthode privée `splitCsv(string $value): array` qui convertit les champs de formulaire (texte séparé par virgules) en tableaux PHP pour les paramètres d'API qui attendent des arrays (Artid, Qty, Saleprice, Discount, Vatid, Vatpc). Exemple : `"ART001,ART002"` devient `["ART001", "ART002"]`.
|
||||
|
||||
### Traduction et normalisation des erreurs API
|
||||
|
||||
`App\Support\ApiErrorTranslator` centralise le traitement des erreurs retournées par l'API :
|
||||
|
||||
- **Normalisation** : Le champ `error` de l'API peut être `null`, une chaîne ou un tableau de chaînes. La méthode `normalize()` convertit tout en chaîne lisible.
|
||||
- **Traduction** : La méthode `translate()` ajoute une explication en français aux messages d'erreur connus (ex: "Search terms are required" -> "Le champ de recherche est obligatoire.").
|
||||
- **Format de sortie** : Quand une explication est trouvée, le message est formaté sur plusieurs lignes : `{message original}\n\nExplication : {explication}`.
|
||||
|
||||
### Validation et tracking des appels API
|
||||
|
||||
Chaque page Filament implémente :
|
||||
|
||||
- **Validation** : Les champs obligatoires sont vérifiés avant chaque appel API. Si un champ requis est vide, un message d'erreur en français est affiché via `$this->errorMessage` et la méthode retourne sans appeler l'API. Les règles de validation sont basées sur la documentation fournisseur (`documentation/WEB-A-1 (3).md`).
|
||||
- **Tracking** : Des propriétés booléennes publiques (`$hasSearched`, `$hasCheckedStock`, etc.) sont mises à `true` après chaque appel API (succès ou erreur). Cela permet de distinguer "jamais recherché" de "recherché sans résultat" dans les vues Blade.
|
||||
- **État vide** : Le composant `json-block` accepte une prop `$searched`. Quand `$searched` est `true` et `$data` est vide, un état vide est affiché. Pour les `data-table`, les vues vérifient `$hasSearched && count($data) === 0`.
|
||||
- **Badge de comptage** : Les badges de résultats utilisent `count($data)` (comptage réel PHP) au lieu de `$metadata['rowcount']` (retourné par l'API, parfois incorrect).
|
||||
|
||||
### Endpoints non fonctionnels
|
||||
|
||||
Certains endpoints (Document_GetPDF, custom_geninv_updatestock) sont présents dans l'interface avec un bandeau d'avertissement ambre expliquant pourquoi ils ne fonctionnent pas. Les méthodes service existent dans LogisticsService pour permettre le test.
|
||||
@@ -146,6 +163,8 @@ app/
|
||||
AppServiceProvider.php # Config globale (CarbonImmutable, DB safety)
|
||||
Services/
|
||||
LogisticsService.php # Service centralisé API Logistics (19 méthodes)
|
||||
Support/
|
||||
ApiErrorTranslator.php # Normalisation et traduction des erreurs API
|
||||
|
||||
config/
|
||||
logistics.php # Configuration API Logistics (URL, clé, timeout, retry)
|
||||
@@ -174,14 +193,19 @@ database/
|
||||
...create_api_request_logs_table.php
|
||||
|
||||
tests/Feature/
|
||||
ArticlesPageTest.php # 8 tests page Articles (toggle, validation, tracking, erreurs)
|
||||
DocumentationTest.php # 5 tests page Documentation (Livewire + PDF)
|
||||
DocumentsPageTest.php # 13 tests page Documents (toggle, 9 endpoints, erreurs)
|
||||
DiversPageTest.php # 8 tests page Divers (toggle, 3 endpoints, erreurs)
|
||||
DocumentsPageTest.php # 21 tests page Documents (toggle, 9 endpoints, validation, erreurs)
|
||||
DiversPageTest.php # 8 tests page Divers (toggle, 3 endpoints, validation, erreurs)
|
||||
JournauxPageTest.php # 6 tests page Journaux (toggle, validation, tracking, erreurs)
|
||||
LogisticsServiceTest.php # 14 tests service API (mocks HTTP)
|
||||
TablesExplorerTest.php # 6 tests page TablesExplorer (Livewire)
|
||||
TiersPageTest.php # 8 tests page Tiers (toggle, validation, tracking, erreurs)
|
||||
FilamentDashboardTest.php # Tests dashboard Filament (1 test en échec pré-existant)
|
||||
DashboardTest.php # Tests dashboard
|
||||
ExampleTest.php # Test d'exemple Laravel
|
||||
tests/Unit/
|
||||
ApiErrorTranslatorTest.php # 9 tests normalisation et traduction des erreurs API
|
||||
|
||||
routes/
|
||||
web.php # Routes web (home, dashboard, documentation PDF)
|
||||
|
||||
Reference in New Issue
Block a user