using AdminDAL.DTO.Subscription; using AdminDAL.Query.Subscription; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using static GB5Shared.GB5Constant.Constant; namespace AdminDAL.CustomCode.Subscription; public class SubscriptionDAL : ISubscriptionDAL { private readonly IQueryExecutor _qe; public SubscriptionDAL(IQueryExecutor qe) => _qe = qe; public async Task> GetSubscriptionsAsync( int objectTypeId, int objectId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, SubscriptionQB.GET_SUBSCRIPTIONS_BY_OBJECT, new { ObjectTypeId = objectTypeId, ObjectId = objectId }, cancellationToken: ct).ConfigureAwait(false); return rows?.ToList() ?? []; } public async Task GetSubscriptionAsync( int subscriptionId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync( login, SubscriptionQB.GET_SUBSCRIPTION, new { SubscriptionId = subscriptionId }, cancellationToken: ct).ConfigureAwait(false); public async Task SaveSubscriptionAsync( SubscriptionDTO dto, LoginDTO login, CancellationToken ct) { var sql = login.DatabaseType == DBTYPE.SQL ? SubscriptionQB.SAVE_SUBSCRIPTION : SubscriptionQB.SAVE_SUBSCRIPTION_POSTGRESQL; return await _qe.ExecuteIdentityAsync( login, sql, dto).ConfigureAwait(false); } public async Task UpdateSubscriptionAsync( SubscriptionDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, SubscriptionQB.UPDATE_SUBSCRIPTION, dto, cancellationToken: ct).ConfigureAwait(false); public async Task DeleteSubscriptionAsync( int subscriptionId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, SubscriptionQB.DELETE_SUBSCRIPTION, new { SubscriptionId = subscriptionId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetUserIdsForAlertAsync( int dataAlertId, LoginDTO login, CancellationToken ct) { var rows = await _qe.QueryAsync( login, SubscriptionQB.GET_USERIDS_FOR_ALERT, new { DataAlertId = dataAlertId }, cancellationToken: ct).ConfigureAwait(false); return rows?.ToList() ?? []; } }