🎉 First commit

This commit is contained in:
2026-02-20 08:40:00 +01:00
commit 07a3b3a874
206 changed files with 22834 additions and 0 deletions

24
memory-bank/README.md Normal file
View File

@@ -0,0 +1,24 @@
# Memory Bank
Derniere mise a jour : 2026-02-19
## Presentation
Ce dossier contient le Memory Bank du projet API Logistics. Il sert de source de verite pour que l'IA (Cursor) conserve le contexte du projet entre les sessions.
## Structure
| Fichier | Description |
|---------|-------------|
| `projectbrief.md` | Vision, objectifs et perimetre du projet |
| `productContext.md` | Contexte produit, problemes resolus, experience utilisateur |
| `techContext.md` | Stack technique, API Logistics, dependances |
| `systemPatterns.md` | Architecture, patterns, structure des repertoires |
| `activeContext.md` | Travail en cours, decisions recentes, prochaines etapes |
| `progress.md` | Avancement, ce qui fonctionne, ce qui reste a faire |
## Utilisation
- **Lecture automatique** : La regle Cursor `.cursor/rules/memory-bank.mdc` est configuree avec `alwaysApply: true`. L'IA lit ces fichiers a chaque session.
- **Mise a jour** : Dire **"update memory bank"** dans le chat pour que l'IA relise le code source et mette a jour tous les fichiers.
- **Quand mettre a jour** : Apres chaque changement significatif (nouvelle fonctionnalite, changement d'architecture, correction de bug, nouvelle dependance).

View File

@@ -0,0 +1,33 @@
# Active Context
Derniere mise a jour : 2026-02-19
## Travail en cours
Aucun travail en cours. Le setup initial du projet est termine.
## Decisions recentes
- **Filament v5 sans authentification** : Le `AdminPanelProvider` a ete configure sans `->login()` et sans `authMiddleware` pour permettre un acces libre au dashboard.
- **Pages personnalisees plutot que Resources** : L'application interroge une API externe, il n'y a pas de modeles Eloquent a gerer en CRUD. Les pages Filament utilisent des vues Blade avec des formulaires Livewire.
- **MySQL au lieu de SQLite** : Choix de l'utilisateur pour la base de donnees.
- **LogisticsService** : Toutes les interactions avec l'API sont centralisees dans un seul service pour faciliter la maintenance et le tracage.
- **Heroicon enum** : Filament v5 impose l'utilisation de `BackedEnum` pour `$navigationIcon` au lieu de strings.
- **$view non-static** : Filament v5 a change `$view` de static a instance property.
## Changements importants
- Installation de Filament v5.0.0 (31 packages ajoutes).
- 5 pages Filament creees : TablesExplorer, Articles, Documents, Journaux, Tiers.
- `LogisticsService` couvre 17 endpoints de l'API.
- Migration `api_request_logs` creee pour le tracage des requetes.
- 8 tests Pest ecrits et valides pour le service.
## Prochaines etapes
- L'utilisateur doit creer la base de donnees MySQL `api_logistics`.
- L'utilisateur doit executer `php artisan migrate`.
- L'utilisateur doit renseigner sa cle API dans `.env` (`LOGISTICS_API_KEY`).
- L'utilisateur doit executer `npm run build`.
- Tester le dashboard avec de vraies donnees API.
- Eventuellement : ajouter des pages pour les endpoints d'ecriture (document_add, document_mod).

View File

@@ -0,0 +1,29 @@
# Product Context
Derniere mise a jour : 2026-02-19
## Pourquoi ce projet existe
L'API Logistics (Flex/ESI Gescom) est un systeme de gestion commerciale accessible via une API REST. La documentation officielle est limitee. Ce projet a ete cree pour :
- Explorer les endpoints disponibles de maniere interactive.
- Comprendre les parametres attendus et les formats de reponse.
- Servir de base pour une documentation plus complete.
## Problemes resolus
- **Exploration de l'API** : Le dashboard permet de tester chaque endpoint avec des parametres personnalisables, sans avoir besoin de Postman.
- **Comprehension de la structure** : La page "Tables" permet de decouvrir les tables et colonnes disponibles dans l'API.
- **Tracabilite** : Chaque requete effectuee est enregistree dans `api_request_logs` pour pouvoir analyser les echanges.
## Experience utilisateur
L'utilisateur accede au dashboard Filament sur `http://api-logistics.test/admin`. La navigation laterale propose 5 pages :
1. **Tables** : Cliquer sur une table pour voir ses colonnes. Utile pour connaitre les champs disponibles dans les parametres `select`.
2. **Articles** : Formulaire de recherche (search, select, results) + verification du stock d'un article par son ARTID.
3. **Documents** : Recherche par tiers (thirdid) + consultation du detail d'un document (jnl + number).
4. **Journaux** : Recherche par type de journal (TYPE).
5. **Tiers** : Recherche de tiers (search obligatoire) + historique des articles d'un tiers.
Chaque page affiche les resultats sous forme de tableau dynamique et les metadonnees de la reponse (nombre de resultats, succes).

41
memory-bank/progress.md Normal file
View File

@@ -0,0 +1,41 @@
# Progress
Derniere mise a jour : 2026-02-19
## Ce qui fonctionne
- [x] Projet Laravel 12 initialise (livewire-starter-kit)
- [x] Livewire 4 + Flux UI Free v2 installes
- [x] Fortify installe (authentification existante, non utilisee par Filament)
- [x] Documentation API redigee (`documentation/WEB-A-1 (3).md`, `documentation/result.pdf`)
- [x] Memory bank cree et structure (`memory-bank/`, `.cursor/rules/memory-bank.mdc`)
- [x] Configuration API Logistics (`.env`, `config/logistics.php`)
- [x] `LogisticsService` cree (`app/Services/LogisticsService.php`) avec 17 methodes
- [x] Migration `api_request_logs` creee
- [x] Filament v5.0.0 installe et configure sans authentification
- [x] 5 pages Filament creees : TablesExplorer, Articles, Documents, Journaux, Tiers
- [x] 5 vues Blade associees dans `resources/views/filament/pages/`
- [x] 8 tests Pest pour LogisticsService (tous passent)
- [x] `README.md` cree
- [x] Formatage Pint valide
## Ce qui reste a faire
- [ ] Creer la base de donnees MySQL `api_logistics` (a faire par l'utilisateur)
- [ ] Executer `php artisan migrate` (a faire par l'utilisateur)
- [ ] Renseigner la cle API dans `.env` (`LOGISTICS_API_KEY`)
- [ ] Executer `npm run build`
- [ ] Tester le dashboard avec de vraies donnees API
- [ ] Eventuellement : pages d'ecriture (document_add, document_mod)
- [ ] Eventuellement : ameliorer l'affichage des resultats (pagination, formatage)
## Problemes connus
- L'erreur `SQLSTATE[HY000] [1049] Unknown database 'api_logistics'` apparait lors de `composer update` car le script `boost:update` tente d'acceder a la base de donnees qui n'existe pas encore. Sans impact sur le fonctionnement une fois la base creee.
## Metriques
- Tests : 8 (tous passent)
- Pages Filament : 5
- Endpoints API couverts par LogisticsService : 17
- Migrations : 5 (users, cache, jobs, two_factor, api_request_logs)

View File

@@ -0,0 +1,34 @@
# Project Brief
Derniere mise a jour : 2026-02-19
## Vision
Application Laravel de test dont l'objectif est de comprendre le fonctionnement de l'API Logistics (Flex/ESI Gescom) et d'en produire une documentation complete et comprehensible.
## Objectifs
1. Comprendre le fonctionnement de l'API Logistics.
2. Creer une application simple permettant d'envoyer et de recuperer des donnees vers/depuis l'API.
3. Produire une documentation complete et comprehensible de l'API.
## Perimetre fonctionnel
- Dashboard Filament v5 accessible sans authentification sur `/admin`.
- Pages de consultation pour les principales entites de l'API : tables, articles, documents, journaux, tiers.
- Formulaires de recherche parametrables pour chaque endpoint.
- Affichage des resultats bruts retournes par l'API.
- Tracage des requetes effectuees dans une table `api_request_logs`.
## Contraintes
- Pas d'authentification sur le dashboard (projet de test interne).
- L'API Logistics est hebergee sur le serveur TSE-10-TEST (`http://tse-10-test.esiweb.pro`).
- Toutes les requetes API sont en POST et necessitent un header `X-API-KEY`.
- Le nom du dossier dans les URLs de l'API doit etre en minuscules.
## Ressources
- Documentation Postman : https://documenter.getpostman.com/view/40440561/2sB2qaj2Pz
- Documentation interne : `documentation/WEB-A-1 (3).md` et `documentation/result.pdf`
- Fichier projet : `project.md`

View File

@@ -0,0 +1,92 @@
# System Patterns
Derniere mise a jour : 2026-02-19
## Architecture applicative
```
Utilisateur --> Filament Dashboard (/admin)
|
v
Pages Filament (Livewire)
|
v
LogisticsService (app/Services/)
|
+---> API Logistics (HTTP POST + X-API-KEY)
|
+---> api_request_logs (MySQL)
```
## 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`.
- Enregistre chaque requete dans la table `api_request_logs`.
- Retourne un tableau PHP avec les cles `data`, `metadata`, `error`.
### 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 `LogisticsService` via `app(LogisticsService::class)` dans des methodes d'action (ex: `searchArticles()`).
- Affiche les resultats dans des tableaux HTML dynamiques generes dans les vues Blade.
### Configuration externalisee
Les parametres de connexion a l'API sont dans `config/logistics.php` et lus depuis `.env`.
## Structure des repertoires
```
app/
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)
Services/
LogisticsService.php # Service centralise API Logistics
config/
logistics.php # Configuration API Logistics
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 # 8 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 `$view` est non-static (`protected string $view`).
- Les proprietes statiques (`$navigationIcon`, `$navigationLabel`, `$title`, `$navigationSort`) restent static.
- Les appels API passent toujours par `LogisticsService`, jamais directement par `Http::`.

View File

@@ -0,0 +1,91 @@
# Tech Context
Derniere mise a jour : 2026-02-19
## Stack technique
| Composant | Version | Role |
|-----------|---------|------|
| PHP | 8.4 | Langage serveur |
| Laravel | 12 | Framework applicatif |
| Filament | 5.0 | Panel admin / dashboard |
| Livewire | 4 | Composants reactifs |
| Flux UI Free | 2.9+ | Composants UI Livewire |
| Fortify | 1.30+ | Authentification (existant, non utilise par Filament) |
| Pest | 4.4+ | Framework de tests |
| MySQL | - | Base de donnees |
| Vite | - | Bundler frontend |
| Tailwind CSS | 4 | Framework CSS |
## Dependances principales (composer.json)
- `filament/filament: ^5.0`
- `laravel/framework: ^12.0`
- `livewire/livewire: ^4.0`
- `livewire/flux: ^2.9.0`
- `laravel/fortify: ^1.30`
## Configuration
### Variables d'environnement specifiques
```
LOGISTICS_API_BASE_URL=http://tse-10-test.esiweb.pro
LOGISTICS_API_KEY=<cle API>
LOGISTICS_API_FOLDER=esigescom
```
Fichier de config : `config/logistics.php`
### Base de donnees
- Connexion : MySQL
- Base : `api_logistics`
- Configuration dans `.env` : `DB_CONNECTION=mysql`
## API Logistics
### Connexion
- Serveur : TSE-10-TEST
- Base URL : `http://tse-10-test.esiweb.pro`
- Dossier : `esigescom` (minuscules obligatoires)
- Authentification : Header `X-API-KEY`
- Methode : POST pour tous les endpoints
- Port HTTP : 5186 / Port HTTPS : 7126
### Structure de reponse
```json
{
"data": "<resultat>",
"metadata": { "rowcount": 0, "issuccess": true },
"error": "<message d'erreur ou null>"
}
```
### Endpoints
| Endpoint | Description | Parametres principaux |
|----------|-------------|-----------------------|
| `tables_list` | Liste des tables | - |
| `column_list/{table}` | Colonnes d'une table | table (URL) |
| `art_list` | Liste d'articles | select, results, search, barcode |
| `art_getstk` | Stock d'un article | ARTID |
| `jnl_list` | Liste des journaux | select, results, TYPE |
| `document_list` | Liste des documents | select, thirdid |
| `document_detail` | Detail d'un document | jnl, number |
| `document_add` | Ajout d'un document | ThirdId, Date, Artid[], Qty[], Saleprice[], JNL, ... |
| `document_mod` | Modification d'un document | number, Thirdid, Artid[], Qty[], Saleprice[], JNL, ... |
| `Document_GetStatusList` | Statuts d'un journal | jnl |
| `Document_GetUnitPriceAndVat` | Prix et TVA | ARTID, QTY, JNL, THIRDID, DATE |
| `Document_GetDueDate` | Echeance | paydelay, date |
| `Document_GetAttachListThumbnail` | Miniatures annexes | JNL, NUMBER |
| `third_list` | Liste des tiers | select, results, search |
| `third_GetArtHistory` | Historique articles tiers | thirdid |
| `getserialnumber` | Numero de serie | - |
| `codes_list` | Donnees par code | code |
### Tables accessibles
art, attach, barcode, category, codes, cust, docdet, dochead, docpay, file, hist, incodes, jnl, pers, price, stk