Skip to main content

NC.CAM.App.PortailClients.DataPortal

Service Tampon de Données pour le Portail Sociétaires du CAM


🎯 Objectif du projet

NC.CAM.App.PortailClients.DataPortal est un service tampon de données entre le DataPortal V2 et le Portail Sociétaires du CAM. Ce service intermédiaire a pour objectifs de :

  • Rapprocher la source des données du portail sociétaire pour réduire la latence
  • Limiter l'accès aux données strictement nécessaires au fonctionnement du portail
  • Optimiser les performances grâce à une base de données dédiée PostgreSQL et une sérialisation MessagePack
  • Réduire la charge sur le DataPortal V2 principal en servant de cache intelligent
  • Fournir une API haute performance avec un format binaire optimisé (MessagePack)

Architecture du service

┌─────────────────────┐
│ DataPortal V2 │ ← Source principale des données
│ (Base complète) │
└──────────┬──────────┘

│ Synchronisation
│ périodique

┌─────────────────────┐
│ DataPortal Portail │ ← Service tampon (ce projet)
│ Sociétaires │
│ (Données filtrées) │
└──────────┬──────────┘

│ MessagePack
│ (API binaire)

┌─────────────────────┐
│ Portail Sociétaires │ ← Application finale
│ CAM │
└─────────────────────┘

Caractéristiques principales

CaractéristiqueTechnologieVersion
FrameworkASP.NET Core.NET 9.0
API docsSwashbuckle (Swagger)9.0.6
LoggingSerilog9.0.0
ObservabilitySentry / OpenTelemetrySentry 5.16.x / OTLP
MappingAutoMapper14.0.0
SérialisationMessagePack3.1+
Base de donnéesPostgreSQL14.1
ORMEntity Framework Core9.0
Framework de testxUnit2.9.3
ConteneurisationDocker & Docker Compose-

📚 Structure de la solution

Architecture en couches :

  • NC.CAM.App.PortailClients.DataPortal.Api : API ASP.NET Core 9.0 exposant les données via MessagePack
  • NC.CAM.App.PortailClients.DataPortal.Contracts : DTOs MessagePack et interfaces de services
  • NC.CAM.App.PortailClients.DataPortal.Infrastructure : Couche d'accès aux données avec Entity Framework Core et services
  • NC.CAM.App.PortailClients.DataPortal.Core : Entités métier (ObjetPret, OperationCav, ContratCavCdg, etc.) et options de configuration
  • NC.CAM.App.PortailClients.DataPortal.DbMigrator : Outil en ligne de commande pour appliquer les migrations Entity Framework Core sur la base PostgreSQL du DataPortal

Remarques spécifiques au code :

  • Le projet API expose des contrôleurs principaux : ObjetPretController, OperationCavController, ContratCavCdgController (voir src/NC.CAM.App.PortailClients.DataPortal.Api/Controllers).
  • La configuration d'app (connection string, DataPortalV2) se trouve dans src/NC.CAM.App.PortailClients.DataPortal.Api/appsettings.json et la chaîne de connexion utilisée est la clé ConnectionStrings:Default.
  • Les synchronisations sont gérées par DailySyncBackgroundService et EntitySyncService (dans le projet Infrastructure).
  • Une migration initiale est incluse : src/NC.CAM.App.PortailClients.DataPortal.Infrastructure/Migrations/20251208230348_Initial.cs.

🚀 Démarrage rapide

Prérequis

Option 1 - Docker Compose (Recommandé) :

  • Docker Desktop (télécharger)
  • Docker Compose (inclus avec Docker Desktop)
  • Git

Option 2 - Développement local :


🐳 Option 1 : Démarrage avec Docker Compose (Recommandé)

Le projet dispose d'un environnement Docker Compose complet pour un déploiement rapide.

> 📚 Documentation complète : Voir dans docs/DOCKER-COMPOSE-SETUP.md pour le guide détaillé

