Serveur Rust : portage du module FF Nancy (base miroir, API, routes, actions, pages)

- ff::pg : portage complet de pg-ff-client.ts (mêmes requêtes SQL, fragments
  dynamiques via QueryBuilder, lectures tolérantes, caches process de la
  colonne parent de nomenclature et du lien mvtart → fournisseur).
- ff::api : client de l'API FF Nancy (URL résolue Paramètres → env → défaut,
  mémorisée 30 s ; délai FF_API_TIMEOUT_MS), pagination, mensuel, référentiel,
  commandes, normalisation du statut de synchro.
- ff::cache : getFournisseursCached / getDerniereReceptionCached.
- ff::diagnostic : diagnostiquer_api_ff (DNS, refus, délai, code HTTP).
- Routes /api/ff-status, /api/diag, /api/diag/stock-fournisseur, /api/test-db,
  /api/commandes-auto ; actions de la Grille et du cadencier ; pages dashboard,
  analytics, hit-parade, stock-negatif, commandes-auto, publicites.
- Test d'intégration (FF_TEST_DATABASE_URL) avec fausse API FF : toutes les
  requêtes et tous les appels HTTP joués sur une base de test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LG2LLJuswrrTTPKJmunEVf
This commit is contained in:
Claude committed 2026-10-12 19:24:28 +00:00
1 parent 559e6ed714
commit 7dd5919264
10 files changed
+5547 -10

No files matched your search

+37 -3
View File
@@ -1,21 +1,55 @@
//! Module `ff` — données FF Nancy (base miroir PostgreSQL et API REST) — à porter.
//! Module `ff` — données FF Nancy : base miroir PostgreSQL (`pg`), API REST
//! (`api`), lectures partagées en cache (`cache`), diagnostic de l'API
//! (`diagnostic`), routes, actions et données de pages.
pub mod actions;
pub mod api;
pub mod cache;
pub mod diagnostic;
pub mod js;
pub mod pages;
pub mod pg;
pub mod routes;
#[cfg(test)]
mod fixture_tests;
use crate::handler;
use crate::rpc::Handler;
use axum::routing::get;
use axum::Router;
/// Routes HTTP du module.
pub fn router() -> Router {
Router::new()
.route("/api/ff-status", get(routes::ff_status))
.route("/api/diag", get(routes::diag))
.route("/api/diag/stock-fournisseur", get(routes::diag_stock_fournisseur))
.route("/api/test-db", get(routes::test_db))
.route("/api/commandes-auto", get(routes::commandes_auto))
}
/// Actions (`POST /api/actions/{nom}`) du module.
pub fn actions() -> Vec<(&'static str, Handler)> {
vec![]
vec![
("getFournisseurs", handler!(actions::get_fournisseurs)),
("getMagasins", handler!(actions::get_magasins)),
("getFournisseursPourCadence", handler!(actions::get_fournisseurs_pour_cadence)),
("listCadences", handler!(actions::list_cadences)),
("upsertCadence", handler!(actions::upsert_cadence)),
("toggleCadence", handler!(actions::toggle_cadence)),
("removeCadence", handler!(actions::remove_cadence)),
]
}
/// Données de pages (`GET /api/pages/{nom}`) du module.
pub fn pages() -> Vec<(&'static str, Handler)> {
vec![]
vec![
("dashboard", handler!(pages::page_dashboard)),
("analytics", handler!(pages::page_analytics)),
("hit-parade", handler!(pages::page_hit_parade)),
("stock-negatif", handler!(pages::page_stock_negatif)),
("commandes-auto", handler!(pages::page_commandes_auto)),
("publicites", handler!(pages::page_publicites)),
]
}