namespace LehrerApp.Core.Models; public class ParticipationSession { public Guid Id { get; set; } = Guid.NewGuid(); public Guid GroupId { get; set; } public DateOnly Date { get; set; } = DateOnly.FromDateTime(DateTime.Today); public Guid? LessonId { get; set; } public string? Comment { get; set; } public List CompetencyCodes { get; set; } = []; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public class ParticipationEntry { public Guid Id { get; set; } = Guid.NewGuid(); public Guid SessionId { get; set; } public Guid GroupId { get; set; } public Guid StudentId { get; set; } public DateOnly Date { get; set; } = DateOnly.FromDateTime(DateTime.Today); public List Ratings { get; set; } = []; public List CompetencyRatings { get; set; } = []; public string? Note { get; set; } public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public class CompetencyRating { public string Code { get; set; } = ""; public int Value { get; set; } } public class AspectRating { public string Key { get; set; } = ""; public int Value { get; set; } } public class ParticipationAspect { public Guid Id { get; set; } = Guid.NewGuid(); public Guid? GroupId { get; set; } public string Key { get; set; } = ""; public string Label { get; set; } = ""; public AspectValueType ValueType { get; set; } = AspectValueType.Scale5; public bool IsActive { get; set; } = true; public int SortOrder { get; set; } public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public enum AspectValueType { Scale5, Scale3, Binary, Points } public static class DefaultParticipationAspects { public static readonly IReadOnlyList All = [ new() { Key = "quality", Label = "Qualität", ValueType = AspectValueType.Scale5, SortOrder = 0 }, new() { Key = "quantity", Label = "Quantität", ValueType = AspectValueType.Scale5, SortOrder = 1 }, new() { Key = "workphase", Label = "Arbeitsphase", ValueType = AspectValueType.Scale5, SortOrder = 2 }, ]; }