Installation rapide

  1. Cloner le dépôt :

    git clone https://kelios.visualstudio.com/DefaultCollection/NC.CAM.App.PortailClients/_git/NC.CAM.App.PortailClients.DataPortal
    cd NC.CAM.App.PortailClients.DataPortal
  2. Lancer l'environnement complet :

    docker-compose up -d --build

    Cela démarrera automatiquement :

  3. Accéder aux services :

    ServiceURLIdentifiants
    API DataPortalhttps://localhost:5221-
    Swagger UIhttps://localhost:5221/swagger-
    pgAdminhttp://localhost:5050[email protected] / admin
    Health Checkhttps://localhost:5221/health-

Commandes Docker Compose utiles

# Démarrer en arrière-plan
docker-compose up -d

# Voir les logs en temps réel
docker-compose logs -f

# Voir uniquement les logs de l'API
docker-compose logs -f portailclients-dataportal-api

# Arrêter les services
docker-compose down

# Rebuild et redémarrer
docker-compose up --build --force-recreate

# Arrêter et supprimer volumes/données
docker-compose down -v

Avantages Docker Compose :

  • ✅ Configuration automatique de la base de données
  • ✅ Isolation complète de l'environnement
  • ✅ Certificats SSL configurés automatiquement
  • ✅ Environnement reproductible et portable
  • ✅ Migration automatique au démarrage

💻 Option 2 : Développement local traditionnel

