mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 09:33:13 +00:00
Adds the personal producers behind GET /api/notifications without changing its shape: new assignments (SH-288), unanswered comments on work the user takes part in (SH-289), @mentions, and decisions on uplifts the user requested (SH-215).
66 lines
2.4 KiB
C#
66 lines
2.4 KiB
C#
namespace SeaHaven.DataServices.Models;
|
|
|
|
/// <summary>
|
|
/// Server-derived feed scope. <see cref="AccountId"/> null is org-wide;
|
|
/// <see cref="DispatcherId"/> null means every dispatcher's work orders.
|
|
/// </summary>
|
|
public sealed record NotificationFeedScope(int? AccountId, string? DispatcherId);
|
|
|
|
public sealed class UnassignedWorkOrdersSummary
|
|
{
|
|
public int Count { get; init; }
|
|
public DateTime? LatestCreatedAt { get; init; }
|
|
}
|
|
|
|
public sealed class NotificationWorkOrderCandidate
|
|
{
|
|
public int Id { get; init; }
|
|
public string? Number { get; init; }
|
|
public DateTime ScheduledDate { get; init; }
|
|
}
|
|
|
|
/// <summary>A bounded slice of candidates plus the unbounded total they were taken from.</summary>
|
|
public sealed class NotificationCandidatePage
|
|
{
|
|
public int Total { get; init; }
|
|
public IReadOnlyList<NotificationWorkOrderCandidate> Items { get; init; } = Array.Empty<NotificationWorkOrderCandidate>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Server-derived scope for items addressed to one person: <see cref="UserId"/> is the signed-in
|
|
/// user from claims and <see cref="AccountId"/> null is org-wide.
|
|
/// </summary>
|
|
public sealed record NotificationPersonalScope(int? AccountId, string UserId);
|
|
|
|
/// <summary>An open work order assigned to the user, with when and by whom it was last assigned.</summary>
|
|
public sealed class NotificationAssignmentCandidate
|
|
{
|
|
public int WorkOrderId { get; init; }
|
|
public string? Number { get; init; }
|
|
public DateTime AssignedAt { get; init; }
|
|
public string? AssignedBy { get; init; }
|
|
}
|
|
|
|
public sealed class NotificationCommentCandidate
|
|
{
|
|
public int CommentId { get; init; }
|
|
public int WorkOrderId { get; init; }
|
|
public string? WorkOrderNumber { get; init; }
|
|
public string? AuthorFirstName { get; init; }
|
|
public string? AuthorLastName { get; init; }
|
|
/// <summary>Free-text author for comments with no user (email sync, vendor portal).</summary>
|
|
public string? Commenter { get; init; }
|
|
public string? Text { get; init; }
|
|
public DateTime CreatedAt { get; init; }
|
|
}
|
|
|
|
public sealed class NotificationUpliftDecisionCandidate
|
|
{
|
|
public int UpliftId { get; init; }
|
|
public int WorkOrderId { get; init; }
|
|
public string? WorkOrderNumber { get; init; }
|
|
public string Status { get; init; } = "";
|
|
public decimal Amount { get; init; }
|
|
public string? DecisionNote { get; init; }
|
|
public DateTime DecidedAt { get; init; }
|
|
}
|