# hotel-api-rs ##Description Ce projet est un proof of concept servant de terrain d'expérimentation pour un outil interne destiné à des hotels. Objectif: -Petite échelle: ~50 hôtels maximum, ~5 utilisateurs par hôtel -Facilité de maintenance, y compris pour des utilisateurs peu à l'aise avec Linux Ce projet m'a persmis de découvrir et mettre en pratique : -Rust (API backend) -Authentification JWT -Hash de mots de passe(Argon2) -WebSockets (temps réel) -Docker -GitActions -SQlite ##Fonctionalités -CRUD (rooms, inventory, chat) -Authentification : -Refresh token -Session token -Notifications en temps réel(WebSocket) -Chat en temps réel ##Démo Une interface de démonstration est disponible ici: https://mallardromain.com/hotel-demo/ ##Installation ###Local ``` cargo run ``` -Les bases SQLite sont présentes par défaut dans `/db` -Port par défaut : 7080(configuré dans `main.rs`) ###Docker ``` docker run -d \ -e JWT_SECRET=secret_JWT \ -v "/votre/chemin/:/app/db" \ ``` Notes: -Il est nécessaire de copier les bases de donner par défaut dans le volume -Le scret doit obligatoirement être préciser a la création du container -Valeur de JWT_SECRET pour les utilisateur présent sur les bases de donnée par défault: `your_jwt_secret_key` ##Architecture ###Routing -Point d'entrée: `./src/routes/mod.rs` (utilié dans le `./main.rs`) -Organisation par domaine: -chaque module posséde son propre `routes.rs` ###Modules principaux -`.src/rooms`,`.src/inventory` et `.src/chat` sont principalement de la logique CRUD ###Utils -`src/utils/db_pools.rs` Getsion des connexions aux bases SQLite de chaque hôtels -`.src/utils/websocket.rs` Implémentation des WebSockets: -Notification temps réel -chat (émission/reception) -`.src/utils/auth.rs` -Hash/vérification des mots de passe(Argon2) -Génération et validation des JWT -Pré-traitement des tokens ##Authentification Flow: 1. Obtenir un "refresh token" `GET /auth/get_refresh` 2. Obtenir un session token `POST /auth/login_refresh_token` 3. Ouvrir une connexion WebSocket `/auth/ws/YourToken` ##Ce que j'ai appris -Utilisation du framework "Axum" -Gestion de payload des requète explicite et stricte -Gestion des websocket plus complexe -Dockerisation simple -CD simple (déploiment automatique sur un VPS linux)