Add notification entities, DbContext config, and migration
Creates MemberChannelBinding, LineBindingCode, MessagingGroup, and NotificationLog entities under ROLAC.API.Entities.Notifications; wires DbSets and fluent config into AppDbContext; generates EF migration AddNotifications creating the four tables. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
using ROLAC.API.Entities;
|
||||
|
||||
namespace ROLAC.API.Entities.Notifications;
|
||||
|
||||
/// <summary>A short-lived code a member types to the Line bot to complete account binding.</summary>
|
||||
public class LineBindingCode
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Code { get; set; } = null!;
|
||||
public int MemberId { get; set; }
|
||||
public Member? Member { get; set; }
|
||||
public DateTime ExpiresAt { get; set; }
|
||||
public DateTime? ConsumedAt { get; set; } // null = unused
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using ROLAC.API.Entities;
|
||||
|
||||
namespace ROLAC.API.Entities.Notifications;
|
||||
|
||||
/// <summary>
|
||||
/// Binds a member to an external channel account (e.g. a Line userId). Separate table so future
|
||||
/// channels don't require changes to Member.
|
||||
/// </summary>
|
||||
public class MemberChannelBinding
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int MemberId { get; set; }
|
||||
public Member? Member { get; set; }
|
||||
public string Channel { get; set; } = null!; // "line"
|
||||
public string ExternalId { get; set; } = null!; // Line userId
|
||||
public DateTime BoundAt { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace ROLAC.API.Entities.Notifications;
|
||||
|
||||
/// <summary>A Line group the bot was added to. Named by an admin after the join event.</summary>
|
||||
public class MessagingGroup
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Channel { get; set; } = null!; // "line"
|
||||
public string ExternalId { get; set; } = null!; // Line groupId
|
||||
public string? Name { get; set; }
|
||||
public bool IsActive { get; set; } = true;
|
||||
public DateTime RegisteredAt { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using ROLAC.API.Entities;
|
||||
|
||||
namespace ROLAC.API.Entities.Notifications;
|
||||
|
||||
/// <summary>An append-only audit row for every email or Line send (success or failure).</summary>
|
||||
public class NotificationLog
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string Channel { get; set; } = null!; // "email" | "line"
|
||||
public string TargetType { get; set; } = null!; // "email" | "user" | "group"
|
||||
public string TargetExternalId { get; set; } = null!; // email address OR Line id
|
||||
public string? Subject { get; set; } // email only
|
||||
public int? MemberId { get; set; }
|
||||
public Member? Member { get; set; }
|
||||
public int? MessagingGroupId { get; set; }
|
||||
public MessagingGroup? MessagingGroup { get; set; }
|
||||
public string Body { get; set; } = null!;
|
||||
public string Status { get; set; } = null!; // "sent" | "failed"
|
||||
public string? Error { get; set; }
|
||||
public string SentByUserId { get; set; } = null!;
|
||||
public DateTime SentAt { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user