Installation

  1. Cloner le dépôt et restaurer les dépendances NuGet :

    git clone https://kelios.visualstudio.com/DefaultCollection/NC.CAM.App.PortailClients/_git/NC.CAM.App.PortailClients.DataPortal
    cd NC.CAM.App.PortailClients.DataPortal
    dotnet restore
  2. Ajouter la configuration dans les appsettings.json :

    Éditer src/NC.CAM.App.PortailClients.DataPortal.Api/appsettings.json :

    {
    .
    .
    .
    "DataPortalV2": {
    "AzureAd": {
    "Instance": "https://login.microsoftonline.com",
    "TenantId": "f087b25b-9486-4633-8995-56eb8730e750",
    "ClientId": "c18ff4d2-23af-4b4a-9942-0b5d6e4c9e37",
    "ClientSecret": "VOTRE_SECRET_ICI",
    "Scope": "api://c18ff4d2-23af-4b4a-9942-0b5d6e4c9e37/.default"
    },
    "BaseAddress": "https://cam-dataportalv2-api.azurewebsites.net"
    .
    .
    .
    }
  3. Générer la base de données et appliquer les migrations :

    # Via DbMigrator
    dotnet run --project src/NC.CAM.App.PortailClients.DataPortal.DbMigrator
  4. Démarrer l'API DataPortal :

    dotnet run

    L'API sera accessible par défaut sur :

    • HTTPS : https://localhost:5221
  5. Compiler la solution complète :

    dotnet build

Notes sur l'API et la configuration

  • L'API est configurée dans src/NC.CAM.App.PortailClients.DataPortal.Api/Program.cs : elle active Swagger, un endpoint /health et les formatteurs MessagePack (application/x-msgpack) pour les entrées/sorties.
  • Les contrôleurs exposés sont : ObjetPretController, OperationCavController, ContratCavCdgController (voir src/NC.CAM.App.PortailClients.DataPortal.Api/Controllers).
  • Les DTOs MessagePack se trouvent dans src/NC.CAM.App.PortailClients.DataPortal.Contracts/Dtos et utilisent les attributs [MessagePackObject] et [Key(n)].

Clés appsettings.json importantes

  • ConnectionStrings:Default : chaîne de connexion Npgsql utilisée par l'API et le migrator.
  • DataPortalV2:BaseAddress : base URL du DataPortal V2 (source des données).
  • DataPortalV2:AzureAd : objet contenant Instance, TenantId, ClientId, ClientSecret, Scope utilisés pour récupérer les tokens OAuth2.
  • DataPortalV2:Paths : chemins des endpoints (ex. affectations-cav, contrats-cav-cdg, ...).
  • DataPortalV2:SyncSchedule : options SyncTime et EnableSync qui pilotent DailySyncBackgroundService.

Synchronisation automatique

Le service DailySyncBackgroundService lit DataPortalV2:SyncSchedule et exécute :

  • une synchronisation initiale au démarrage de l'API
  • une synchronisation planifiée quotidiennement à l'heure SyncTime si EnableSync est true.

En cas de désactivation de la synchronisation automatique, mettez EnableSync à false dans appsettings.json.


📡 Communication MessagePack

Le DataPortal expose des endpoints optimisés avec sérialisation MessagePack pour des performances maximales.

Pourquoi MessagePack ?

  • Performance : 5-10x plus rapide que JSON
  • Taille : Réduction de 30-50% de la taille des données
  • Compression : Support optionnel LZ4 pour réduire encore davantage la taille
  • Binaire : Format compact et efficace

Format des requêtes/réponses

Toutes les communications utilisent le format MessagePack avec :

  • Content-Type: application/x-msgpack
  • Accept: application/x-msgpack

Endpoints disponibles

1. ObjetPret - Validation de projet de prêt

GET /ObjetPret/{numeroProjet}/checkValidity?numeroTiers={numeroTiers}

Description : Vérifie si un projet de prêt est valide pour un numéro de tiers donné.

2. OperationCav - Recherche d'opérations CAV

POST /OperationCav/search
Content-Type: application/x-msgpack

Description : Recherche des opérations CAV avec filtres avancés (montant, date, libellé, sens).

3. ContratCavCdg - Gestion des contrats CAV/CDG

GET /ContratCavCdg/{numeroContrat}/solde
GET /ContratCavCdg/Cav/{numeroTiers}
GET /ContratCavCdg/Cdg/{numeroTiers}

Description :

  • /solde : Récupère le solde disponible et global d'un contrat
  • /Cav/{numeroTiers} : Récupère le contrat CAV d'un titulaire
  • /Cdg/{numeroTiers} : Récupère les contrats CDG d'un titulaire

Exemple d'utilisation (C#)

using MessagePack;
using System.Net.Http;

// Configuration du client HTTP avec MessagePack
var client = new HttpClient
{
BaseAddress = new Uri("https://localhost:5221")
};

// Exemple 1 : Vérifier la validité d'un projet de prêt
var response = await client.GetAsync(
"/ObjetPret/12345/checkValidity?numeroTiers=67890");
var data = await MessagePackSerializer.DeserializeAsync<dynamic>(
await response.Content.ReadAsStreamAsync());

Console.WriteLine($"Projet valide : {data.isValid}");

// Exemple 2 : Récupérer le solde d'un contrat
var soldeResponse = await client.GetAsync(
"/ContratCavCdg/12345/solde");
var solde = await MessagePackSerializer.DeserializeAsync<dynamic>(
await soldeResponse.Content.ReadAsStreamAsync());

Console.WriteLine($"Solde disponible : {solde.soldeDisponible}");
Console.WriteLine($"Solde global : {solde.soldeGlobal}");

Exemple avec requête POST - Recherche d'opérations CAV

using MessagePack;
using NC.CAM.App.PortailClients.DataPortal.Dtos;

// Classe de requête
var searchRequest = new SearchOperationsCavRequestDto
{
NumeroContrat = 12345,
Search = "VIREMENT",
MontantMin = 100,
MontantMax = 5000,
DateDebut = new DateOnly(2025, 1, 1),
DateFin = new DateOnly(2025, 12, 31),
Sens = "D", // Débit
Code = "VIR"
};

// Sérialisation MessagePack
var requestBytes = MessagePackSerializer.Serialize(searchRequest);

// Envoi de la requête
var content = new ByteArrayContent(requestBytes);
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-msgpack");

var response = await client.PostAsync("/OperationCav/search", content);

// Désérialisation de la réponse
var operations = await MessagePackSerializer.DeserializeAsync<IEnumerable<OperationCavDto>>(
await response.Content.ReadAsStreamAsync());

foreach (var op in operations)
{
Console.WriteLine($"{op.DateOperation} - {op.Libelle} : {op.MontantOperation}");
}

🔄 Synchronisation avec DataPortal V2

Le DataPortal Portail Sociétaires synchronise automatiquement ses données depuis le DataPortal V2 (source principale).

Configuration de la synchronisation

La synchronisation utilise le DataPortal V2 hébergé sur Azure :

Configuration dans appsettings.json :

"DataPortalV2": {
"BaseAddress": "https://cam-dataportalv2-api.azurewebsites.net",
"AzureAd": {
"Instance": "https://login.microsoftonline.com",
"TenantId": "f087b25b-9486-4633-8995-56eb8730e750",
"ClientId": "c18ff4d2-23af-4b4a-9942-0b5d6e4c9e37",
"ClientSecret": "VOTRE_SECRET_ICI",
"Scope": "api://c18ff4d2-23af-4b4a-9942-0b5d6e4c9e37/.default"
},
"Paths": {
"AffectationCav": "affectations-cav",
"ContratCavCdg": "contrats-cav-cdg",
"LienClientTitulaire": "liens-clients-titulaires",
"ObjetPret": "objets-prets",
"OperationCav": "operations-cav"
},
"SyncSchedule": {
"SyncTime": "07:30:00",
"EnableSync": true
}
}

Entités synchronisées

EntitéDescriptionEndpoint DataPortal V2
AffectationCavAffectations CAV/affectations-cav
ContratCavCdgContrats CAV/CDG/contrats-cav-cdg
LienClientTitulaireLiens clients-titulaires/liens-clients-titulaires
ObjetPretObjets de prêt/objets-prets
OperationCavOpérations CAV/operations-cav

Synchronisation automatique

Le service DailySyncBackgroundService s'exécute automatiquement :

  • Au démarrage de l'API : Synchronisation initiale complète
  • Quotidiennement à 07h30 : Synchronisation planifiée (configurable via SyncTime)
  • Authentification Azure AD : Token OAuth2 avec cache et renouvellement automatique

Activation/désactivation :

"SyncSchedule": {
"EnableSync": false // Désactive la synchronisation automatique
}

Déclenchement manuel

# Redémarrer le service pour forcer une synchronisation immédiate
docker-compose restart portailclients-dataportal-api

# Vérifier les logs de synchronisation
docker-compose logs -f portailclients-dataportal-api

# En développement local
dotnet run --project src/NC.CAM.App.PortailClients.DataPortal.Api

Logs de synchronisation attendus :

info: NC.CAM.App.PortailClients.DataPortal.Services.DailySyncBackgroundService[0]
Début de la synchronisation initiale au démarrage de l'API
info: NC.CAM.App.PortailClients.DataPortal.Services.EntitySyncService[0]
Synchronisation de AffectationCav : 1250 entités récupérées
info: NC.CAM.App.PortailClients.DataPortal.Services.EntitySyncService[0]
Synchronisation de ContratCavCdg : 3420 entités récupérées
...
info: NC.CAM.App.PortailClients.DataPortal.Services.DailySyncBackgroundService[0]
Synchronisation initiale au démarrage de l'API terminée avec succès
info: NC.CAM.App.PortailClients.DataPortal.Services.DailySyncBackgroundService[0]
Prochaine synchronisation prévue dans 23:45:30

🗄️ Gestion de la base de données

Le DataPortal utilise une base de données PostgreSQL dédiée nommée DataPortalPortailClients.

Sauvegarde manuelle

# Via Docker Compose
docker-compose exec postgres pg_dump -U postgres DataPortalPortailClients > backup_dataportal_$(date +%Y%m%d_%H%M%S).sql

# En local (Windows PowerShell)
pg_dump -h localhost -p 5432 -U postgres DataPortalPortailClients > backup_dataportal_$(Get-Date -Format "yyyyMMdd_HHmmss").sql

# En local (Linux/Mac)
pg_dump -h localhost -p 5432 -U postgres DataPortalPortailClients > backup_dataportal_$(date +%Y%m%d_%H%M%S).sql

Restauration

# Via Docker Compose
docker-compose exec -T postgres psql -U postgres DataPortalPortailClients < backup_dataportal_20251204_143000.sql

# En local
psql -h localhost -p 5432 -U postgres DataPortalPortailClients < backup_dataportal_20251204_143000.sql

Vérification de la base de données

-- Se connecter à la base
psql -h localhost -p 5432 -U postgres -d DataPortalPortailClients

-- Lister les tables
\dt

-- Vérifier le nombre d'enregistrements synchronisés
SELECT 'AffectationCav' AS table_name, COUNT(*) AS count FROM "AffectationCavs"
UNION ALL
SELECT 'ContratCavCdg', COUNT(*) FROM "ContratCavCdgs"
UNION ALL
SELECT 'LienClientTitulaire', COUNT(*) FROM "LienClientTitulaires"
UNION ALL
SELECT 'ObjetPret', COUNT(*) FROM "ObjetPrets"
UNION ALL
SELECT 'OperationCav', COUNT(*) FROM "OperationCavs";

-- Vérifier les dernières opérations synchronisées
SELECT "DateOperation", "Libelle", "MontantOperation", "SensOperation"
FROM "OperationCavs"
ORDER BY "DateOperation" DESC
LIMIT 10;

-- Vérifier l'intégrité des relations
SELECT
lct."NumeroTitulaire",
lct."NumeroClient",
COUNT(op."Id") AS nb_operations
FROM "LienClientTitulaires" lct
LEFT JOIN "OperationCavs" op ON lct."NumeroClient" = op."NumeroContrat"
GROUP BY lct."NumeroTitulaire", lct."NumeroClient"
LIMIT 20;

🔧 Configuration avancée

Monitoring avec Sentry

Le DataPortal intègre Sentry pour le suivi des erreurs et la télémétrie :

{
"Sentry": {
"Dsn": "https://45a406ffe1dcb139a3f9451ced164950@o4509563953348608.ingest.de.sentry.io/4510022883999824",
"SendDefaultPii": true,
"Debug": true
}
}

Fonctionnalités Sentry activées :

  • ✅ Capture automatique des exceptions non gérées
  • ✅ Traçabilité des requêtes HTTP (performance monitoring)
  • ✅ Capture des logs d'erreur structurés
  • ✅ Informations de contexte (PII) pour le debugging

Accès au tableau de bord Sentry : o4509563953348608.ingest.de.sentry.io

Logging et monitoring

Le DataPortal intègre des logs structurés pour le monitoring : Le DataPortal utilise :

  • Serilog pour la journalisation structurée (console, fichiers et sinks configurables).
  • Sentry pour la remontée d'erreurs, corrélation des traces et monitoring des exceptions.
  • OpenTelemetry via l'intégration Sentry/OpenTelemetry pour exporter traces et métriques si nécessaire.

Les niveaux de logs et les sinks sont configurables via appsettings.json et les variables d'environnement. En production, il est recommandé d'envoyer les logs vers un stockage centralisé (Log Analytics, S3, ELK, etc.) et d'activer Sentry pour la surveillance des erreurs. Consultation des logs :

# Docker Compose
docker-compose logs -f portailclients-dataportal-api

# Filtrer les erreurs uniquement
docker-compose logs portailclients-dataportal-api | grep -i error

✅ Tests et validation

Test de l'endpoint de santé

# Vérifier que l'API est opérationnelle
curl -X GET "https://localhost:5221/health"

Réponse positive attendue :

HTTP/1.1 200 OK
Content-Type: text/plain

Healthy

Réponse négative attendue :

HTTP/1.1 503 Service Unavailable
Content-Type: text/plain

Unhealthy

Checklist de validation

  • Base de données DataPortalPortailClients créée avec succès
  • Migrations Entity Framework appliquées sans erreur
  • API DataPortal démarrée et accessible sur https://localhost:5221
  • Endpoint de santé retourne un statut Healthy
  • Configuration de synchronisation avec DataPortal V2 validée
  • Premier cycle de synchronisation réussi
  • Endpoints MessagePack accessibles et fonctionnels

Exécuter les tests

Le repository contient plusieurs projets de tests unitaires et d'intégration. Exemples :

Lancer tous les services nécessaires pour les tests via Docker Compose

docker-compose -f docker-compose-tests.yml up --build --abort-on-container-exit
docker-compose -f docker-compose-tests.yml down

Exécuter tous les tests unitaires et d'intégration localement

dotnet test

Exécuter uniquement les tests d'un projet

dotnet test test/NC.CAM.App.PortailClients.DataPortal.Api.Test
dotnet test test/NC.CAM.App.PortailClients.DataPortal.Infrastructure.Test

Les projets de test partagent des utilitaires dans test/NC.CAM.App.PortailClients.DataPortal.TestCommon.

Authentification par clé d'API (ApiKeyAttribute)

Les contrôleurs de l'API sont protégés par un attribut ApiKeyAttribute appliqué aux contrôleurs. Pour appeler ces endpoints, ajoutez l'en-tête HTTP suivant :

  • Nom de l'en-tête : X-API-KEY
  • Valeur : la clé configurée dans la configuration de l'application (ApiKey dans appsettings.json ou via les variables d'environnement)

