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 FeatureGroupDAL : IFeatureGroupDAL { private readonly IQueryExecutor _QueryExecutor; public FeatureGroupDAL(IQueryExecutor queryExecutor) => _QueryExecutor = queryExecutor; public async Task GetByIdAsync(int featureGroupId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QuerySingleAsync( login, FeatureGroupQB.GET_BY_ID, new { FeatureGroupId = featureGroupId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetListAsync(LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, FeatureGroupQB.GET_LIST, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task SaveAsync(FeatureGroupDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, FeatureGroupQB.INSERT, dto, tx, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateAsync(FeatureGroupDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, FeatureGroupQB.UPDATE, dto, tx, cancellationToken: ct).ConfigureAwait(false); public async Task DeleteAsync(int featureGroupId, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, FeatureGroupQB.DELETE, new { FeatureGroupId = featureGroupId, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); } public class FeatureDAL : IFeatureDAL { private readonly IQueryExecutor _QueryExecutor; public FeatureDAL(IQueryExecutor queryExecutor) => _QueryExecutor = queryExecutor; public async Task GetByIdAsync(int featureId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QuerySingleAsync( login, FeatureQB.GET_BY_ID, new { FeatureId = featureId }, cancellationToken: ct).ConfigureAwait(false); public async Task GetByCodeAsync(string featureCode, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QuerySingleAsync( login, FeatureQB.GET_BY_CODE, new { FeatureCode = featureCode }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetListAsync(LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, FeatureQB.GET_LIST, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task> GetListFilteredAsync(bool pieOnly, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, FeatureQB.GET_LIST_FILTERED, new { PieOnly = pieOnly ? 1 : 0 }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task SaveAsync(FeatureDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, FeatureQB.INSERT, dto, tx, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateAsync(FeatureDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, FeatureQB.UPDATE, dto, tx, cancellationToken: ct).ConfigureAwait(false); public async Task DeleteAsync(int featureId, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, FeatureQB.DELETE, new { FeatureId = featureId, ModifiedById = login.UserId, ModifiedOn = DateTime.UtcNow }, tx, cancellationToken: ct).ConfigureAwait(false); public async Task> GetMenuSetMapByFeatureAsync(int featureId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, FeatureQB.GET_MENUSET_MAP_BY_FEATURE, new { FeatureId = featureId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task SaveMenuSetMapAsync(FeatureMenuSetMapDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync(login, FeatureQB.INSERT_MENUSET_MAP, dto, tx, cancellationToken: ct).ConfigureAwait(false); }