FIX: readme formating
All checks were successful
Deploy API / build-and-deploy (push) Successful in 2m30s
All checks were successful
Deploy API / build-and-deploy (push) Successful in 2m30s
This commit is contained in:
101
README.md
101
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.
|
Ce projet est un proof of concept servant de terrain d'expérimentation pour un outil interne destiné à des hotels.
|
||||||
|
|
||||||
### Objectif:
|
### Objectif:
|
||||||
-Petite échelle: ~50 hôtels maximum, ~5 utilisateurs par hôtel
|
- Petite échelle: ~50 hôtels maximum, ~5 utilisateurs par hôtel
|
||||||
-Facilité de maintenance, y compris pour des utilisateurs peu à l'aise avec Linux
|
- 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 :
|
Ce projet m'a persmis de découvrir et mettre en pratique :
|
||||||
|
|
||||||
-Rust (API backend)
|
- Rust (API backend)
|
||||||
-Authentification JWT
|
- Authentification JWT
|
||||||
-Hash de mots de passe(Argon2)
|
- Hash de mots de passe(Argon2)
|
||||||
-WebSockets (temps réel)
|
- WebSockets (temps réel)
|
||||||
-Docker
|
- Docker
|
||||||
-GitActions
|
- GitActions
|
||||||
-SQlite
|
- SQlite
|
||||||
|
|
||||||
## Fonctionalités
|
## Fonctionalités
|
||||||
|
|
||||||
-CRUD (rooms, inventory, chat)
|
- CRUD (rooms, inventory, chat)
|
||||||
-Authentification :
|
- Authentification :
|
||||||
-Refresh token
|
- Refresh token
|
||||||
-Session token
|
- Session token
|
||||||
-Notifications en temps réel(WebSocket)
|
- Notifications en temps réel(WebSocket)
|
||||||
-Chat en temps réel
|
- Chat en temps réel
|
||||||
|
|
||||||
## Démo
|
## Démo
|
||||||
|
|
||||||
Une interface de démonstration est disponible ici:
|
Une interface de démonstration est disponible ici:
|
||||||
https://mallardromain.com/hotel-demo/
|
https://mallardromain.com/hotel-demo/
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
@@ -40,8 +40,8 @@ https://mallardromain.com/hotel-demo/
|
|||||||
cargo run
|
cargo run
|
||||||
```
|
```
|
||||||
|
|
||||||
-Les bases SQLite sont présentes par défaut dans `/db`
|
- Les bases SQLite sont présentes par défaut dans `/db`
|
||||||
-Port par défaut : 7080(configuré dans `main.rs`)
|
- Port par défaut : 7080(configuré dans `main.rs`)
|
||||||
|
|
||||||
### Docker
|
### Docker
|
||||||
|
|
||||||
@@ -51,57 +51,52 @@ docker run -d \
|
|||||||
-v "/votre/chemin/:/app/db" \
|
-v "/votre/chemin/:/app/db" \
|
||||||
```
|
```
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
-Il est nécessaire de copier les bases de donner par défaut dans le volume
|
- 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
|
- 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:
|
- Valeur de JWT_SECRET pour les utilisateur présent sur les bases de donnée par défault:
|
||||||
`your_jwt_secret_key`
|
- `your_jwt_secret_key`
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
### Routing
|
### Routing
|
||||||
|
|
||||||
-Point d'entrée: `./src/routes/mod.rs` (utilié dans le `./main.rs`)
|
- Point d'entrée: `./src/routes/mod.rs` (utilié dans le `./main.rs`)
|
||||||
-Organisation par domaine:
|
- Organisation par domaine:
|
||||||
-chaque module posséde son propre `routes.rs`
|
- chaque module posséde son propre `routes.rs`
|
||||||
|
|
||||||
### Modules principaux
|
### 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
|
### Utils
|
||||||
|
|
||||||
-`src/utils/db_pools.rs`
|
- `src/utils/db_pools.rs`
|
||||||
Getsion des connexions aux bases SQLite de chaque hôtels
|
- Getsion des connexions aux bases SQLite de chaque hôtels
|
||||||
-`.src/utils/websocket.rs`
|
- `.src/utils/websocket.rs`
|
||||||
Implémentation des WebSockets:
|
- Implémentation des WebSockets:
|
||||||
-Notification temps réel
|
- Notification temps réel
|
||||||
-chat (émission/reception)
|
- chat (émission/reception)
|
||||||
-`.src/utils/auth.rs`
|
- `.src/utils/auth.rs`
|
||||||
-Hash/vérification des mots de passe(Argon2)
|
- Hash/vérification des mots de passe(Argon2)
|
||||||
-Génération et validation des JWT
|
- Génération et validation des JWT
|
||||||
-Pré-traitement des tokens
|
- Pré-traitement des tokens
|
||||||
|
|
||||||
## Authentification
|
## Authentification
|
||||||
|
|
||||||
Flow:
|
Flow:
|
||||||
|
|
||||||
1. Obtenir un "refresh token"
|
- 1. Obtenir un "refresh token"
|
||||||
|
`GET /auth/get_refresh`
|
||||||
`GET /auth/get_refresh`
|
- 2. Obtenir un session token
|
||||||
|
`POST /auth/login_refresh_token`
|
||||||
2. Obtenir un session token
|
- 3. Ouvrir une connexion WebSocket
|
||||||
|
`/auth/ws/YourToken`
|
||||||
`POST /auth/login_refresh_token`
|
|
||||||
|
|
||||||
3. Ouvrir une connexion WebSocket
|
|
||||||
|
|
||||||
`/auth/ws/YourToken`
|
|
||||||
|
|
||||||
## Ce que j'ai appris
|
## Ce que j'ai appris
|
||||||
|
|
||||||
-Utilisation du framework "Axum"
|
- Utilisation du framework "Axum"
|
||||||
-Gestion de payload des requète explicite et stricte
|
- Gestion de payload des requète explicite et stricte
|
||||||
-Gestion des websocket plus complexe
|
- Gestion des websocket plus complexe
|
||||||
-Dockerisation simple
|
- Dockerisation simple
|
||||||
-CD simple (déploiment automatique sur un VPS linux)
|
- CD simple (déploiment automatique sur un VPS linux)
|
||||||
Reference in New Issue
Block a user