Exemple :

curl -k -H "Accept: application/x-msgpack" -H "X-API-KEY: VOTRE_CLE" https://localhost:5221/ContratCavCdg/Cav/12345

Si la clé est absente ou invalide, l'API renverra 401 Unauthorized avec un message simple expliquant que la clé est incorrecte.


🚨 Troubleshooting

Problèmes courants

❌ "Database connection refused"

Cause : PostgreSQL n'est pas démarré ou la chaîne de connexion est incorrecte.

Solution :

  • Vérifier que PostgreSQL est démarré : docker-compose ps ou pg_isready -h localhost -p 5432
  • Contrôler la chaîne de connexion dans appsettings.json
  • Vérifier que la base DataPortalPortailClients existe : psql -h localhost -p 5432 -U postgres -l

❌ "MessagePack deserialization error"

Cause : Classes DTO mal configurées ou versions incompatibles.

Solution :

  • Vérifier que les classes DTO ont les attributs [MessagePackObject] et [Key(n)]
  • Contrôler que les indices [Key(n)] sont uniques et séquentiels (0, 1, 2, ...)
  • Vérifier la version de MessagePack côté client et serveur (doit être 3.1+)
  • Vérifier le Content-Type de la requête (application/x-msgpack)

❌ "Synchronization failed with DataPortal V2"

