diff --git a/FictionArchive.Service.Shared/Contracts/Events/IJobStatusUpdate.cs b/FictionArchive.Service.Shared/Contracts/Events/IJobStatusUpdate.cs new file mode 100644 index 0000000..54db073 --- /dev/null +++ b/FictionArchive.Service.Shared/Contracts/Events/IJobStatusUpdate.cs @@ -0,0 +1,23 @@ +using FictionArchive.Common.Enums; + +namespace FictionArchive.Service.Shared.Contracts.Events; + +public interface IJobStatusUpdate +{ + Guid JobId { get; } + Guid? ParentJobId { get; } + string JobType { get; } + string DisplayName { get; } + JobStatus Status { get; } + string? ErrorMessage { get; } + Dictionary? Metadata { get; } +} + +public record JobStatusUpdate( + Guid JobId, + Guid? ParentJobId, + string JobType, + string DisplayName, + JobStatus Status, + string? ErrorMessage, + Dictionary? Metadata) : IJobStatusUpdate; diff --git a/FictionArchive.Service.Shared/Extensions/JobStatusPublisher.cs b/FictionArchive.Service.Shared/Extensions/JobStatusPublisher.cs new file mode 100644 index 0000000..3b44d7e --- /dev/null +++ b/FictionArchive.Service.Shared/Extensions/JobStatusPublisher.cs @@ -0,0 +1,20 @@ +using FictionArchive.Common.Enums; +using FictionArchive.Service.Shared.Contracts.Events; +using MassTransit; + +namespace FictionArchive.Service.Shared.Extensions; + +public static class JobStatusPublisher +{ + public static Task ReportJobStatus( + this IPublishEndpoint endpoint, + Guid jobId, + string jobType, + string displayName, + JobStatus status, + Guid? parentJobId = null, + string? errorMessage = null, + Dictionary? metadata = null) + => endpoint.Publish(new JobStatusUpdate( + jobId, parentJobId, jobType, displayName, status, errorMessage, metadata)); +}