using FrameworkDAL.DTO.EventRule; using FrameworkDAL.Query.EventRule; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace FrameworkDAL.CustomCode.EventRule { public sealed class EventRuleDAL : IEventRuleDAL { private readonly IQueryExecutor _qe; public EventRuleDAL(IQueryExecutor qe) => _qe = qe; public async Task GetByIdAsync( int actionId, LoginDTO login, CancellationToken ct = default) => await _qe.QuerySingleAsync( login, EventRuleQB.GET_BY_ACTION_ID, new { ActionId = actionId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetListByEventTypeAsync( int eventTypeId, LoginDTO login, CancellationToken ct = default) => (await _qe.QueryAsync( login, EventRuleQB.GET_LIST_BY_EVENT_TYPE, new { EventTypeId = eventTypeId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false)).ToList(); public async Task> GetSelectListAsync( LoginDTO login, CancellationToken ct = default) => (await _qe.QueryAsync( login, EventRuleQB.GET_SELECT_LIST, new { TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false)).ToList(); public Task GetNextActionIdAsync(LoginDTO login, CancellationToken ct = default) => _qe.ExecuteScalarAsync(login, EventRuleQB.NEXT_ACTION_ID, new { TenantId = login.ClientId }, cancellationToken: ct); public Task GetNextEtaIdAsync(LoginDTO login, CancellationToken ct = default) => _qe.ExecuteScalarAsync(login, EventRuleQB.NEXT_ETA_ID, new { TenantId = login.ClientId }, cancellationToken: ct); public Task GetNextDetailIdAsync(LoginDTO login, CancellationToken ct = default) => _qe.ExecuteScalarAsync(login, EventRuleQB.NEXT_DETAIL_ID, new { }, cancellationToken: ct); public Task InsertActionAsync(EventRuleDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct = default) => _qe.ExecuteAsync(login, EventRuleQB.INSERT_ACTION, new { dto.ActionId, dto.ActionName, dto.ActionType, dto.SendTo, dto.ToDeliveryType, dto.ReplyTo, dto.TemplateId, dto.MailCc, dto.MailCcDeliveryType, dto.MailBcc, dto.MailBccDeliveryType, dto.WebServiceId, dto.UriParameterValue, dto.ReportId, dto.Status, dto.ConditionExpression, CreatedById = login.UserId, ModifiedById = login.UserId, TenantId = login.ClientId }, tx, cancellationToken: ct); public Task InsertEventTypeActionAsync(int eventTypeActionId, EventRuleDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct = default) => _qe.ExecuteAsync(login, EventRuleQB.INSERT_EVENT_TYPE_ACTION, new { EventTypeActionId = eventTypeActionId, dto.EventTypeId, TenantId = login.ClientId }, tx, cancellationToken: ct); public Task InsertDetailAsync(int detailId, int eventTypeActionId, EventRuleDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct = default) => _qe.ExecuteAsync(login, EventRuleQB.INSERT_EVENT_TYPE_ACTION_DETAIL, new { DetailId = detailId, EventTypeActionId = eventTypeActionId, dto.ActionId, dto.SlNo }, tx, cancellationToken: ct); public Task UpdateActionAsync(EventRuleDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct = default) => _qe.ExecuteAsync(login, EventRuleQB.UPDATE_ACTION, new { dto.ActionId, dto.ActionName, dto.ActionType, dto.SendTo, dto.ToDeliveryType, dto.ReplyTo, dto.TemplateId, dto.MailCc, dto.MailCcDeliveryType, dto.MailBcc, dto.MailBccDeliveryType, dto.WebServiceId, dto.UriParameterValue, dto.ReportId, dto.Status, dto.ConditionExpression, ModifiedById = login.UserId, TenantId = login.ClientId }, tx, cancellationToken: ct); public Task UpdateDetailSlNoAsync(int actionId, short slNo, LoginDTO login, DbTransaction tx, CancellationToken ct = default) => _qe.ExecuteAsync(login, EventRuleQB.UPDATE_DETAIL_SLNO, new { ActionId = actionId, SlNo = slNo }, tx, cancellationToken: ct); public Task DeactivateActionAsync(int actionId, int modifiedById, LoginDTO login, DbTransaction tx, CancellationToken ct = default) => _qe.ExecuteAsync(login, EventRuleQB.DEACTIVATE_ACTION, new { ActionId = actionId, ModifiedById = modifiedById, TenantId = login.ClientId }, tx, cancellationToken: ct); public Task DeactivateDetailAsync(int actionId, LoginDTO login, DbTransaction tx, CancellationToken ct = default) => _qe.ExecuteAsync(login, EventRuleQB.DEACTIVATE_DETAIL, new { ActionId = actionId }, tx, cancellationToken: ct); } }