61 lines
1.7 KiB
C#

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; }
/// <summary>
/// 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"}
/// </summary>
public string? Metadata { get; set; }
public DateTime Timestamp { get; set; } = DateTime.UtcNow;
}
public enum VisitEventType
{
SectionView,
SectionLeave,
MapPoiTap,
QrScan,
QuizComplete,
GameComplete,
AgendaEventTap,
MenuItemTap,
AssistantMessage
}
}