Module — Notes & Notifications
Synchronisé avec le code. Mettre à jour à chaque changement structurel.
Rôle
- Notes : annotations textuelles polymorphes attachables à diverses entités (Booking, Travel, Customer, Occurrence, LoadingTable, etc.) via le mécanisme
NoteTags. - Notifications : alertes poussées aux utilisateurs back-office (cloche dans l'UI), typiquement via SignalR.
Emplacement
- Pages :
src/Web/Pages/Notes/ - Services :
NoteService,NotificationService - Vue :
src/Web/Frontend/Vue/src/notes/ - Hubs SignalR :
BookingTrackingHub,EditFormActivityTrackingHub(potentiels canaux de notification)
Entités principales
Note— annotation. Champs :Tag(cf.Domain/Enum/NoteTags.cs) : sur quelle catégorie d'entité l'annotation est posée.EntityId(Guid) : ID de l'entité ciblée.Content: texte libre.- Auditable (qui, quand).
Notification— message destiné à un User back-office.
NoteTags enum (à valider)
Tags identifiés dans le code (utilisés via noteEntity = '@NoteTags.LoadingTable.ToString()' côté Razor) :
Booking,Travel,Customer,Occurrence,LoadingTable, …
Règles métier spécifiques
- Une note est annotation pure (pas un événement métier déclencheur).
- Les notifications sont transversales : tout module peut en émettre via
INotificationService. - Le pattern Razor pour ouvrir le drawer de notes :
initNotesDrawerButton('xxxNotesButton', true)côté JS, configuré avecnoteEntity+noteEntityIdglobaux.
Points d'attention / pièges
- Polymorphisme implicite : une
Noteest liée parTag + EntityId(pas FK). Suppression de l'entité parente ne cascade PAS sur les notes — orphelins potentiels en base. - Index
IX_Notes_Entity_EntityId(migrationAddNotesEntityIndex, 11.08.2026) : la table fait ~780 000 lignes et n'avait que la PK surId. La lecture polymorpheNoteService.GetAllByEntity(WHERE EntityId = @p AND Entity = @p) scannait donc l'index cluster entier — 295 ms par appel, la requête la plus coûteuse de l'instance, sur tous les écrans affichant des annotations. La colonneEntitypasse denvarchar(max)ànvarchar(450)(contrainte SQL Server pour indexer) : sans risque, la plus longue valeur en prod fait 10 caractères pour 5 valeurs distinctes. NoteTagsdoit rester synchro avec les usages côté UI (cf._Layout.cshtml, partials avecnoteEntity).- Notifications réseau via SignalR : les hubs sont déclarés dans
Startup.cs > Configure.
Conventions locales
- Le drawer de notes est un composant Vue partagé monté sur les pages qui le nécessitent.
Dépendances
- ↔ Toutes les entités annotables (Booking, Travel, Customer, Occurrence, LoadingTable…).
- → SignalR (notifications temps réel).
Contributors
No contributors
Changelog
No recent changes

