Skip to content

mohamedabbebi/document-signing-solution

Repository files navigation

Document Signing Solution

Plateforme multi‑tenant de gestion, circulation et signature de documents PDF avec 3 rôles : SuperAdmin, TenantAdmin, Employee.
Back‑end en .NET 9 (microservices, Clean Architecture + CQRS + Kafka), front en Angular 19, IA en FastAPI (résumé PDF).

✅ Objectifs : traçabilité complète du cycle de vie, sécurité JWT RSA/JWKS, montée en charge via microservices/kafka, UX moderne.


Sommaire


Architecture

[Angular 19 SPA]  -->  [ApiGatewayService (4010)]
                           |  JWT validation (JWKS)
                           v
    +------------------ Microservices .NET 9 ------------------+
    | Auth (1010)  Tenant (1020)  Users (1030)  Dept (1040)    |
    | DocMgmt (2010)  DocStorage (2020)  Signature (2030)      |
    | Notification (3010)                                       |
    +-----------------------------------------------------------+
                           ^
                           | HTTP (via Gateway) + Kafka events
                           |
                 [AIService FastAPI (3021)]
                           |
                      [Kafka / SQL Server]
  • Synchrone via API Gateway (YARP).
  • Asynchrone via Kafka (events: document.signed, tenant.approved, ...).
  • JWT RSA signés par Auth, JWKS exposé et validé par Gateway + services.
  • Clean Architecture & CQRS par service (Domain / Application / Infrastructure / Api).

Microservices & Ports

Service Rôle Port Host Santé
AuthenticationService Login, JWKS, rôles & claims 1010 /health
TenantService Cycle de vie tenant (Pending → Approved/Rejected) 1020 /health
UserManagementService Utilisateurs (SuperAdmin, TenantAdmin, Employee) 1030 /health
DepartmentService Départements & affectations 1040 /health
DocumentManagementService Workflow document: création → signature → validation 2010 /health
DocumentStorageService Stockage/versioning PDF 2020 /health
SignatureService Signature image + coordonnées (x, y) 2030 /health
NotificationService Notifications internes 3010 /health
ApiGatewayService Reverse proxy/YARP + validation JWT 4010 /health (si activé)
AIService (FastAPI) Résumé PDF (BART) 3021 /health (FastAPI docs: /docs)
Frontend (Angular 19) SPA par rôles 4200 -

Tous les ports sont configurables via compose/ENV.


Technologies

  • Back‑end .NET 9 : ASP.NET Core, Clean Architecture, CQRS (MediatR), AutoMapper, FluentValidation, EF Core (SQL Server), Serilog, Swagger, HealthChecks, Kafka (Confluent).
  • Sécurité : JWT RSA, JWKS, RBAC (claims tenantId, role, plan).
  • Front : Angular 19 (standalone components, Material, SCSS, lazy‑loading), RxJS.
  • IA : FastAPI, PyMuPDF, Transformers (facebook/bart-large-cnn), python‑jose.
  • Conteneurs : Docker/Docker Compose.
  • Observabilité : logs Serilog, /health. (OpenTelemetry possible)

Démarrage rapide (tout Docker)

Nécessite Docker Desktop. L’infra (Kafka/SQL) est isolée dans infra/.

# 1) Démarrer l'infra (Kafka, ZooKeeper, SQL Server, Kafdrop)
cd infra
docker compose up -d
docker compose ps

# 2) Démarrer l’application (gateway + microservices + front + ai)
cd ..
docker compose up -d --build
docker compose ps

Arrêt (tout en conservant les données) :

cd .
docker compose down          # app
cd infra
docker compose down          # infra
# (ne PAS ajouter -v si vous voulez garder les volumes/données)

Démarrage local (hybride)

  • Infra en Docker, services en local (pratique pour debug).
# 1) Infra
cd infra
docker compose up -d

# 2) Microservices en local (exemples)
cd ..\document_signing_solution_backend\AuthenticationService\AuthenticationService.Api
dotnet run --urls "http://localhost:1010"

# ... répétez pour Tenant (1020), Users (1030), Dept (1040), DocMgmt (2010), DocStorage (2020), Signature (2030), Notification (3010)

# 3) ApiGateway
cd ..\ApiGatewayService
dotnet run --urls "http://localhost:4010"

# 4) AIService
cd ..\AIService
uvicorn app.main:app --host 0.0.0.0 --port 3021 --reload

# 5) Frontend
cd ..\..\document_signing_solution_frontend
npm ci
ng serve --port 4200

Configs à vérifier en mode local :

  • Connexions SQL : Server=localhost,1433;...
  • Kafka : localhost:29092
  • Authority (Auth) : http://localhost:1010
  • Base URL front : http://localhost:4010/api/

Configuration (env)

Variables communes (exemple) :

# Exemple .env (ne PAS commiter .env — commitez .env.example)
SA_PASSWORD=Your_password123
ASPNETCORE_ENVIRONMENT=Docker
Kafka__BootstrapServers=kafka:29092
Jwt__Authority=http://authenticationservice:1010
Jwt__Audience=dss-api
Serilog__MinimumLevel__Default=Information

Chaque service .NET a aussi sa ConnectionStrings__Default (BDD dédiée).


Endpoints utiles

  • GET /health sur chaque service (.NET)
  • Auth : /.well-known/openid-configuration, /jwks, /api/auth/login
  • Docs : /swagger (services .NET), /docs (FastAPI)
  • Gateway : routes /api/* vers les upstreams internes

Seed de démo (optionnel)

  • Tenants : 1 Pending → 1 Approved (admin@entreprise.com auto).
  • Users : SuperAdmin, TenantAdmin, 2–3 Employee.
  • Departments : 1–2 + affectations.
  • Templates PDF : uploader 1 modèle.
  • Documents : 1 doc créé depuis modèle → prêt à signer.

Vous pouvez ajouter un endpoint /dev/seed par service ou un script de seed REST centralisé.


Docker: commandes utiles

# Build (tout ou un service)
docker compose build
docker compose build signatureservice

# Run / Stop
docker compose up -d
docker compose up -d --no-deps signatureservice
docker compose down                 # garde les volumes/données

# Inspect
docker compose ps
docker compose logs -f apigateway

# Nettoyage (prudence)
docker image prune -f
# reset total (perd données!)
# docker compose down -v

Dépannage

  • group 'app' already exists pendant le build :
    → En runtime image (aspnet:9.0), utilisez USER app et supprimez groupadd/useradd.
  • COPY ...csproj not found :
    → Le build.context doit pointer sur le dossier parent du microservice, et dockerfile dans *.Api/.
  • Kafka non joignable au démarrage :
    → Démarrer l’infra (infra/docker-compose.yml) avant les services.
  • SQL Server non prêt :
    → Attendre 20–40 s au premier lancement; vérifier la chaîne de connexion.

Contribuer

  1. Créez une branche feature/<nom>
  2. Committez avec messages explicites (conventionnel style recommandé)
  3. Ouvrez une Pull Request avec description/écran si possible

Licence

MIT (ou à préciser).


Crédits

Projet pédagogique / soutenance – architecture et implémentation multi‑services, 2025.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors