61 lines
1.7 KiB
C#
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
|
|
}
|
|
}
|