Files
hotel_api/README.md
2026-05-01 12:31:41 +02:00

2.4 KiB

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

Modules principaux

-.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

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`

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)