using System.Data.Common; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.ResponseStandard; using PIEDAL.DTO.Variant; using PIEDAL.Query.Variant; namespace PIEDAL.CustomCode.Variant; public class PIEVariantDAL : IPIEVariantDAL { private readonly IQueryExecutor _QueryExecutor; public PIEVariantDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } // ── Reads ───────────────────────────────────────────────────────────────── public async Task GetPIEVariantAsync( Guid variantId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QuerySingleAsync( login, PIEVariantQB.GET_BY_ID, new { VariantId = variantId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetPIEVariantImplicationsAsync( Guid variantId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, PIEVariantQB.GET_IMPLICATIONS, new { VariantId = variantId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task> GetPIEVariantsByModuleAsync( Guid moduleId, LoginDTO login, CancellationToken ct) => await _QueryExecutor.QueryAsync( login, PIEVariantQB.GET_SELECT_LIST_BY_MODULE, new { ModuleId = moduleId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); // ── Variant writes ──────────────────────────────────────────────────────── public async Task> SavePIEVariantAsync( PIEVariantDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) { dto.CreatedBy = login.UserId; dto.CreatedAt = DateTime.UtcNow; dto.UpdatedBy = login.UserId; dto.UpdatedAt = DateTime.UtcNow; int rows = await _QueryExecutor.ExecuteAsync( login, PIEVariantQB.INSERT, dto, tx, cancellationToken: ct).ConfigureAwait(false); return rows > 0 ? Result.Success("PIE variant saved.") : Result.Failure("Failed to save PIE variant."); } public async Task> UpdatePIEVariantAsync( PIEVariantDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) { dto.UpdatedBy = login.UserId; dto.UpdatedAt = DateTime.UtcNow; int rows = await _QueryExecutor.ExecuteAsync( login, PIEVariantQB.UPDATE, dto, tx, cancellationToken: ct).ConfigureAwait(false); return rows > 0 ? Result.Success("PIE variant updated.") : Result.Failure("PIE variant not found or not updated."); } public async Task> SoftDeletePIEVariantAsync( Guid variantId, LoginDTO login, DbTransaction tx, CancellationToken ct) { var param = new { VariantId = variantId, UpdatedAt = DateTime.UtcNow, UpdatedBy = login.UserId }; int rows = await _QueryExecutor.ExecuteAsync( login, PIEVariantQB.SOFT_DELETE, param, tx, cancellationToken: ct).ConfigureAwait(false); return rows > 0 ? Result.Success("PIE variant deleted.") : Result.Failure("PIE variant not found or already inactive."); } // ── Implication writes ──────────────────────────────────────────────────── public async Task DeleteVariantImplicationsAsync( Guid variantId, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync( login, PIEVariantQB.DELETE_IMPLICATIONS, new { VariantId = variantId }, tx, cancellationToken: ct).ConfigureAwait(false); public async Task InsertVariantImplicationAsync( PIEVariantImplicationDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) => await _QueryExecutor.ExecuteAsync( login, PIEVariantQB.INSERT_IMPLICATION, dto, tx, cancellationToken: ct).ConfigureAwait(false); }