using System.Data.Common; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.ResponseStandard; using IDMSDAL.DTOs; using IDMSDAL.Interfaces; using IDMSDAL.QueryBuilders; namespace IDMSDAL.Implementations; public class ReworkDAL : IReworkDAL { private readonly IQueryExecutor _QueryExecutor; public ReworkDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } public async Task GetReworkAsync( int reworkId, LoginDTO login, CancellationToken ct) { return await _QueryExecutor.QuerySingleAsync( login, ReworkQB.GET_BY_ID, new { ReworkId = reworkId }).ConfigureAwait(false); } public async Task> GetReworkByEngagementAsync( int engagementId, LoginDTO login, CancellationToken ct) { return await _QueryExecutor.QueryAsync( login, ReworkQB.GET_BY_ENGAGEMENT, new { EngagementId = engagementId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); } // INSERT-only; returns new IDENTITY value. public async Task SaveReworkAsync( ReworkDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) { try { dto.CreatedById = login.UserId; dto.CreatedOn = DateTime.UtcNow; int newId = await _QueryExecutor.ExecuteIdentityAsync( login, ReworkQB.INSERT, dto, tx).ConfigureAwait(false); return newId; } catch (Exception) { throw; } } public async Task> ResolveReworkAsync( int reworkId, int resolvedById, DateTime resolvedOn, LoginDTO login, DbTransaction tx, CancellationToken ct) { try { var param = new { ReworkId = reworkId, ResolvedById = resolvedById, ResolvedOn = resolvedOn }; int rows = await _QueryExecutor.ExecuteAsync( login, ReworkQB.RESOLVE, param, tx, cancellationToken: ct).ConfigureAwait(false); return rows > 0 ? Result.Success("Rework resolved.") : Result.Failure("Rework not found."); } catch (Exception) { throw; } } }