63 lines
2.9 KiB
Markdown
63 lines
2.9 KiB
Markdown
# 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
|
|
```bash
|
|
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
|
|
```
|