Portage du module Produits : recherche Qlik d'abord, fiche produit, opportunités

- /api/produits/search (POST démarre un job, GET suit l'avancement) : Qlik
  d'abord, repli catalogue FF (source: "db"), cache mémoire 10 min des seuls
  résultats Qlik exploitables, une recherche Qlik à la fois.
- /api/produits/opportunites : produits de la même famille, local vs réseau.
- Page produit-fiche (?codein= ou ?cc=) : getProduitFiche /
  getProduitFicheByCodeCentrale, report du stock de fin de mois.
- normalizeMargePct (compare-reseau) et types JSON identiques au client.

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:56:31 +00:00
1 parent 5a84faffb2
commit f232673138
6 files changed
+1463 -2

No files matched your search

+19 -2
View File
@@ -1,11 +1,28 @@
//! Module `produits` — à porter.
//! Module `produits` — recherche produit (Qlik d'abord, base FF Nancy en repli)
//! et fiche produit.
//!
//! - [`search`] : recherche asynchrone (jobs en mémoire, cache 10 min) ;
//! - [`fiche`] : assemblage de la fiche produit (local + réseau) ;
//! - [`compare_reseau`] : normalisation du taux de marge réseau ;
//! - [`types`] : formes JSON partagées avec l'interface ;
//! - [`routes`] : `/api/produits/search`, `/api/produits/opportunites`, page `produit-fiche`.
pub mod compare_reseau;
pub mod fiche;
pub mod routes;
pub mod search;
pub mod types;
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/produits/search", get(routes::search_get).post(routes::search_post))
.route("/api/produits/opportunites", get(routes::opportunites))
}
/// Actions (`POST /api/actions/{nom}`) du module.
@@ -15,5 +32,5 @@ pub fn actions() -> Vec<(&'static str, Handler)> {
/// Données de pages (`GET /api/pages/{nom}`) du module.
pub fn pages() -> Vec<(&'static str, Handler)> {
vec![]
vec![("produit-fiche", handler!(routes::page_produit_fiche))]
}