manager-service/CLAUDE.md

2.9 KiB

manager-service

Backend ASP.NET Core 8 de la solution MyInfoMate. API REST consommée par toutes les apps.

Stack

  • .NET 8 / ASP.NET Core Web API
  • PostgreSQL + Entity Framework Core 9 (Npgsql)
  • Hangfire (jobs planifiés, dashboard sur /hangfire)
  • MQTT (MQTTnet) pour la communication temps réel avec les devices
  • Firebase Admin (push notifications)
  • Gemini 2.5-Flash-Lite via endpoint compatible OpenAI (AssistantService)
  • NSwag pour la génération OpenAPI/Swagger

Structure

ManagerService/
├── Controllers/      # 16 contrôleurs REST (un par domaine)
├── DTOs/             # Objets de transfert, incluant RemoteEventAgendaDTO (APIs PHP externes)
├── Data/             # Modèles EF + MyInfoMateDbContext
│   └── SubSection/   # 13 sous-types de Section (SectionEvent, SectionMap, SectionQuiz, etc.)
├── Services/         # Logique métier (DatabaseService par entité, SectionFactory, AssistantService)
├── Helpers/          # Utilitaires (PasswordUtils, ImageHelper, GeometryMapper...)
├── Extensions/       # DI et config (MqttClientService, AppSettingsProvider...)
├── Security/         # Auth JWT + API Key, policies (ContentEditor, SuperAdmin...)
└── Migrations/       # Migrations EF Core

Manager.Framework/ et Manager.Interfaces/ sont des packages NuGet compilés, pas de source dans ce repo.

Base de données

  • PostgreSQL, base my_info_mate
  • JSONB pour le contenu multilingue (List<TranslationDTO> pour Title, Description)
  • Héritage TPH (Table Per Hierarchy) pour les types de Section (discriminateur sur la colonne Discriminator)
  • NetTopologySuite pour les données géospatiales (cartes, annotations)
  • Migrations : dotnet ef migrations add <Nom> puis dotnet ef database update

Auth & sécurité

  • JWT Bearer pour les apps manager
  • API Key (X-Api-Key header) pour les apps mobiles visiteurs
  • Rôles : SuperAdmin, InstanceAdmin, ContentEditor, Viewer
  • Langues supportées : FR, NL, EN, DE, IT, ES, PL, CN, AR, UK

APIs PHP externes

Certaines APIs tierces (agendas en ligne) retournent du JSON PHP-style :

  • Champs en snake_case
  • false à la place d'un objet ou null → géré par FalseToNullConverter dans DTOs/RemoteEventAgendaDTO.cs
  • Dates au format YYYYMMDD (ex: "20260327") → parsées dans RemoteEventAgendaDTO.GetDateFrom()
  • Désérialisation tolérante aux erreurs via RemoteAgendaJsonSettings.Lenient

Docker

  • Multi-stage build, image finale aspnet:8.0, port 80
  • docker-compose.yml avec Traefik, SSL Let's Encrypt
  • Domaine API : api.mymuseum.be
  • Config via fichier .env et volume /etc/managerservice

Commandes utiles

dotnet run                              # Lancer en local
dotnet ef migrations add <Nom>         # Nouvelle migration
dotnet ef database update              # Appliquer les migrations
docker compose up -d                   # Lancer via Docker