backend/src/main.rs
Description
Point d’entrée principal de l’application backend Koprogo API. Ce fichier configure et démarre le serveur HTTP Actix-web avec toutes les dépendances nécessaires pour l’application de gestion de copropriété.
Responsabilités
Initialisation de l’environnement - Chargement des variables d’environnement depuis
.env- Configuration du logger pour le suivi des événementsConfiguration de la base de données - Création du pool de connexions PostgreSQL - Exécution automatique des migrations SQLx au démarrage - Initialisation du compte SuperAdmin avec credentials par défaut
Architecture hexagonale - Injection de dépendances - Initialisation des repositories (couche infrastructure) - Création des use cases (couche application) - Configuration de l’état de l’application (AppState)
Configuration du serveur HTTP - Configuration CORS pour les requêtes cross-origin - Middleware de logging des requêtes HTTP - Enregistrement des routes API
Fonctions
main()
Signature:
#[actix_web::main]
async fn main() -> std::io::Result<()>
Description:
Fonction principale asynchrone qui initialise et démarre l’application backend.
Comportement:
Chargement de la configuration:
DATABASE_URL(obligatoire) - URL de connexion PostgreSQLJWT_SECRET(optionnel, défaut: “super-secret-key-change-in-production”)SERVER_HOST(optionnel, défaut: “127.0.0.1”)SERVER_PORT(optionnel, défaut: “8080”)
Initialisation base de données:
Création du pool avec
create_pool(&database_url)Exécution migrations avec
sqlx::migrate!("./migrations").run(&pool)Seeding du compte SuperAdmin (email: admin@koprogo.com, password: admin123)
Initialisation des repositories (Arc pour thread-safety):
PostgresUserRepository- Gestion des utilisateursPostgresBuildingRepository- Gestion des immeublesPostgresUnitRepository- Gestion des lotsPostgresOwnerRepository- Gestion des copropriétairesPostgresExpenseRepository- Gestion des charges
Création des use cases:
AuthUseCases::new(user_repo, jwt_secret)- Authentification JWTBuildingUseCases::new(building_repo)- Logique métier immeublesUnitUseCases::new(unit_repo)- Logique métier lotsOwnerUseCases::new(owner_repo)- Logique métier copropriétairesExpenseUseCases::new(expense_repo)- Logique métier charges
Configuration du serveur Actix-web:
CORS permissif (allow_any_origin) pour le développement
Logger middleware pour tracer les requêtes HTTP
Binding sur
server_host:server_port
Variables d’environnement:
Variable |
Obligatoire |
Valeur par défaut |
Description |
|---|---|---|---|
DATABASE_URL |
Oui |
URL PostgreSQL (ex: postgres://user:pass@localhost/koprogo) |
|
JWT_SECRET |
Non |
super-secret-key-change-in-production |
Clé secrète pour signer les tokens JWT |
SERVER_HOST |
Non |
127.0.0.1 |
Adresse IP d’écoute du serveur |
SERVER_PORT |
Non |
8080 |
Port d’écoute du serveur HTTP |
Retour:
Ok(())si le serveur démarre et s’exécute avec succèsErr(std::io::Error)en cas d’erreur I/O (port déjà utilisé, etc.)
Exemple de logs au démarrage:
[2025-10-22T10:00:00Z INFO] Seeding superadmin account...
[2025-10-22T10:00:00Z INFO] SuperAdmin account ready: admin@koprogo.com
[2025-10-22T10:00:00Z INFO] Starting server at 127.0.0.1:8080
Architecture
Le fichier implémente le pattern Hexagonal Architecture (Ports & Adapters):
┌─────────────────────────────────────────────────────────────┐
│ main.rs │
│ (Composition Root) │
└─────────────────────────────────────────────────────────────┘
│
├──> Infrastructure Layer
│ ├─ PostgresUserRepository
│ ├─ PostgresBuildingRepository
│ ├─ PostgresUnitRepository
│ ├─ PostgresOwnerRepository
│ └─ PostgresExpenseRepository
│
├──> Application Layer
│ ├─ AuthUseCases
│ ├─ BuildingUseCases
│ ├─ UnitUseCases
│ ├─ OwnerUseCases
│ └─ ExpenseUseCases
│
└──> Web Layer
├─ AppState (shared state)
├─ CORS middleware
├─ Logger middleware
└─ Routes configuration
Dépendances
Crates externes:
actix-web- Framework web asynchroneactix-cors- Middleware CORSdotenv- Chargement variables d’environnementenv_logger- Logging configurablesqlx- Client PostgreSQL avec migrations
Modules internes:
koprogo_api::application::use_cases- Cas d’usage métierkoprogo_api::infrastructure::database- Couche accès donnéeskoprogo_api::infrastructure::web- Configuration web et routes
Notes de sécurité
Warning
Configuration CORS en développement:
Le serveur utilise allow_any_origin() qui accepte les requêtes de n’importe quelle origine.
En production, il faut remplacer par:
let cors = Cors::default()
.allowed_origin("https://app.koprogo.com")
.allowed_methods(vec!["GET", "POST", "PUT", "DELETE"])
.allowed_headers(vec![header::AUTHORIZATION, header::CONTENT_TYPE])
.max_age(3600);
Warning
JWT_SECRET en production:
La valeur par défaut “super-secret-key-change-in-production” N’EST PAS sécurisée.
Utilisez une chaîne aléatoire forte de minimum 256 bits:
openssl rand -base64 32
Fichier associé
backend/src/lib.rs- Déclaration des modules publicsbackend/src/config.rs- Configuration structurée (alternative non utilisée)docker-compose.yml- Configuration Docker avec variables d’environnement.env- Fichier de variables d’environnement local