feat(scaffold): add Axum + Leptos SSR base structure

Sets up the full project skeleton: Cargo.toml with ssr/hydrate features,
Axum server entry point, shared Leptos lib, root App component with router,
server/client module split, and Trunk config for WASM build.

Both `cargo check --features ssr` and `cargo check --features hydrate --target wasm32-unknown-unknown` pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 19:16:35 +02:00
parent 11b0f60892
commit efad573c3b
11 changed files with 3128 additions and 3 deletions

12
src/server/mod.rs Normal file
View File

@@ -0,0 +1,12 @@
// server/mod.rs — Module serveur
//
// Contient tout le code qui s'exécute uniquement côté serveur :
// - Handlers HTTP additionnels (routes.rs)
// - Fonctions serveur Leptos : accès à la base de données, authentification...
// - Logique métier qui ne doit JAMAIS être exposée dans le bundle WASM
//
// Les "server functions" Leptos (marquées #[server]) sont déclarées ici.
// Elles apparaissent comme des appels asynchrones normaux côté client,
// mais s'exécutent exclusivement sur le serveur — transparence totale.
pub mod routes;

26
src/server/routes.rs Normal file
View File

@@ -0,0 +1,26 @@
// server/routes.rs — Handlers HTTP Axum additionnels
//
// Ces handlers complètent les routes gérées par Leptos.
// Exemples d'usages futurs :
// - Endpoints API REST (/api/...)
// - Exports de fichiers (CSV, PDF...)
// - Webhooks entrants
// - Health check pour le monitoring (/health)
//
// `#[cfg(feature = "ssr")]` protège tout ce fichier :
// Axum n'existe pas dans le bundle WASM, donc on ne compile ce code qu'en mode serveur.
#[cfg(feature = "ssr")]
use axum::{http::StatusCode, response::IntoResponse};
// Handler 404 — utilisé comme fallback dans main.rs pour toute URL non reconnue.
//
// `impl IntoResponse` : Axum accepte n'importe quel type qui implémente ce trait.
// Un tuple `(StatusCode, &str)` l'implémente automatiquement :
// Axum en fait une réponse HTTP 404 avec le corps "Page introuvable".
//
// `async fn` est obligatoire pour les handlers Axum, même sans opération asynchrone.
#[cfg(feature = "ssr")]
pub async fn not_found_handler() -> impl IntoResponse {
(StatusCode::NOT_FOUND, "Page introuvable")
}