using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.QueryExecutor; using OKRDAL.DTOs; using OKRDAL.Interfaces; using OKRDAL.QueryBuilders; namespace OKRDAL.Implementations; public class OKRCycleDAL : IOKRCycleDAL { private readonly IQueryExecutor _qe; private readonly AutoNumber _autoNumber; public OKRCycleDAL(IQueryExecutor qe, AutoNumber autoNumber) { _qe = qe; _autoNumber = autoNumber; } public async Task GetCycleAsync(int okrCycleId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, OKRCycleQB.GET_CYCLE, new { OKRCycleId = okrCycleId, TenantId = login.ClientId }).ConfigureAwait(false); public async Task> GetCycleListAsync(int status, int page, int pageSize, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, OKRCycleQB.GET_CYCLE_LIST, new { Status = status, TenantId = login.ClientId, Offset = (page - 1) * pageSize, PageSize = pageSize }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task GetCycleListCountAsync(int status, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync(login, OKRCycleQB.GET_CYCLE_LIST_COUNT, new { Status = status, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetSelectListAsync(CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct) => await _qe.QueryWithCriteriaAsync(login, OKRCycleQB.GET_SELECT_LIST, new { TenantId = login.ClientId }, criteriaDTO, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task SaveCycleAsync(OKRCycleDTO dto, LoginDTO login, CancellationToken ct) { if (dto.OKRCycleId == 0) { var auto = await _autoNumber.GetAutoNumber(1, "OKRCYCLE", login).ConfigureAwait(false); dto.OKRCycleId = auto.StartNumber; dto.TenantId = login.ClientId; dto.CreatedBy = login.UserId; await _qe.ExecuteAsync(login, OKRCycleQB.INSERT_CYCLE, dto, cancellationToken: ct).ConfigureAwait(false); return dto.OKRCycleId; } dto.ModifiedBy = login.UserId; await _qe.ExecuteAsync(login, OKRCycleQB.UPDATE_CYCLE, dto, cancellationToken: ct).ConfigureAwait(false); return dto.OKRCycleId; } public async Task CloseCycleAsync(int okrCycleId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, OKRCycleQB.CLOSE_CYCLE, new { OKRCycleId = okrCycleId, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct).ConfigureAwait(false); }