oqtane.framework/Oqtane.Shared/Models/Notification.cs
vnetonline b7de4b81a6 [ENHANCE] - Added IsRead property to Notifications
Fixed Version to Tenant.04.00.01.01 and reverted the Program.cs back to the way it was

This reverts commit 82fef82c4f.

[ENHANCE] - Added API to get Count of New Notifications based on IsRead

Fixed Typo in Notification Controller

[ENHANCE] - Added API to get Notifications by Count and IsRead
2023-07-06 01:02:05 +10:00

186 lines
5.8 KiB
C#

using System;
using System.ComponentModel.DataAnnotations.Schema;
namespace Oqtane.Models
{
/// <summary>
/// Notification for a User - usually meant to be sent as an E-Mail.
/// </summary>
public class Notification : IDeletable
{
/// <summary>
/// Internal ID
/// </summary>
public int NotificationId { get; set; }
/// <summary>
/// Reference to the <see cref="Site"/> on which the Notification was created.
/// </summary>
public int SiteId { get; set; }
/// <summary>
/// Creator <see cref="User"/> ID
/// </summary>
public int? FromUserId { get; set; }
/// <summary>
/// Nice Name of the Creator
/// </summary>
public string FromDisplayName { get; set; }
/// <summary>
/// Creator E-Mail
/// </summary>
public string FromEmail { get; set; }
/// <summary>
/// Recipient <see cref="User"/> ID - nullable, as Recipient could be someone that's not a user.
/// </summary>
public int? ToUserId { get; set; }
/// <summary>
/// Recipient Nice-Name.
/// </summary>
public string ToDisplayName { get; set; }
/// <summary>
/// Recipient Mail
/// </summary>
public string ToEmail { get; set; }
/// <summary>
/// Reference to an optional Parent <see cref="Notification"/> - in case it's a kind of thread with reply-messages.
/// </summary>
public int? ParentId { get; set; }
/// <summary>
/// Message Subject.
/// </summary>
public string Subject { get; set; }
/// <summary>
/// Body / Contents of this Notification
/// </summary>
public string Body { get; set; }
/// <summary>
/// When the notification was created.
/// </summary>
public DateTime CreatedOn { get; set; }
/// <summary>
/// If it has been delivered. See also <see cref="DeliveredOn"/>.
/// </summary>
public bool IsDelivered { get; set; }
/// <summary>
/// When the Notification was sent/delivered.
/// </summary>
public DateTime? DeliveredOn { get; set; }
#region IDeletable
/// <inheritdoc />
public string DeletedBy { get; set; }
/// <inheritdoc />
public DateTime? DeletedOn { get; set; }
/// <inheritdoc />
public bool IsDeleted { get; set; }
#endregion
/// <summary>
/// When the Notification _should_ be sent. See also <see cref="DeliveredOn"/>
/// </summary>
public DateTime? SendOn { get; set; }
/// <summary>
/// If it has been read. See also <see cref="IsDelivered" />
/// </summary>
public bool IsRead { get; set; }
// constructors
public Notification() {}
public Notification(int siteId, User to, string subject, string body)
{
ConstructNotification(siteId, null, "", "", to, "", "", subject, body, null, null);
}
public Notification(int siteId, User to, string subject, string body, DateTime sendOn)
{
ConstructNotification(siteId, null, "", "", to, "", "", subject, body, null, sendOn);
}
public Notification(int siteId, User from, User to, string subject, string body)
{
ConstructNotification(siteId, from, "", "", to, "", "", subject, body, null, null);
}
public Notification(int siteId, User from, User to, string subject, string body, int? parentId)
{
ConstructNotification(siteId, from, "", "", to, "", "", subject, body, parentId, null);
}
public Notification(int siteId, string toDisplayName, string toEmail, string subject, string body)
{
ConstructNotification(siteId, null, "", "", null, toDisplayName, toEmail, subject, body, null, null);
}
public Notification(int siteId, string toDisplayName, string toEmail, string subject, string body, DateTime sendOn)
{
ConstructNotification(siteId, null, "", "", null, toDisplayName, toEmail, subject, body, null, sendOn);
}
public Notification(int siteId, string fromDisplayName, string fromEmail, string toDisplayName, string toEmail, string subject, string body)
{
ConstructNotification(siteId, null, fromDisplayName, fromEmail, null, toDisplayName, toEmail, subject, body, null, null);
}
private void ConstructNotification(int siteId, User from, string fromDisplayName, string fromEmail, User to, string toDisplayName, string toEmail, string subject, string body, int? parentId, DateTime? sendOn)
{
SiteId = siteId;
if (from != null)
{
FromUserId = from.UserId;
FromDisplayName = from.DisplayName;
FromEmail = from.Email;
}
else
{
FromUserId = null;
FromDisplayName = fromDisplayName;
FromEmail = fromEmail;
}
if (to != null)
{
ToUserId = to.UserId;
ToDisplayName = to.DisplayName;
ToEmail = to.Email;
}
else
{
ToUserId = null;
ToDisplayName = toDisplayName;
ToEmail = toEmail;
}
Subject = subject;
Body = body;
ParentId = parentId;
CreatedOn = DateTime.UtcNow;
if (sendOn != null)
{
SendOn = sendOn;
}
else
{
SendOn = CreatedOn;
}
IsDelivered = false;
DeliveredOn = null;
IsRead = false;
}
}
}