Skip to main content

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

ComposantTechnologie
FrameworkNestJS v11.1.6 (TypeScript 5.9)
Base de donnéesPostgreSQL 17.6 via TypeORM 0.3+
CacheRedis 7.4 via IORedis
AuthAuth0 (JWKS/JWT) + Passport.js
Stockage fichiersAWS S3
Documentation APISwagger/OpenAPI
CI/CDGitLab CI
ConteneurisationDocker (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étier
  • application/services/ ➜ Logique métier
  • application/dtos/ ➜ Validation des entrées (class-validator)
  • infrastructure/controllers/ ➜ Endpoints REST

Architecture documentation

Components

Domain

General features

Infrastructure

List of services or tools used for infrastructure:

  • PostgreSQL - General data store
  • Redis - Temporary in-memory data store
  • Auth0 - Authentication
  • AWS S3 - File storage

Environments

ServiceDevPortProdPort
webdev.simo.ps44338simo.ps44337
apiapi.dev.simo.ps44311api.simo.ps44310
panel-apppanel.dev.simo.ps44341panel.simo.ps44340

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.