using FastEndpoints; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.Framework.ResponseStandard; using GB5Shared.FastEndPoint; using PayRollBLL.Periodic; using static GB5Shared.GB5Constant.Constant; namespace PayRollSL.EndPoints.Periodic { // GB4 route: Periodic.svc/LoadPeriodic/?PayPeriodId={PayPeriodId}&PayConfigurationId={PayConfigurationId} // (GET, per IPeriodic.cs's WebInvoke attribute) — PeriodicBLL.PeriodicLoad. Despite the GET // verb this is a bulk-generation write (seeds TPERIODIC/TPERIODICADDON rows for every eligible // employee) — see PeriodicBLL.LoadPeriodic for the full design note. public class LoadPeriodic : BaseEndpoint> { private readonly IPeriodicBLL _PeriodicBLL; public LoadPeriodic(IPeriodicBLL PeriodicBLL) { _PeriodicBLL = PeriodicBLL; } public override void Configure() { Get("/Periodic/LoadPeriodic"); AllowAnonymous(); } public record LoadPeriodicParameters( [property: FromHeader] string Login, [property: QueryParam] int PayPeriodId, [property: QueryParam] int PayConfigurationId ); // Bulk-generation write, not a cacheable read — no GetCacheKey override (default null). protected override string? GetCacheKey(LoadPeriodicParameters req, LoginDTO login) => null; protected override async Task> ExecuteAsync( LoadPeriodicParameters req, LoginDTO loginDTO, CancellationToken ct) { try { var message = await _PeriodicBLL.LoadPeriodic(req.PayPeriodId, req.PayConfigurationId, loginDTO, ct); return await GB5Shared.ResponseStandard.Response.CreateSuccessResponse(message, CacheKeyLevel.NOT_REQUIRED, loginDTO); } catch (Exception ex) { return await GB5Shared.ResponseStandard.Response.CreateExceptionError(ex, CacheKeyLevel.NOT_REQUIRED, loginDTO, ex.Message, 500); } } } }