mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-17 04:06:44 +02:00
feat(rust) : serveur réécrit en Rust, Node retiré ; Calendrier en tête du menu (#571)
- Serveur Rust (server-rs/, axum + sqlx) : les 148 adresses de l'API, l'interface, les migrations de démarrage et les tâches de fond ; même comportement que Node (banc : 2027 cas, 0 écart hors écarts déclarés USERS-02, RAPPRO-21, R4, R5). - Node retiré : server/, dépendances serveur, image Docker sans Node (51 Mo), docker-compose à un seul service applicatif. - R4 : écritures d'un autre site refusées (Sec-Fetch-Site / Origin). - R5 : « aujourd'hui » et sauvegarde automatique à l'heure de Paris. - R6 : mainteneur dans .github/CODEOWNERS. - Menu latéral : Accueil puis Calendrier en tête. - Plan et état : docs/PLAN-MIGRATION-RUST.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ke2qyS8rgacP3ap5iezDbM
This commit is contained in:
1 parent
6760f43e87
commit
600627c632
146 files changed
+31521
-20331
No files matched your search
@@ -0,0 +1,49 @@
|
||||
// Description des requêtes rejouées par le banc.
|
||||
|
||||
// "anonyme" : sans session ; "api" : clé de l'API externe (en-tête X-API-Key)
|
||||
export type AccountKey = "admin" | "directeur" | "manager" | "employe" | "sans-magasin" | "anonyme" | "api";
|
||||
|
||||
export const ALL_ACCOUNTS: AccountKey[] = ["admin", "directeur", "manager", "employe", "sans-magasin", "anonyme"];
|
||||
export const LOGGED_ACCOUNTS: AccountKey[] = ["admin", "directeur", "manager", "employe", "sans-magasin"];
|
||||
|
||||
// Écart voulu entre Node et Rust (faille fermée…), décidé et inscrit au banc :
|
||||
// ces champs sont retirés des deux côtés avant la comparaison, et le banc
|
||||
// rappelle la raison à la fin de son rapport
|
||||
export interface Deviation {
|
||||
fields: string[];
|
||||
reason: string;
|
||||
}
|
||||
|
||||
// Lecture : rejouée sur la même base pour chaque compte
|
||||
export interface ReadCase {
|
||||
module: string;
|
||||
path: string;
|
||||
accounts?: AccountKey[]; // par défaut ALL_ACCOUNTS
|
||||
// Champs ignorés dans la comparaison (valeurs propres à chaque passage)
|
||||
ignore?: string[];
|
||||
deviation?: Deviation;
|
||||
}
|
||||
|
||||
// Les chemins et corps acceptent des gabarits :
|
||||
// {{today}} {{today+3}} {{today-30}} → AAAA-MM-JJ ; {{year}} {{year-1}} {{month}}
|
||||
// {{0.id}} → champ id de la réponse JSON de l'étape 0 du même scénario
|
||||
export interface Step {
|
||||
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
||||
path: string;
|
||||
body?: unknown;
|
||||
// json (par défaut), form (urlencoded) ou multipart (champs + fichiers)
|
||||
bodyType?: "json" | "form" | "multipart";
|
||||
files?: { field: string; filename: string; contentType: string; size: number }[];
|
||||
headers?: Record<string, string>;
|
||||
}
|
||||
|
||||
// Écriture : base remise à zéro avant chaque compte, puis état des tables comparé
|
||||
export interface WriteScenario {
|
||||
module: string;
|
||||
name: string;
|
||||
accounts?: AccountKey[]; // par défaut LOGGED_ACCOUNTS
|
||||
steps: Step[];
|
||||
tables: string[];
|
||||
ignore?: string[];
|
||||
deviation?: Deviation;
|
||||
}
|
||||
Reference in new issue
Block a user