Adds response + problem detail RFC9457 (Problem Details for HTTP APIs)

This commit is contained in:
Janus Knudsen 2025-03-12 18:30:40 +01:00
parent 64e696dc5a
commit 9d384cd18d
4 changed files with 149 additions and 16 deletions

View file

@ -1,16 +1,43 @@
namespace PlanTempus.Core.CommandQueries;

namespace PlanTempus.Core.CommandQueries;
public class CommandResponse
/// <summary>
/// Represents a response to a command request, typically used in asynchronous operations.
/// This class includes details such as a unique request ID, correlation ID, command name,
/// transaction ID, creation timestamp, and a URL to check the status of the command.
/// </summary>
/// <param name="correlationId">A unique identifier used to track the request across services.</param>
/// <param name="commandName">The name of the command being executed.</param>
/// <param name="transactionId">An optional unique identifier for the transaction associated with the command.</param>
public class CommandResponse(Guid correlationId, string commandName, Guid? transactionId)
{
public Guid RequestId { get; }
public Guid CorrelationId { get; }
public Guid? TransactionId { get; }
public DateTime CreatedAt { get; }
/// <summary>
/// A unique identifier for the request. This is automatically generated using Guid.CreateVersion7().
/// </summary>
public Guid RequestId { get; } = Guid.CreateVersion7();
public CommandResponse(Guid correlationId)
{
CorrelationId = correlationId;
RequestId = Guid.CreateVersion7();
CreatedAt = DateTime.Now;
}
/// <summary>
/// A unique identifier used to track the request across services. This is provided when creating the response.
/// </summary>
public Guid CorrelationId { get; } = correlationId;
/// <summary>
/// The name of the command being executed.
/// </summary>
public string CommandName { get; } = commandName;
/// <summary>
/// An optional unique identifier for the transaction associated with the command.
/// </summary>
public Guid? TransactionId { get; } = transactionId;
/// <summary>
/// The timestamp when the command response was created. This is automatically set to the current UTC time.
/// </summary>
public DateTime CreatedAt { get; } = DateTime.UtcNow;
/// <summary>
/// A URL where the client can check the status of the command. This is typically used in asynchronous operations.
/// </summary>
public string StatusUrl { get; } = "statusUrl";
}