Claude 97c1dea849 Serveur Rust : module grid, phase 2 (calcul de la grille, routes /api/grid et /api/v1)
- product_rows.rs : getProductRows complet (7 requêtes FF en parallèle,
  métriques réseau Qlik, report du dernier snapshot, filtre gamme Y,
  rattrapage d'un magasin par l'API FF), branché sur rows_cache (calculs en
  cours partagés, compteur d'enregistrements, compléments par magasin),
  instantané grid_rows resservi s'il date du mois (rafraîchi au-delà de 20 h),
  persistance non bloquante ; getStorePatch ; get_product_rows_for_sync pour la
  synchro nocturne et le préchauffage.
- store_patch.rs : buildStorePatchEntries.
- enrich.rs (api-enrich) et api_gammes.rs (affecterGammes, lireCorpsJson).
- Routes /api/grid/rows (NDJSON), /api/grid/rows/store-patch, /api/v1/grid
  (diffusion complète sans limit), /products/search, /products/{codein},
  /products/{codein}/gamme, /gammes, /fournisseurs, /network/{codeCentrale}.
- store.rs : upsert_grid_rows_shared, écriture par lots depuis les lignes
  partagées du cache (sans copie intégrale).

Écart volontaire : après un calcul à la demande, /api/v1 attend la fin de
l'écriture de l'instantané avant de le relire (le TS ne l'attendait pas et
pouvait répondre à tort « aucun article »).

Test d'intégration sur la base ff_fixture (GRID_FF_TEST_DATABASE_URL) : calcul,
cache, instantané, complément magasin via une fausse API FF, enrichissement et
toutes les routes (session et clé d'API).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LG2LLJuswrrTTPKJmunEVf
2026-10-12 19:54:54 +00:00

CollectFlow

CollectFlow est une application de révision d'assortiment et d'analyse de performances des produits en point de vente, conçue pour consolider les données issues de plusieurs fournisseurs et magasins.

Architecture

Partie Technologie Dossier
Serveur (API, base, FF Nancy, Qlik, synchro nocturne) Rust — Axum, sqlx, chromiumoxide server/
Interface React 19 + Tailwind 4, compilée en fichiers statiques par Vite src/

Un seul binaire Rust sert l'API JSON (/api/..., dont l'API publique /api/v1) et l'interface compilée. Plus de Node.js à l'exécution.

Prérequis

  • Docker et Docker Compose (déploiement)
  • PostgreSQL 16+ (base séparée, non fournie par le conteneur)
  • Pour développer : Rust stable (rustup) et Node.js 22+

Lancer avec Docker

L'image est construite par GitHub Actions à chaque mise à jour de main et publiée sur ghcr.io/r0m1k3/collectflow:latest. Le docker-compose.yml la récupère à chaque démarrage (pull_policy: always) : une nouvelle version s'installe au prochain docker compose up -d, sans rien compiler sur le serveur.

# Une seule fois, si le paquet GHCR est privé (jeton GitHub avec le droit read:packages) :
echo <JETON> | docker login ghcr.io -u <utilisateur-github> --password-stdin

# Démarrer / mettre à jour :
docker compose up -d

L'application est accessible sur http://localhost:5643. Elle est attachée au réseau Docker externe nginx_default pour être exposée derrière le reverse proxy Nginx (docker network create nginx_default s'il n'existe pas).

Construire l'image localement plutôt que la télécharger : docker compose build.

Données et réglages

Le volume collectflow-data (/app/data) conserve les réglages saisis dans Paramètres (.db-config.json : base, Qlik, API FF, synchro nocturne), les comptes de secours (users.json) et le secret de session (.auth-secret, si AUTH_SECRET n'est pas défini). Il est repris tel quel depuis l'ancienne version Node : comptes et mots de passe restent valables (seules les sessions ouvertes sont à refaire).

Variables d'environnement utiles : DATABASE_URL, AUTH_SECRET, FF_API_BASE_URL, QLIK_HOST / QLIK_USER / QLIK_PWD (et les réglages fins QLIK_*), PG_STATEMENT_TIMEOUT_MS, FF_CACHE_TTL_S, RUST_LOG (niveau de journalisation, info par défaut).

Développement local

# Serveur (port 5643) — tables créées et compte admin/admin initialisé au premier démarrage
cd server
DATABASE_URL=postgres://postgres:postgres@localhost/collectflow cargo run

# Interface (port 5173, /api relayé vers le serveur)
npm install
npm run dev

Vérifications : cargo test (dans server/), npm run lint, npm run build.

Structure

  • server/src/ — serveur Rust, un module par domaine : auth (sessions, clés d'API), ff (base miroir et API FF Nancy), qlik (données réseau), grid (révision d'assortiment, API /api/v1), produits, admin (comptes, paramètres, synchronisation nocturne).
  • server/sql/init.sql — schéma joué (idempotent) à chaque démarrage.
  • src/ — interface React : features/* par domaine, components/ partagés, pages/ et router.tsx.
  • server/PORTING.md — contrat entre l'interface et le serveur (actions, données de pages, routes).
S
Description
No description provided
Readme
4.8 MiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 49%
TypeScript 41.8%
JavaScript 7.1%
HTML 1.2%
CSS 0.8%
Other 0.1%