Aller au contenu

Vue d'ensemble technique

Cette section s'adresse aux équipes support, aux développeurs et à toute personne ayant besoin de comprendre comment Jigi est construit, au-delà de son usage fonctionnel.

Ce qu'est Jigi

Jigi est une plateforme SaaS multi-tenant de gestion d'entreprise : chaque société cliente (« tenant ») dispose d'un espace de données totalement cloisonné, sur une infrastructure mutualisée. La plateforme couvre les RH, la comptabilité, les réservations de ressources, les achats/prestataires et la gestion documentaire.

Stack technique

Couche Technologie
Backend Spring Boot 4, Java 21, Maven
ORM Spring Data JPA / Hibernate (ddl-auto: validate — le schéma réel doit toujours correspondre exactement aux migrations)
Base de données PostgreSQL 17
Cache Redis 7
Migrations Flyway (fichiers V<version>__<module>_<description>.sql, jamais modifiés après application)
Authentification JWT (JJWT), Spring Security, 2FA TOTP
Frontend Next.js 16, React 19, TypeScript
Style Tailwind CSS v4
État serveur TanStack Query v5
État client Zustand v5
Formulaires React Hook Form + Zod v4
Temps réel STOMP over WebSocket (SockJS)
Stockage fichiers MinIO (local) / S3 (production)
File de messages RabbitMQ (emails, notifications)
Observabilité Prometheus + Grafana

Organisation du code backend (app.jigi.*)

Le backend est organisé par domaine métier, pas par couche technique :

app.jigi/
├── auth/             # Authentification JWT, 2FA, gestion des mots de passe
├── tenant/           # Résolution et propagation du contexte tenant
├── hr/
│   ├── employee/     # Profils, contrats, organigramme
│   ├── leave/        # Congés et absences
│   ├── appraisal/    # Cycles d'évaluation de performance
│   ├── satisfaction/ # Enquêtes de satisfaction
│   └── recruitment/  # Recrutement : postes, candidats, entretiens, offres
├── accounting/       # Facturation, notes de frais, paie, comptabilité générale
├── booking/          # Réservation de salles et ressources
├── document/         # Stockage et versionnage de fichiers
├── supplies/         # Demandes et commandes de fournitures
├── prestataire/      # Prestataires externes
├── notification/     # Dispatch de notifications multi-canal
├── workflow/         # Moteur d'approbation générique
├── admin/            # Rôles, organisation, import en masse, tenants, opérateurs
├── subscription/      # Abonnements et cycle de vie (essai, paiement, renouvellement)
├── license/          # Licences on-premise
└── common/           # Éléments partagés : audit, config, exceptions, web

Chaque module suit la même architecture en couches :

controller/   ← endpoints REST, validation d'entrée
service/      ← logique métier, transactions
repository/   ← accès aux données (Spring Data JPA)
domain/       ← entités JPA et enums
dto/          ← objets de requête/réponse

Toutes les réponses API suivent une enveloppe standard ApiResponse<T> (success, data, error, meta).

Organisation du frontend

Deux applications Next.js distinctes cohabitent dans le même dépôt :

  • (dashboard)/dashboard/* — l'application utilisée par les employés, managers, RH, comptables de chaque société cliente (tenant).
  • admin-jigi/ — le backoffice réservé aux opérateurs internes de la plateforme Jigi, séparé du reste (voir Guide Administrateur plateforme Jigi).

Des routes publiques existent également pour des parcours sans authentification préalable : candidature à une offre d'emploi (apply/), confirmation d'entretien (interview/rsvp/), acceptation d'une lettre d'offre (offer/), activation de licence on-premise (license/activate).

Les quatre piliers architecturaux

  1. Multi-tenance — comment les données de chaque société sont isolées.
  2. Rôles & permissions (RBAC) — comment les accès sont contrôlés, avec un modèle de rôles dynamique et configurable par tenant.
  3. Moteur de workflow — le moteur d'approbation générique partagé par tous les modules qui ont besoin d'un circuit de validation.
  4. Notifications — comment les emails, notifications in-app et alertes temps réel sont envoyés, de façon asynchrone via une file de messages.