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