diff --git a/README.md b/README.md index c679c0d..249e875 100644 --- a/README.md +++ b/README.md @@ -5,31 +5,31 @@ 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 -Une interface de démonstration est disponible ici: +Une interface de démonstration est disponible ici: https://mallardromain.com/hotel-demo/ ## Installation @@ -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 @@ -51,57 +51,52 @@ docker run -d \ -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` +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` +- 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" - - `GET /auth/get_refresh` - - 2. Obtenir un session token - - `POST /auth/login_refresh_token` - - 3. Ouvrir une connexion WebSocket - - `/auth/ws/YourToken` +- 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) \ No newline at end of file +- 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) \ No newline at end of file