using ComplianceDAL.DTO.Analytics; using ComplianceDAL.Query.ComplianceAlert; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace ComplianceDAL.CustomCode.ComplianceAlert; public class ComplianceAlertDAL(IQueryExecutor qe) : IComplianceAlertDAL { public async Task<(List Items, int Total)> GetActiveAlertsAsync( string gstin, int page, int pageSize, LoginDTO login, CancellationToken ct) { int offset = (page - 1) * pageSize; var items = await qe.QueryAsync(login, ComplianceAlertQB.GET_ACTIVE_ALERTS, new { GSTIN = gstin ?? "", PageSize = pageSize, Offset = offset, ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); var total = await qe.ExecuteScalarAsync(login, ComplianceAlertQB.GET_ACTIVE_ALERTS_COUNT, new { GSTIN = gstin ?? "", ClientId = login.ClientId, DatabaseName = login.DatabaseName }); return (items.ToList(), total); } public async Task UpsertAlertAsync(ComplianceAlertDTO dto, LoginDTO login, CancellationToken ct) => await qe.ExecuteIdentityAsync(login, ComplianceAlertQB.UPSERT_ALERT, new { dto.AlertType, dto.GSTIN, dto.ReturnPeriod, dto.ArtifactId, dto.AlertMessage, dto.Severity, ClientId = login.ClientId, DatabaseName = login.DatabaseName }); public async Task DismissAlertAsync(int alertId, int dismissedById, LoginDTO login, CancellationToken ct) => await qe.ExecuteAsync(login, ComplianceAlertQB.DISMISS_ALERT, new { AlertId = alertId, DismissedById = dismissedById, ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); public async Task GetAlertConfigAsync(string gstin, LoginDTO login, CancellationToken ct) => await qe.QuerySingleAsync(login, ComplianceAlertQB.GET_ALERT_CONFIG, new { GSTIN = gstin, ClientId = login.ClientId, DatabaseName = login.DatabaseName }); public async Task UpsertAlertConfigAsync(AlertConfigDTO dto, LoginDTO login, CancellationToken ct) => await qe.ExecuteIdentityAsync(login, ComplianceAlertQB.UPSERT_ALERT_CONFIG, new { dto.GSTIN, dto.FilingDeadlineDaysBefore, dto.EWBExpiryHoursBefore, dto.IRNPendingDaysWindow, dto.SubmissionFailedHours, dto.EnableFilingAlerts, dto.EnableReconAlerts, dto.EnableEWBAlerts, dto.EnableIRNAlerts, ClientId = login.ClientId, DatabaseName = login.DatabaseName }); public async Task> GetPendingFilingGSTINsAsync(LoginDTO login, CancellationToken ct) { var rows = await qe.QueryAsync(login, ComplianceAlertQB.GET_PENDING_FILING_GSTINS, new { ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); return rows.ToList(); } public async Task> GetExpiringEWBsAsync(LoginDTO login, CancellationToken ct) { var rows = await qe.QueryAsync(login, ComplianceAlertQB.GET_EXPIRING_EWBS, new { ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); return rows.ToList(); } public async Task> GetInvoicesWithoutIRNAsync(LoginDTO login, CancellationToken ct) { var rows = await qe.QueryAsync(login, ComplianceAlertQB.GET_INVOICES_WITHOUT_IRN, new { ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); return rows.ToList(); } public async Task> GetOldRejectedArtifactsAsync(LoginDTO login, CancellationToken ct) { var rows = await qe.QueryAsync(login, ComplianceAlertQB.GET_OLD_REJECTED_ARTIFACTS, new { ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); return rows.ToList(); } }