FEAT: Entités métier manquantes — Vehicle, Recording, LicensePlate, StoragePolicy #6

Closed
opened 2026-08-10 21:02:18 +02:00 by nonobis · 0 comments
Owner

🎯 Contexte

La spec définit un modèle de domaine complet (Partie 2) dont 4 entités n'existent pas dans le code : Vehicle, Recording, LicensePlate, StoragePolicy. Leurs relations (Event→Vehicle, Event→Recording, Camera→StoragePolicy N:1) manquent aussi.

📚 Référence spec (MASTER_SPECIFICATION.md v2.0)

2.1 Définitions :

  • Vehicle : Id, LicensePlate, PersonId (FK), Make, Model, Color, CreatedAt, UpdatedAt
  • Recording : Id, CameraId (FK), Timestamp, Duration, StoragePath, SizeBytes, StorageProvider, StoragePolicyId (FK), CreatedAt, UpdatedAt
  • LicensePlate : Id, PlateText, VehicleId (FK), PersonId (FK?), Confidence, CreatedAt, UpdatedAt
  • StoragePolicy : Id, Name, RetentionDays, StorageProvider (S3, Local), CreatedAt, UpdatedAt
    2.2 Cardinalités : Event → Vehicle N:1, Event → Recording N:1, Camera → StoragePolicy N:1 (plusieurs caméras partagent une politique), Event → Event (Parent) N:1, Event → Recording pour playback
    2.3 : index idx_license_plate GIN trgm (recherche floue plaque)

🔍 État actuel (vérifié dans le code)

DbSets actuels (AppDbContext.cs) : Sites, Agents, Cameras, CameraCredentials, CameraDetectionProfiles, UserSites, ApiKeys, AuditLogs, AppSettings, AgentSettings, Groups, UserGroups, CameraDiscoveryResults, DiscoveredStreams, CameraAssignments, CameraEvents, Notifications, NotificationTemplates, UserNotificationConfigs, RevokedRefreshTokens, Persons, KnownFaces. StoragePolicy : 0 occurrence dans le code. Vehicle/Recording/LicensePlate : aucune entité.

🧩 À faire

  • Créer les entités Domain (Vehicle, Recording, LicensePlate, StoragePolicy) avec leurs relations
  • Enrichir CameraEvent : VehicleId, RecordingId, ParentEventId, DetectionHash, IsSuppressed, TrackId (déjà partiellement)
  • Configurations EF + migration(s)
  • Index : recordings(camera_id, timestamp), recordings(storage_path), license_plates(plate_text gin_trgm), events(track_id), events(detection_hash), events(parent_event_id)
  • Soft delete + audit fields conformes aux conventions existantes

🧪 Critères d'acceptation

  • Migration appliquée, tables créées
  • dotnet build 0 erreur, make test vert
  • Relations testées (Event→Vehicle, Camera→StoragePolicy)

📁 Fichiers concernés

src/Heimdall.Domain/Entities/Vehicle.cs (nouveau), Recording.cs (nouveau), LicensePlate.cs (nouveau), StoragePolicy.cs (nouveau), src/Heimdall.Domain/Entities/CameraEvent.cs, src/Heimdall.Infrastructure/Data/AppDbContext.cs, migrations

## 🎯 Contexte La spec définit un modèle de domaine complet (Partie 2) dont **4 entités n'existent pas** dans le code : `Vehicle`, `Recording`, `LicensePlate`, `StoragePolicy`. Leurs relations (Event→Vehicle, Event→Recording, Camera→StoragePolicy N:1) manquent aussi. ## 📚 Référence spec (MASTER_SPECIFICATION.md v2.0) **2.1 Définitions** : - `Vehicle` : Id, LicensePlate, PersonId (FK), Make, Model, Color, CreatedAt, UpdatedAt - `Recording` : Id, CameraId (FK), Timestamp, Duration, StoragePath, SizeBytes, StorageProvider, StoragePolicyId (FK), CreatedAt, UpdatedAt - `LicensePlate` : Id, PlateText, VehicleId (FK), PersonId (FK?), Confidence, CreatedAt, UpdatedAt - `StoragePolicy` : Id, Name, RetentionDays, StorageProvider (S3, Local), CreatedAt, UpdatedAt **2.2 Cardinalités** : Event → Vehicle N:1, Event → Recording N:1, Camera → StoragePolicy N:1 (plusieurs caméras partagent une politique), Event → Event (Parent) N:1, Event → Recording pour playback **2.3** : index `idx_license_plate` GIN trgm (recherche floue plaque) ## 🔍 État actuel (vérifié dans le code) DbSets actuels (`AppDbContext.cs`) : Sites, Agents, Cameras, CameraCredentials, CameraDetectionProfiles, UserSites, ApiKeys, AuditLogs, AppSettings, AgentSettings, Groups, UserGroups, CameraDiscoveryResults, DiscoveredStreams, CameraAssignments, CameraEvents, Notifications, NotificationTemplates, UserNotificationConfigs, RevokedRefreshTokens, Persons, KnownFaces. `StoragePolicy` : 0 occurrence dans le code. `Vehicle`/`Recording`/`LicensePlate` : aucune entité. ## 🧩 À faire - [ ] Créer les entités Domain (Vehicle, Recording, LicensePlate, StoragePolicy) avec leurs relations - [ ] Enrichir `CameraEvent` : VehicleId, RecordingId, ParentEventId, DetectionHash, IsSuppressed, TrackId (déjà partiellement) - [ ] Configurations EF + migration(s) - [ ] Index : recordings(camera_id, timestamp), recordings(storage_path), license_plates(plate_text gin_trgm), events(track_id), events(detection_hash), events(parent_event_id) - [ ] Soft delete + audit fields conformes aux conventions existantes ## 🧪 Critères d'acceptation - [ ] Migration appliquée, tables créées - [ ] `dotnet build` 0 erreur, `make test` vert - [ ] Relations testées (Event→Vehicle, Camera→StoragePolicy) ## 📁 Fichiers concernés src/Heimdall.Domain/Entities/Vehicle.cs (nouveau), Recording.cs (nouveau), LicensePlate.cs (nouveau), StoragePolicy.cs (nouveau), src/Heimdall.Domain/Entities/CameraEvent.cs, src/Heimdall.Infrastructure/Data/AppDbContext.cs, migrations
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#6
No description provided.