mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-22 22:48:15 +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,54 @@
|
||||
// Liste des motifs d'adresse déclarés dans src/modules/*.rs et src/router.rs
|
||||
// (`.route("…")`), pour retrouver la route qu'Express aurait servie
|
||||
// (src/express_routes.rs).
|
||||
|
||||
use std::collections::BTreeSet;
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
|
||||
fn main() {
|
||||
println!("cargo:rerun-if-changed=src/modules");
|
||||
println!("cargo:rerun-if-changed=src/router.rs");
|
||||
let mut patterns = BTreeSet::new();
|
||||
collect(
|
||||
&fs::read_to_string("src/router.rs").expect("src/router.rs"),
|
||||
&mut patterns,
|
||||
);
|
||||
for entry in fs::read_dir("src/modules").expect("src/modules") {
|
||||
let path = entry.expect("fichier de module").path();
|
||||
if path.extension().is_some_and(|ext| ext == "rs") {
|
||||
println!("cargo:rerun-if-changed={}", path.display());
|
||||
collect(&fs::read_to_string(&path).expect("module lisible"), &mut patterns);
|
||||
}
|
||||
}
|
||||
let list: Vec<String> = patterns.iter().map(|p| format!(" {p:?},")).collect();
|
||||
let out = Path::new(&std::env::var("OUT_DIR").unwrap()).join("route_patterns.rs");
|
||||
fs::write(
|
||||
out,
|
||||
format!(
|
||||
"pub const ROUTE_PATTERNS: &[&str] = &[\n{}\n];\n",
|
||||
list.join("\n")
|
||||
),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
/// Motifs littéraux passés à `.route(` ; les jokers et les motifs finissant par « / »
|
||||
/// sont laissés de côté
|
||||
fn collect(source: &str, patterns: &mut BTreeSet<String>) {
|
||||
let mut rest = source;
|
||||
while let Some(index) = rest.find(".route(") {
|
||||
rest = &rest[index + ".route(".len()..];
|
||||
let trimmed = rest.trim_start();
|
||||
let Some(literal) = trimmed.strip_prefix('"') else {
|
||||
continue;
|
||||
};
|
||||
let Some(end) = literal.find('"') else {
|
||||
continue;
|
||||
};
|
||||
let pattern = &literal[..end];
|
||||
if pattern.starts_with("/api") && !pattern.contains("{*") && !pattern.ends_with('/') {
|
||||
patterns.insert(pattern.to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user