using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; namespace ManagerService.Data { [Index(nameof(InstanceId))] [Index(nameof(Timestamp))] public class VisitEvent { [Key] public string Id { get; set; } [Required] public string InstanceId { get; set; } public string? ConfigurationId { get; set; } public string? SectionId { get; set; } [Required] public string SessionId { get; set; } public VisitEventType EventType { get; set; } public AppType AppType { get; set; } public string? Language { get; set; } public int? DurationSeconds { get; set; } /// /// JSON string for sub-event data. /// MapPoiTap: {"geoPointId":42,"geoPointTitle":"Fontaine","categoryId":3} /// QrScan: {"valid":true,"sectionId":"abc"} /// QuizComplete: {"score":7,"totalQuestions":10} /// GameComplete: {"gameType":"Puzzle","durationSeconds":120} /// AgendaEventTap: {"eventId":"xyz","eventTitle":"Atelier","eventDate":"2026-04-01"} /// MenuItemTap: {"targetSectionId":"abc","menuItemTitle":"Carte"} /// AssistantMessage: {"configurationId":"abc"} /// public string? Metadata { get; set; } public DateTime Timestamp { get; set; } = DateTime.UtcNow; } public enum VisitEventType { SectionView, SectionLeave, MapPoiTap, QrScan, QuizComplete, GameComplete, AgendaEventTap, MenuItemTap, AssistantMessage } }