From 62249e6c130bc087f642df099a40f339aac9afe3 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Thu, 28 May 2026 16:45:14 +0200 Subject: [PATCH] docs: update API documentation with missing endpoints and schema corrections --- API_DOCUMENTATION.md | 285 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 284 insertions(+), 1 deletion(-) diff --git a/API_DOCUMENTATION.md b/API_DOCUMENTATION.md index 300b9c6..72eccb4 100644 --- a/API_DOCUMENTATION.md +++ b/API_DOCUMENTATION.md @@ -259,6 +259,53 @@ GET /api/articles/:id/mouvements --- +### Dernier fournisseur par site + +``` +GET /api/articles/:id/dernier-fournisseur?site= +``` + +Retourne le fournisseur réel issu du dernier mouvement d'entrée en stock (`GenreMvt = 1`) pour chaque site. C'est le seul moyen fiable d'identifier quel fournisseur a livré l'exemplaire du produit actuellement en rayon. + +| Paramètre | Type | Description | Défaut | +|-----------|--------|----------------------------|--------| +| `site` | string | Filtrer par site (partiel) | tous | + +**Réponse** : +```json +{ + "artnoid": "12345", + "fournisseurs_par_site": [ + { + "site": "001", + "date_derniere_entree": "2026-05-15T00:00:00.000Z", + "codefou": "FOU01", + "nom_fournisseur": "MON FOURNISSEUR", + "qte_entree": 24, + "prmp": 10.20 + } + ] +} +``` + +--- + +### Photo de produit (Proxy) + +``` +GET /api/articles/:id/photo?size= +``` + +Proxy et met en cache l'image du produit depuis `lafoirfouille.fr` en contournant les limitations de CORS. + +| Paramètre | Type | Description | Défaut | +|-----------|--------|---------------------------------------------------|----------| +| `size` | string | Taille de l'image (`large` pour 1200x1200H) | 300Wx300H| + +**Réponse** : Le flux binaire de l'image avec un en-tête `Content-Type` approprié (ex: `image/jpeg`) et une directive de mise en cache HTTP. + +--- + ## Fournisseurs ### Liste des fournisseurs @@ -329,6 +376,28 @@ GET /api/fournisseurs/:code/commandes --- +### Franco de port d'un fournisseur +``` +GET /api/fournisseurs/:code/franco +``` +Retourne le seuil de franco de port configuré pour le fournisseur (priorité à la table `fouport2` via `fouport` par rapport à la table `foucad`). + +**Réponse** : +```json +{ + "code": "FOU01", + "nom": "MON FOURNISSEUR SARL", + "franco_ht": 350.00, + "franco_port": 350.00, + "franco_general": 300.00, + "actif": "O", + "duree": 0, + "unite": null +} +``` + +--- + ## Stock ### Stock global @@ -736,6 +805,44 @@ GET /api/mouvements/synthese?dateDebut=&dateFin=&site= --- +### Règlements de caisse +``` +GET /api/mouvements/reglements +``` +Liste l'ensemble des règlements et paiements de tickets de caisse de la table `MvtReg`. + +| Paramètre | Type | Description | Défaut | +|-------------|------|--------------------------|------------| +| `dateDebut` | date | Date début `YYYY-MM-DD` | 2024-01-01 | +| `dateFin` | date | Date fin `YYYY-MM-DD` | 2099-12-31 | +| `page` | int | Numéro de page | 1 | +| `limit` | int | Lignes max (max 1000) | 100 | + +**Réponse** : +```json +{ + "page": 1, + "limit": 100, + "reglements": [ + { + "datmvt": "2026-05-28T14:30:00.000Z", + "codtick": "TK123456", + "codcartecli": "CARD789", + "coddev": "EUR", + "mntreg": 45.90, + "mntregdev": 45.90, + "clientnom": "DUPONT JEAN", + "echeance": null, + "reference": null, + "typereg": "CB", + "suividatecreation": "2026-05-28T14:31:00.000Z" + } + ] +} +``` + +--- + ## Performance ### Chiffre d'affaires @@ -787,16 +894,23 @@ GET /api/performance/hitparade | `site` | string | Filtrer par site | tous | | `limit` | int | Nombre d'articles (max 500) | 50 | | `groupBy` | `ca` / `qte` / `marge`| Critère de classement | `ca` | +| `codefou` | string | Filtrer par code fournisseur | — | **Réponse** : ```json { + "dateDebut": "2024-01-01", + "dateFin": "2099-12-31", + "site": "tous", + "codefou": null, "classementPar": "ca", "hitparade": [ { "codein": "ABC123", "libelle1": "MON ARTICLE", "site": "001", + "code_fournisseur": "FOU01", + "fournisseur": "MON FOURNISSEUR", "nb_passages": 320, "qte_vendue": 640, "ca_ht": 5760.00, @@ -840,7 +954,7 @@ GET /api/performance/ca/fournisseur?dateDebut=&dateFin=&site= } ``` -> La jointure se fait via `artfou1.preference = true` (fournisseur principal de l'article) → `fouident.code` pour le nom. +> La jointure se fait via `artfou1.preference = 1` (fournisseur principal de l'article) → `fouident.code` pour le nom. --- @@ -896,6 +1010,140 @@ GET /api/performance/ca/gamme?dateDebut=&dateFin=&site= --- +### Tableau de bord quotidien (Dashboard) +``` +GET /api/performance/dashboard +``` +Retourne une synthèse complète du jour demandé (par rapport au même jour à N-1) ainsi que les 3 Top 10 (CA, Quantité et Marge) par site. + +| Paramètre | Type | Description | Défaut | +|-----------|--------|---------------------------------------------------|------------| +| `date` | date | Date cible `YYYY-MM-DD` | hier | +| `site` | string | Filtrer par site (facultatif) | tous | + +**Réponse** : +```json +{ + "date": "2026-03-20", + "date_n1": "2025-03-20", + "sites": [ + { + "site": "001", + "ca_ttc": 12450.00, + "ca_ttc_n1": 11800.00, + "evol_ca": "+5.5%", + "trafic": 420, + "trafic_n1": 410, + "evol_trafic": "+2.4%" + } + ], + "top10_ca": [ + { + "codein": "129632", + "libelle1": "ETUI 10 CARTES", + "site": "001", + "ca_ttc": 245.50, + "qte_vendue": 60, + "marge": 95.20 + } + ], + "top10_qte": [ + { + "codein": "129632", + "libelle1": "ETUI 10 CARTES", + "site": "001", + "ca_ttc": 245.50, + "qte_vendue": 60, + "marge": 95.20 + } + ], + "top10_marge": [ + { + "codein": "129632", + "libelle1": "ETUI 10 CARTES", + "site": "001", + "ca_ttc": 245.50, + "qte_vendue": 60, + "marge": 95.20 + } + ] +} +``` + +--- + +## Publicités (Ecoulement) + +### Liste des publicités avec écoulement +``` +GET /api/publicites +``` + +| Paramètre | Type | Description | Défaut | +|---|---|---|---| +| `search` | string | Recherche dans l'intitulé ou le code | — | +| `site` | string | Filtrer par site | — | +| `dateDebut` | date | `YYYY-MM-DD` | 2000-01-01 | +| `dateFin` | date | `YYYY-MM-DD` | 2099-12-31 | +| `statut` | string | `en_cours`, `passees`, `futures`, ou `toutes` | — | +| `page` | int | Numéro de page | 1 | +| `limit` | int | Lignes par page | 50 | + +### Historique des publicités (toutes les pubs) +``` +GET /api/publicites/historique +``` +Mêmes paramètres que `/api/publicites` (sauf site, page, limit). Retourne une liste complète incluant les publicités sans données d'écoulement. + +### Détail d'une publicité (synthèse par site + articles) +``` +GET /api/publicites/:code?site= +``` +Retourne la synthèse de la publicité par site ainsi que les données d'écoulement de chaque article. + +--- + +## Commandes Automatiques + +### Propositions de commandes automatiques +``` +GET /api/commandes-auto?site=&codefou= +``` +Retourne les propositions de commandes auto agrégées par site et fournisseur, avec comparaison au franco de port. + +### Détail des articles proposés pour un fournisseur +``` +GET /api/commandes-auto/:codefou?site= +``` +Retourne le résumé (franco, quantités, montant) et le détail par article des propositions. + +--- + +## Schéma de la Base de Données + +### Structure complète de la base +``` +GET /api/schema +``` +Retourne la structure complète de la base (tables et colonnes). + +### Liste des tables (avec nombre de lignes) +``` +GET /api/schema/tables?search= +``` + +### Top tables (par volume) +``` +GET /api/schema/top?limit= +``` + +### Colonnes d'une table spécifique +``` +GET /api/schema/tables/:tableName +``` + +--- + ## Ranking (classement réseau) ### Recherche ranking @@ -1053,6 +1301,41 @@ GET /api/sync/status --- +## Photos (Indexation) + +### Re-indexation des photos +``` +POST /api/photos/reindex +``` +Déclenche de façon asynchrone l'analyse des sitemaps produits de `lafoirfouille.fr` pour extraire et associer les URLs des fiches produits aux codes photos dans la table `ff_photo_index`. + +**Réponse** : +```json +{ + "indexed": 14258, + "elapsed_s": 32.5 +} +``` + +--- + +### Statut de l'indexation +``` +GET /api/photos/status +``` +Retourne le nombre total de photos indexées, la date de la dernière indexation, et si une indexation est actuellement en cours. + +**Réponse** : +```json +{ + "total": 14258, + "last_index": "2026-05-28T04:15:30.000Z", + "indexing_in_progress": false +} +``` + +--- + ## Exemples d'intégration JavaScript ```javascript