using EnablementDAL.CustomCode.ShowRule; using EnablementDAL.DTO; using EnablementDAL.Query.Show; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using Newtonsoft.Json; namespace EnablementDAL.Implementations; public class ShowRuleDAL : IShowRuleDAL { private readonly IQueryExecutor _qe; public ShowRuleDAL(IQueryExecutor qe) => _qe = qe; public async Task GetShowRuleAsync(int showRuleId, LoginDTO login) { string json = ""; try { string sql = ShowRuleQB.GET_SHOW_RULE; var parameters = new { ShowRuleId = showRuleId, //TenantId = login.ClientId }; IEnumerable result = await _qe.QueryAsync( login, sql, parameters ); json = JsonConvert.SerializeObject(result); return json; } catch (Exception) { throw; } } public async Task GetShowRuleList(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { string sql = ShowRuleQB.GET_SHOW_RULE_LIST; var result = await _qe.QueryAsync( loginDTO, sql, null!); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetShowRuleListCountAsync(int showId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync( login, ShowRuleQB.GET_SHOW_RULE_LIST_COUNT, new { ShowId = showId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetShowRulesForChannelAsync(int channelId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync( login, ShowRuleQB.GET_SHOW_RULE_LIST_FOR_CHANNEL, new { ChannelId = channelId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetShowRulesForSpaceAsync(int spaceId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync( login, ShowRuleQB.GET_SHOW_RULE_LIST_FOR_SPACE, new { SpaceId = spaceId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task InsertShowRuleAsync( ShowRuleDTO dto, LoginDTO login, CancellationToken ct) { try { var parameters = new { // 0/-1 (this DTO's "not applicable" sentinels) must become a real NULL — // CK_TSHOWRULE_OwnerExactlyOne requires exactly one of these three set. // Real GB5 IDs are commonly large negative numbers (see // ShowChannelSubscriptionBLL's identical sentinel fix) — a plain "> 0" // check would wrongly null out a legitimately negative owner ID. ShowId = dto.ShowId != 0 && dto.ShowId != -1 ? (int?)dto.ShowId : null, ChannelId = dto.ChannelId != 0 && dto.ChannelId != -1 ? (int?)dto.ChannelId : null, SpaceId = dto.SpaceId != 0 && dto.SpaceId != -1 ? (int?)dto.SpaceId : null, TenantId = login.ClientId, dto.RuleCategory, dto.RuleGroup, dto.RuleKey, dto.RuleOperator, dto.RuleValue, dto.IsActive, dto.Remarks, dto.SortOrder, dto.CreatedById, dto.CreatedOn, dto.ModifiedById, dto.ModifiedOn, dto.SourceType }; return await _qe.ExecuteAsync( login, ShowRuleQB.INSERT_SHOW_RULE, parameters, cancellationToken: ct); } catch (Exception) { throw; } } public async Task UpdateShowRuleAsync( ShowRuleDTO dto, LoginDTO login, CancellationToken ct) { try { var parameters = new { dto.ShowRuleId, dto.ShowId, TenantId = login.ClientId, dto.RuleCategory, dto.RuleGroup, dto.RuleKey, dto.RuleOperator, dto.RuleValue, dto.IsActive, dto.Remarks, dto.SortOrder, dto.ModifiedById, dto.ModifiedOn }; return await _qe.ExecuteAsync( login, ShowRuleQB.UPDATE_SHOW_RULE, parameters, cancellationToken: ct); } catch (Exception) { throw; } } public async Task DeleteShowRuleAsync(int showRuleId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, ShowRuleQB.DELETE_SHOW_RULE, new { ShowRuleId = showRuleId, TenantId = login.ClientId, ModifiedById = login.UserId }, cancellationToken: ct).ConfigureAwait(false); }