# Projet Web Rust — Axum + Leptos ## Stack technique - Backend : Axum (serveur HTTP) - Frontend : Leptos (SSR/WASM) - Langage : Rust (édition 2021) - Build : cargo + trunk (pour Leptos) ## Niveau développeur - Débutant en Rust — toujours expliquer les concepts Rust utilisés - Préférer du code commenté avec les raisons des choix ## Conventions - Utiliser `thiserror` pour la gestion d'erreurs - Utiliser `tracing` pour les logs (pas `println!`) - Séparer backend (`src/server/`) et frontend (`src/client/`) - Nommer les composants Leptos en PascalCase ## Commandes utiles - Build backend : `cargo build` - Dev frontend : `trunk serve` - Tests : `cargo test` - Lint : `cargo clippy` ## Règles importantes - Ne jamais utiliser `unwrap()` en production — toujours `?` ou `.expect("message clair")` - Toujours expliquer les lifetimes si elles apparaissent - Préférer les types idiomatiques Rust (`Option`, `Result`) - Le code généré devra suivre le conventions standard, le code et les commentaires sont rédigés en anglais. ## Git & Commits - Committer chaque changement fonctionnel terminé (ne pas accumuler) - Format du message : `type(scope): description courte en anglais` - Types autorisés : `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore` - Exemples : - `feat(auth): add JWT middleware` - `fix(api): handle missing user gracefully` - `chore(deps): update axum to 0.8` - Ne jamais committer du code qui ne compile pas (`cargo check` avant) - Une fonctionnalité = une branche = une PR - Branches : `feature/`, `fix/`, `chore/` ## Architecture - Deux databases possible, postgresql ou sqlite. Le choix dois se faire par la configuration de l'application. - Un hote possede un nom, une IP, des ports ouverts - Les ports peuvent avoir une description pour indiquer quel est le protocole le plus probable d'être utiliser sur ce port (ex: 22 - SSH, 53 - DNS, 80 - HTTP, 443 - HTTPS) - Un port peut être associé à une application, l'association n'est pas strict car un port peut être utilisé par plusieurs applications. - Une application possede un nom, un ou plusieurs ports. - Un réseaux est définit par son nom et son CIDR (ex: 192.168.1.0/24) - L'application peut gérer plusieurs réseaux distinct. - Chaques hôtes doit appartenir au réseaux dans lequel il est définit.