using FastEndpoints;
using GB5Shared.DTO.Framework.Login;
using GB5Shared.DTO.Framework.ResponseStandard;
using GB5Shared.FastEndPoint;
using PIEBLL.Outcome;
using PIEDAL.DTO.Outcome;
using static GB5Shared.GB5Constant.Constant;
namespace PIESL.EndPoints.Outcome
{
///
/// Records a PIE outcome. This endpoint acts as the Dapr subscriber handler
/// for the idms.engagement.completed event — POST body is PIEOutcomeDTO.
///
public class SavePIEOutcome : BaseEndpoint>
{
private readonly IPIEOutcomeBLL _PIEOutcomeBLL;
public SavePIEOutcome(IPIEOutcomeBLL pieOutcomeBLL)
{
_PIEOutcomeBLL = pieOutcomeBLL;
}
public override void Configure()
{
Post("/PIE/SavePIEOutcome");
AllowAnonymous();
}
public record Params(
[property: FromHeader] string Login,
[property: FromBody] PIEOutcomeDTO PIEOutcomeDTO
);
protected override string? GetCacheKey(Params req, LoginDTO loginDTO) => null;
protected override async Task> ExecuteAsync(Params req, LoginDTO loginDTO, CancellationToken ct)
{
var result = await _PIEOutcomeBLL.RecordPIEOutcomeAsync(req.PIEOutcomeDTO, loginDTO, ct);
return await GB5Shared.ResponseStandard.Response.CreateSuccessResponse(result, CacheKeyLevel.NOT_REQUIRED, loginDTO);
}
}
}