using AmpDAL.DTO.ApiRequestChecklist; using AMPDAL.Query.ApiRequestChecklist; using GB5Shared.DTO.Framework.CommonConfig; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Microsoft.Extensions.Options; using static GB5Shared.GB5Constant.Constant; namespace AmpDAL.CustomCode.ApiRequestChecklist; public class ApiRequestChecklistDAL( IQueryExecutor _qe, IOptionsSnapshot dbConfig ) : IApiRequestChecklistDAL { private bool IsPg => dbConfig.Value.DataBaseType == DBTYPE.POSTGRESQL; public async Task> GetByRequestAsync( int apiRequestId, int tenantId, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ApiRequestChecklistQB.PG_GET_BY_REQUEST : ApiRequestChecklistQB.GET_BY_REQUEST; var result = await _qe.QueryAsync( login, sql, new { ApiRequestId = apiRequestId, TenantId = tenantId }, null, // DbTransaction? false, // useReadUncommitted ct) // CancellationToken .ConfigureAwait(false); return result.ToList(); } public async Task> GetByStageAsync( int apiRequestId, byte stage, int tenantId, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ApiRequestChecklistQB.PG_GET_BY_STAGE : ApiRequestChecklistQB.GET_BY_STAGE; var result = await _qe.QueryAsync( login, sql, new { ApiRequestId = apiRequestId, Stage = stage, TenantId = tenantId }, null, // DbTransaction? false, // useReadUncommitted ct) // CancellationToken .ConfigureAwait(false); return result.ToList(); } public async Task InsertChecklistItemAsync( ApiRequestChecklistSaveDTO dto, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ApiRequestChecklistQB.PG_INSERT_CHECKLIST_ITEM : ApiRequestChecklistQB.INSERT_CHECKLIST_ITEM; await _qe.ExecuteAsync( login, sql, new { dto.ChecklistId, dto.TenantId, dto.ApiRequestId, dto.Stage, dto.ItemText, dto.SortOrder // IsComplete hardcoded 0 in SQL }, null, // DbTransaction? ct) // CancellationToken .ConfigureAwait(false); } public async Task CompleteItemAsync( int checklistId, int apiRequestId, int completedById, int tenantId, LoginDTO login, CancellationToken ct) { var sql = IsPg ? ApiRequestChecklistQB.PG_COMPLETE_ITEM : ApiRequestChecklistQB.COMPLETE_ITEM; await _qe.ExecuteAsync( login, sql, new { ChecklistId = checklistId, ApiRequestId = apiRequestId, TenantId = tenantId, CompletedById = completedById }, null, // DbTransaction? ct) // CancellationToken .ConfigureAwait(false); } }