How ran1-987/cpp-restapi works
This is a C++ REST API backend for authentication and administrative user/role management. The main request path is client → Drogon controller → service → repository → PostgreSQL, with authentication and authorization applied to protected operations. Authentication additionally manages access/refresh tokens, password verification, and optional Redis-backed login throttling. Startup loads configuration, initializes shared application services and the database, and applies migrations before serving. The tree and excerpts support the principal boundaries; several service and wiring details are inferred only where the sampled code explicitly calls them.
Main entry points: AuthService.cpp Auth service · DatabaseManager.cpp Database manager · UserService.cpp User service · UserRepository.cpp User repository
Components 20
Runtime setup
- Server startup
src/main.cpp - Configuration
src/config/Config.cpp - Application context
src/app/AppContext.cpp
Authentication
- Auth endpoints
src/controllers/AuthController.cpp - Auth filter
src/http/AuthFilter.cpp - Auth service
src/services/AuthService.cpp - JWT utilities
src/utils/JwtUtils.cpp - Refresh tokens
src/repositories/RefreshTokenRepository.cpp - Redis client
src/infrastructure/RedisClient.cpp
User and roles
- User endpoints
src/controllers/UserController.cpp - User service
src/services/UserService.cpp - Role endpoints
src/controllers/RoleController.cpp - Role service
src/services/RoleService.cpp
Persistence and infrastructure
- User repository
src/repositories/UserRepository.cpp - Role repository
src/repositories/RoleRepository.cpp - Database manager
src/database/DatabaseManager.cpp - Transactions
src/database/TransactionContext.cpp
Other components
- API client
- Redis
- PostgreSQL
Connections 29
- API client → Server startup: HTTP requests
- Server startup → Configuration: loads config
- Server startup → Application context: initializes
- Application context → Database manager: starts database
- Database manager → PostgreSQL: connects and migrates
- API client → Auth endpoints: auth requests
- API client → User endpoints: user requests
- API client → Role endpoints: role requests
- Auth endpoints → Auth service: calls
- Auth endpoints → User service: loads profile
- Auth filter → JWT utilities: verifies token
- User endpoints → Auth filter: checks principal
- Role endpoints → Auth filter: checks principal
- User endpoints → User service: calls
- Role endpoints → Role service: calls
- Auth service → User repository: reads users
- Auth service → Refresh tokens: manages sessions
- Auth service → JWT utilities: issues tokens
- Auth service → Redis client: checks login throttle
- Redis client → Redis: reads and updates counters
- User service → User repository: manages users
- User service → Role repository: resolves roles
- Role service → Role repository: manages roles
- User repository → Database manager: executes queries
- Role repository → Database manager: executes queries
- Refresh tokens → Database manager: executes queries
- User repository → Transactions: uses transactions
- Role repository → Transactions: uses transactions
- Transactions → PostgreSQL: commits queries