using ComplianceBLL.ComplianceAlert; using FastEndpoints; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.Framework.ResponseStandard; using GB5Shared.DTO.Report; using GB5Shared.FastEndPoint; using static GB5Shared.GB5Constant.Constant; namespace ComplianceSL.Endpoints.ComplianceAlert; // POST wrapper over GetActiveAlerts (Compliance & Audit Dashboard, Finance Analytics Dashboards // Phase 3) -- same reasoning as PostFilingStatusSummaryForDashboard: the BI Catalog ApiService // bridge always POSTs a ReportCallingDTO{CriteriaDTO} body, so the existing plain-GET endpoint // can't be bridged as-is. GSTIN/Page/PageSize parsed from CriteriaDTO with the same defaults the // GET endpoint uses. public class PostActiveAlertsForDashboard : BaseEndpoint> { private readonly IComplianceAlertBLL _bll; public PostActiveAlertsForDashboard(IComplianceAlertBLL bll) => _bll = bll; public override void Configure() { Post("/ComplianceAlert/GetActiveAlertsForDashboard"); AllowAnonymous(); } public record Params( [property: FromHeader] string Login, [property: FromBody] ReportCallingDTO ReportCallingDTO ); protected override string? GetCacheKey(Params req, LoginDTO login) => null; private static (string GSTIN, int Page, int PageSize) ParseCriteria(CriteriaDTO? criteriaDTO) { string gstin = ""; int page = 1; int pageSize = 50; if (criteriaDTO?.SectionCriteriaList == null) return (gstin, page, pageSize); foreach (var section in criteriaDTO.SectionCriteriaList) { if (section.AttributesCriteriaList == null) continue; foreach (var attr in section.AttributesCriteriaList) { if (attr.FieldValue == null) continue; var field = attr.FieldName?.ToLowerInvariant(); if (field == "gstin") gstin = attr.FieldValue.ToString() ?? ""; else if (field == "page" && int.TryParse(attr.FieldValue.ToString(), out var p)) page = p; else if (field == "pagesize" && int.TryParse(attr.FieldValue.ToString(), out var ps)) pageSize = ps; } } return (gstin, page, pageSize); } protected override async Task> ExecuteAsync( Params req, LoginDTO login, CancellationToken ct) { try { var (gstin, page, pageSize) = ParseCriteria(req.ReportCallingDTO.CriteriaDTO); var result = await _bll.GetActiveAlertsAsync(gstin, page, pageSize, login, ct).ConfigureAwait(false); return await GB5Shared.ResponseStandard.Response.CreateSuccessResponse(result, CacheKeyLevel.CLIENT_LEVEL, login); } catch (Exception ex) { return await GB5Shared.ResponseStandard.Response.CreateExceptionError(ex, CacheKeyLevel.CLIENT_LEVEL, login, ex.Message, 500); } } }