Compare commits

..

2 Commits

Author SHA1 Message Date
770c174555 README + Clean up
All checks were successful
Deploy API / build-and-deploy (push) Successful in 2m33s
2026-05-01 12:12:55 +02:00
e85b82a9f2 FIX: docker file cleanup
All checks were successful
Deploy API / build-and-deploy (push) Successful in 2m26s
2026-03-11 14:51:54 +01:00

127
README.md
View File

@@ -1,49 +1,49 @@
# hotel-api-rs # hotel-api-rs
## Description ##Description
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
### Local ###Local
``` ```
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
``` ```
docker run -d \ docker run -d \
@@ -51,52 +51,57 @@ 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`
- 2. Obtenir un session token `GET /auth/get_refresh`
`POST /auth/login_refresh_token`
- 3. Ouvrir une connexion WebSocket 2. Obtenir un session token
`/auth/ws/YourToken`
## Ce que j'ai appris `POST /auth/login_refresh_token`
- Utilisation du framework "Axum" 3. Ouvrir une connexion WebSocket
- Gestion de payload des requète explicite et stricte
- Gestion des websocket plus complexe `/auth/ws/YourToken`
- Dockerisation simple
- CD simple (déploiment automatique sur un VPS linux) ##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)