2.9 KiB
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>puisdotnet ef database update
Auth & sécurité
- JWT Bearer pour les apps manager
- API Key (
X-Api-Keyheader) 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 ounull→ géré parFalseToNullConverterdansDTOs/RemoteEventAgendaDTO.cs- Dates au format
YYYYMMDD(ex:"20260327") → parsées dansRemoteEventAgendaDTO.GetDateFrom() - Désérialisation tolérante aux erreurs via
RemoteAgendaJsonSettings.Lenient
Docker
- Multi-stage build, image finale
aspnet:8.0, port 80 docker-compose.ymlavec Traefik, SSL Let's Encrypt- Domaine API :
api.mymuseum.be - Config via fichier
.envet 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