shoc-backend/SeaHaven.DataServices/Interfaces/IWorkOrderWebhookDataService.cs
2026-07-27 14:40:17 -03:00

59 lines
2.3 KiB
C#

using Data.SeaHavenIndustries.Enums;
namespace SeaHaven.DataServices.Interfaces
{
public interface IWorkOrderWebhookDataService
{
Task<WorkOrderWebhookPersistenceResult> ApplyAsync(
WorkOrderWebhookMutation mutation,
CancellationToken cancellationToken);
}
public sealed record WorkOrderWebhookMutation
{
public required string DeliveryId { get; init; }
public required string EventType { get; init; }
public required DateTimeOffset OccurredAt { get; init; }
public required DateTimeOffset ProcessedAt { get; init; }
public required string BodySha256 { get; init; }
public required string ExternalWorkOrderId { get; init; }
public required string WorkerOrderNumber { get; init; }
public required string Source { get; init; }
public required DateTimeOffset UpdatedAt { get; init; }
public required string VersionHash { get; init; }
public bool IsStateEvent { get; init; }
public bool IsCancelled { get; init; }
public string? Title { get; init; }
public string? Description { get; init; }
public string? Status { get; init; }
public LifecycleStatus? LifecycleStatus { get; init; }
public string? Severity { get; init; }
public string? Priority { get; init; }
public string? AssignedTo { get; init; }
public string? RecordType { get; init; }
public string? SourceEmailS3Key { get; init; }
public string? Customer { get; init; }
public string? SiteCode { get; init; }
public string? Building { get; init; }
public string? Address { get; init; }
public DateTime? DueDate { get; init; }
public DateTime? DateReported { get; init; }
public DateTime? ScheduledStart { get; init; }
public DateTime? CreatedAt { get; init; }
public string? CommentId { get; init; }
public string? CommentText { get; init; }
public string? Commenter { get; init; }
public string? CommentType { get; init; }
}
public enum WorkOrderWebhookPersistenceStatus
{
Applied,
Duplicate,
HashConflict
}
public sealed record WorkOrderWebhookPersistenceResult(
WorkOrderWebhookPersistenceStatus Status,
bool StateMutationSkipped = false);
}