Cause : Échec de l'authentification Azure AD ou DataPortal V2 inaccessible.

Solution :

# 1. Vérifier la configuration Azure AD dans appsettings.json
cat src/NC.CAM.App.PortailClients.DataPortal.Api/appsettings.json | grep -A 6 "AzureAd"

# 2. Tester la connectivité vers DataPortal V2
curl -I https://cam-dataportalv2-api.azurewebsites.net

# 3. Vérifier les logs de synchronisation
docker-compose logs portailclients-dataportal-api | grep -i "error\|exception"

# 4. Vérifier que le ClientSecret est configuré
# IMPORTANT : Ne jamais commiter le ClientSecret dans Git
# Utiliser des variables d'environnement ou Azure Key Vault en production

# 5. Tester manuellement l'obtention d'un token Azure AD
curl -X POST "https://login.microsoftonline.com/f087b25b-9486-4633-8995-56eb8730e750/oauth2/v2.0/token" \
-d "client_id=c18ff4d2-23af-4b4a-9942-0b5d6e4c9e37" \
-d "client_secret=VOTRE_SECRET" \
-d "grant_type=client_credentials" \
-d "scope=api://c18ff4d2-23af-4b4a-9942-0b5d6e4c9e37/.default"

❌ "Timeout during synchronization"

