Files
ox_speak_server_v2/README.md
2026-03-16 00:56:28 +01:00

41 lines
1.8 KiB
Markdown

## Architecture & Philosophie
Ce projet s'inspire de la philosophie de Rust : **"Rendre les états illégaux impossibles à représenter"**.
Si vous venez de **Django**, voici les principales différences à garder en tête :
### 1. Extracteurs vs Objet Request
Contrairement à Django qui passe un objet `request` "fourre-tout" à chaque vue, ce projet utilise des **Extracteurs Axum
** (dans la signature des fonctions).
- **Le "Contrat" par la signature :** Si une vue demande `user: CurrentUser`, Axum garantit que l'utilisateur est
authentifié. Si ce n'est pas le cas, la vue n'est pas appelée et une erreur 401 est retournée automatiquement.
- **Auto-documentation :** En regardant simplement la signature d'une fonction, on sait exactement ce dont elle a
besoin (Base de données, Utilisateur, JSON, etc.).
### 2. Le Flux d'Authentification
1. **Middleware (`context_middleware`) :** Intercepte la requête, vérifie le JWT, récupère l'utilisateur complet en base
de données, et injecte le tout dans `RequestContext`.
2. **Extensions :** Le `RequestContext` est stocké dans les "extensions" de la requête (un espace de stockage de type
Map).
3. **Extracteurs :** L'extracteur `CurrentUser` récupère les données depuis les extensions et les rend disponibles dans
la signature de votre vue.
### 3. Transparence (Deref)
L'objet `CurrentUser` enveloppe le modèle de base de données. Grâce à l'implémentation de `Deref`, vous pouvez accéder
aux champs de l'utilisateur (ex: `user.is_superuser`) directement comme s'il s'agissait du modèle lui-même.
---
## Documentation
- **API (REST & WebSocket) :** `/swagger-ui` ou `/scalar`
- La documentation du WebSocket est incluse dans l'OpenAPI via une route descriptive `/handler/ws/`.
## TODO
Terminer le système d'authentification (login, changement de mot de passe...)