Romain Mallard 421e40e4a2
All checks were successful
Deploy API / build-and-deploy (push) Successful in 2m30s
FIX: readme formating
2026-05-01 12:33:15 +02:00
2026-05-01 12:17:25 +02:00
2026-05-01 12:17:25 +02:00
2026-05-01 12:17:25 +02:00
2025-11-04 12:54:22 +01:00
2026-03-11 14:30:12 +01:00
2025-12-29 17:23:05 +01:00
2025-12-29 17:23:05 +01:00
2026-03-11 14:30:12 +01:00
2026-05-01 12:33:15 +02:00

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
    1. Obtenir un session token
      POST /auth/login_refresh_token
    1. 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)
Description
No description provided
Readme 66 MiB
Languages
Rust 99.4%
Dockerfile 0.6%