Cause : Synchronisation d'un volume important de données ou problème réseau.

Solution :

# 1. Augmenter le timeout du HttpClient (dans Program.cs ou appsettings.json)
# Valeur par défaut : 100 secondes

# 2. Vérifier les performances du réseau
ping cam-dataportalv2-api.azurewebsites.net

# 3. Désactiver temporairement la synchronisation
# Éditer appsettings.json :
"SyncSchedule": {
"EnableSync": false
}

# 4. Synchroniser les entités une par une manuellement
# (nécessite l'implémentation d'un endpoint de synchronisation manuelle)

# 5. Vérifier les index de la base de données PostgreSQL
psql -h localhost -p 5432 -U postgres -d DataPortalPortailClients -c "\di"

Réinitialisation complète

En cas de problème majeur :

# 1. Arrêter tous les services
docker-compose down -v

# 2. Supprimer les volumes Docker (attention : perte de données)
docker volume prune

# 3. Supprimer la base de données
docker-compose up -d postgres
docker-compose exec postgres psql -U postgres -c "DROP DATABASE IF EXISTS DataPortalPortailClients;"

# 4. Relancer le DbMigrator et l'API
docker-compose up -d

# 5. Vérifier les logs
docker-compose logs -f portailclients-dataportal-api

Commandes de diagnostic

