421e40e4a24a076e8f4a3ace9eebefefb030861a
All checks were successful
Deploy API / build-and-deploy (push) Successful in 2m30s
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
- chaque module posséde son propre
Modules principaux
.src/rooms,.src/inventoryet.src/chatsont 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:
-
- Obtenir un "refresh token"
GET /auth/get_refresh
- Obtenir un "refresh token"
-
- Obtenir un session token
POST /auth/login_refresh_token
- Obtenir un session token
-
- Ouvrir une connexion WebSocket
/auth/ws/YourToken
- Ouvrir une connexion WebSocket
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)
Description
Languages
Rust
99.4%
Dockerfile
0.6%