Compare commits

..

2 Commits

Author SHA1 Message Date
421e40e4a2 FIX: readme formating
All checks were successful
Deploy API / build-and-deploy (push) Successful in 2m30s
2026-05-01 12:33:15 +02:00
083b5559c9 FIX: readme formating 2026-05-01 12:31:41 +02:00

View File

@@ -5,27 +5,27 @@
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
- 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
- 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
- CRUD (rooms, inventory, chat)
- Authentification :
- Refresh token
- Session token
- Notifications en temps réel(WebSocket)
- Chat en temps réel
## Démo
@@ -40,8 +40,8 @@ https://mallardromain.com/hotel-demo/
cargo run
```
-Les bases SQLite sont présentes par défaut dans `/db`
-Port par défaut : 7080(configuré dans `main.rs`)
- Les bases SQLite sont présentes par défaut dans `/db`
- Port par défaut : 7080(configuré dans `main.rs`)
### Docker
@@ -52,56 +52,51 @@ docker run -d \
```
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`
- 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`
- 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
- `.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
- `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"
- 1. Obtenir un "refresh token"
`GET /auth/get_refresh`
2. Obtenir un session token
- 2. Obtenir un session token
`POST /auth/login_refresh_token`
3. Ouvrir une connexion WebSocket
- 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)
- 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)