using System.Text.Json; using AnalyticsDAL.DTO.ReportConfig; using AnalyticsDAL.Query.ReportConfig; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace AnalyticsDAL.CustomCode.ReportConfig { public class ReportDataSourceRuleDAL : IReportDataSourceRuleDAL { private readonly IQueryExecutor _queryExecutor; public ReportDataSourceRuleDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task GetRule(int ruleId, LoginDTO login, CancellationToken ct) { var dto = await _queryExecutor.QuerySingleAsync( login, ReportDataSourceRuleQB.GET_RULE, new { DataSourceRuleId = ruleId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(dto); } public async Task GetRulesByReport(int reportId, LoginDTO login, CancellationToken ct) { var list = await _queryExecutor.QueryAsync( login, ReportDataSourceRuleQB.GET_RULES_BY_REPORT, new { ReportId = reportId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(list); } public async Task SaveRule(ReportDataSourceRuleDTO dto, LoginDTO login, CancellationToken ct) { var maxSlNo = await _queryExecutor.ExecuteScalarAsync( login, ReportDataSourceRuleQB.GET_MAX_SLNO, new { dto.ReportId }, cancellationToken: ct).ConfigureAwait(false); dto.SlNo = (short)(maxSlNo + 1); await _queryExecutor.ExecuteAsync( login, ReportDataSourceRuleQB.SAVE_RULE, new { dto.DataSourceRuleId, dto.ReportId, dto.SlNo, dto.RuleType, dto.ThresholdValue, dto.TargetDataSource, dto.RulePriority, dto.Remarks }, cancellationToken: ct).ConfigureAwait(false); return dto.DataSourceRuleId; } public async Task UpdateRule(ReportDataSourceRuleDTO dto, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, ReportDataSourceRuleQB.UPDATE_RULE, new { dto.DataSourceRuleId, dto.ReportId, dto.RuleType, dto.ThresholdValue, dto.TargetDataSource, dto.RulePriority, dto.Remarks }, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteRule(int ruleId, int reportId, LoginDTO login, CancellationToken ct) { await _queryExecutor.ExecuteAsync( login, ReportDataSourceRuleQB.DELETE_RULE, new { DataSourceRuleId = ruleId, ReportId = reportId }, cancellationToken: ct).ConfigureAwait(false); } public async Task GetSelectListRules(int reportId, LoginDTO login, CancellationToken ct) { var list = await _queryExecutor.QueryAsync( login, ReportDataSourceRuleQB.GET_SELECT_LIST_DATASOURCERULE, new { ReportId = reportId }, cancellationToken: ct).ConfigureAwait(false); return JsonSerializer.Serialize(list); } } }