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)