# Vérifier l'état des conteneurs
docker-compose ps

# Inspecter les logs de l'API
docker-compose logs --tail=100 portailclients-dataportal-api

# Vérifier les connexions à la base de données
docker-compose exec postgres psql -U postgres -d DataPortalPortailClients -c "SELECT COUNT(*) FROM pg_stat_activity;"

# Tester la connectivité vers DataPortal V2
curl -I https://cam-dataportalv2-api.azurewebsites.net

# Tester un endpoint de l'API DataPortal local
curl -k -H "Accept: application/x-msgpack" -H "X-API-KEY: VOTRE_CLE" https://localhost:5221/ContratCavCdg/Cav/12345

# Vérifier les performances de la base de données
docker-compose exec postgres psql -U postgres -d DataPortalPortailClients -c "
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size,
pg_total_relation_size(schemaname||'.'||tablename) AS size_bytes
FROM pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
ORDER BY size_bytes DESC;"

# Vérifier les logs de Sentry (si configuré)
# Accéder au tableau de bord Sentry pour voir les erreurs capturées

📚 Ressources complémentaires

Documentation technique

Documentation du projet

Support

Pour toute assistance supplémentaire :


📝 Propriété intellectuelle

Copyright (c) 2023-2025 NCIT - Tous droits réservés.

La présente licence accorde au client une autorisation non exclusive et non transférable d'utiliser le logiciel. Le client ne peut pas vendre, distribuer, sous-licencier, modifier ou copier le logiciel sans le consentement écrit préalable de NCIT SARL.


📋 Changelog

Version 1.0.0 (2025-12-09)

  • ✅ Initialisation du service tampon DataPortal
  • ✅ Intégration MessagePack pour sérialisation binaire
  • ✅ Base de données PostgreSQL dédiée
  • ✅ Synchronisation automatique avec DataPortal V2
  • ✅ API REST avec endpoints optimisés
  • ✅ Configuration Docker Compose complète
  • ✅ Documentation technique exhaustive

✨ Votre DataPortal Portail Sociétaires est maintenant prêt à l'emploi !