Overview
Simops API est une plateforme d'opérations aériennes construite avec NestJS. Elle gère le dispatch de vols, la gestion de flotte, la planification de routes et le suivi des communications ATC, le tout dans un contexte multi-tenant (compagnies/airlines).
Stack technique
| Composant | Technologie |
|---|---|
| Framework | NestJS v11.1.6 (TypeScript 5.9) |
| Base de données | PostgreSQL 17.6 via TypeORM 0.3+ |
| Cache | Redis 7.4 via IORedis |
| Auth | Auth0 (JWKS/JWT) + Passport.js |
| Stockage fichiers | AWS S3 |
| Documentation API | Swagger/OpenAPI |
| CI/CD | GitLab CI |
| Conteneurisation | Docker (multi-stage, Node 22 Alpine) |
Here is the regroupment of general and technical information about the project.
Modèle de données
Modèle de données (entités clés)
- User / Role / Permission / ResourceUserRole — RBAC complet
- Company → Airline → Fleet → Aircraft — hiérarchie organisationnelle
- Route — routes avec type (Company, Custom, Preferred, Mandatory) et cycles AIRAC
- FlightDispatch → Payload, Fuel, Performance, ExtraInfo — dispatch de vol complet avec cascade delete
- Airport → AirportFrequency — données aéroportuaires
- AtcEvent → AtcInstruction — logs de communications ATC
Toutes les entités utilisent des UUID comme clés primaires et des timestamps d'audit (createdAt, updatedAt).
Autres caractéristiques
Points forts
- Architecture modulaire bien structurée et scalable
- Infrastructure production-ready (Docker multi-stage, CI/CD GitLab, CORS whitelist)
- Sécurité solide (Auth0, Helmet, throttling, validation DTO)
- Migrations de base de données versionnées
Axes d'amélioration identifiés
- Couverture de tests minimale (un seul test e2e "Hello World")
- TypeScript lâche — activer le mode strict améliorerait la robustesse
- Setup local nécessite l'exécution manuelle de scripts SQL
- Pas d'abstraction repository explicite — les services accèdent directement aux repositories TypeORM injectés
Architecture
Le projet suit une architecture hexagonale inspirée du DDD :
src/
├── account/ → Utilisateurs, Auth, RBAC
├── planning/ → Cœur métier : vols, avions, routes
├── atc/ → Événements ATC
├── core/ → Upload fichiers, health check
├── app.module.ts
└── main.ts
Chaque module suit un découpage en couches :
domain/entities/➜ Entités TypeORM et enums métierapplication/services/➜ Logique métierapplication/dtos/➜ Validation des entrées (class-validator)infrastructure/controllers/➜ Endpoints REST
Components
Domain
General features
Infrastructure
List of services or tools used for infrastructure:
- PostgreSQL - General data store
- See Migration
- Redis - Temporary in-memory data store
- See Cache
- Auth0 - Authentication
- See Auth
- AWS S3 - File storage
- See Storage
Environments
| Service | Dev | Port | Prod | Port |
|---|---|---|---|---|
| web | dev.simo.ps | 44338 | simo.ps | 44337 |
| api | api.dev.simo.ps | 44311 | api.simo.ps | 44310 |
| panel-app | panel.dev.simo.ps | 44341 | panel.simo.ps | 44340 |
Documentation
Documentation is an important part of this project.
Tools
Tools used to support documentation.
- Heavy use of Markdown
- Docusaurus.io
- PlantUML - UML diagrams like sequence diagrame and entity diagrams.
- REST Client - Document API requests.
- Excalidraw - Diagrams for general use, ie: architecture diagrams.
PlantUML
PlantUML files are also text files that can be versionned.
In settings of VSCode, add:
"plantuml.diagramsRoot": "docs/diagrams/src",
"plantuml.exportOutDir": "docs/diagrams/out",
REST Client
REST Client let developers keep requests in version control and use .http files to create requests.