using System.Data.Common; using EntitlementDAL.DTOs; using EntitlementDAL.Interfaces; using EntitlementDAL.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace EntitlementDAL.Implementations; public class PlanDAL : IPlanDAL { private readonly IQueryExecutor _QueryExecutor; public PlanDAL(IQueryExecutor queryExecutor) => _QueryExecutor = queryExecutor; public async Task GetByIdAsync(int planId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QuerySingleAsync( login, PlanQB.GET_BY_ID, new { PlanId = planId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetListByPartnerProductAsync(int? partnerProductId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, PlanQB.GET_LIST_BY_PARTNER_PRODUCT, new { PartnerProductId = partnerProductId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task SaveAsync(PlanDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, PlanQB.INSERT, dto, tx, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateAsync(PlanDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, PlanQB.UPDATE, dto, tx, cancellationToken: ct).ConfigureAwait(false); public async Task DeleteAsync(int planId, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, PlanQB.DELETE, new { PlanId = planId, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); public async Task> GetPlanFeaturesAsync(int planId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, PlanQB.GET_PLAN_FEATURES, new { PlanId = planId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task> GetPlanFeatureDetailsAsync(int planId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, PlanQB.GET_PLAN_FEATURE_DETAILS, new { PlanId = planId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task SavePlanFeatureAsync(PlanFeatureDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, PlanQB.INSERT_PLAN_FEATURE, dto, tx, cancellationToken: ct).ConfigureAwait(false); }