using System; using System.ComponentModel.DataAnnotations; namespace AsbCloudApp.Data; /// /// DTO уведомления /// public class NotificationDto : IId { /// /// Id уведомления /// [Required] public int Id { get; set; } /// /// Id получателя уведомления /// [Required] public int IdUser { get; set; } /// /// Id категории уведомления /// [Required] public int IdNotificationCategory { get; set; } /// /// Заголовок уведомления /// [Required, StringLength(300, MinimumLength = 1, ErrorMessage = "Заголовок должен мыть не меньше 1-го знака и не больше 300")] public string Title { get; set; } = null!; /// /// Сообщение уведомления /// [Required, StringLength(2048, MinimumLength = 1, ErrorMessage = "Заголовок должен мыть не меньше 1-го знака и не больше 2048")] public string Message { get; set; } = null!; /// /// Дата регистрации уведомления /// [Required] public DateTimeOffset RegistrationDate { get; set; } /// /// Дата отправки уведомления /// public DateTimeOffset? SentDate { get; set; } /// /// Дата прочтения уведомления /// public DateTimeOffset? ReadDate { get; set; } /// /// Состояние уведомления /// 0 - Зарегистрировано, /// 1 - Отправлено, /// 2 - Прочитано /// [Required] public int IdState { get { if (SentDate is not null && ReadDate is not null) return 2; if (SentDate is not null) return 1; return 0; } set { switch (value) { case 0: SentDate = null; ReadDate = null; break; case 1: SentDate = DateTimeOffset.UtcNow; ReadDate = null; break; case 2: SentDate = DateTimeOffset.UtcNow; ReadDate = DateTimeOffset.UtcNow; break; } } } /// /// Id типа доставки уведомления /// 0 - SignalR /// 1 - Email /// [Required] [Range(0,1)] public int IdTransportType { get; set; } /// /// DTO категории уведомления /// [Required] public NotificationCategoryDto NotificationCategory { get; set; } = null!; }