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 CheckInDAL : ICheckInDAL { private readonly IQueryExecutor _qe; private readonly AutoNumber _autoNumber; public CheckInDAL(IQueryExecutor qe, AutoNumber autoNumber) { _qe = qe; _autoNumber = autoNumber; } public async Task GetCheckInAsync(int checkInId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, CheckInQB.GET_CHECKIN, new { CheckInId = checkInId, TenantId = login.ClientId }).ConfigureAwait(false); public async Task> GetCheckInListAsync( int goalId, int employeeId, int page, int pageSize, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, CheckInQB.GET_CHECKIN_LIST, new { GoalId = goalId, EmployeeId = employeeId, TenantId = login.ClientId, Offset = (page - 1) * pageSize, PageSize = pageSize }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task GetCheckInListCountAsync(int goalId, int employeeId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync(login, CheckInQB.GET_CHECKIN_LIST_COUNT, new { GoalId = goalId, EmployeeId = employeeId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task SaveCheckInAsync(CheckInDTO dto, LoginDTO login, CancellationToken ct) { var auto = await _autoNumber.GetAutoNumber(1, "CHECKIN", login).ConfigureAwait(false); dto.CheckInId = auto.StartNumber; dto.TenantId = login.ClientId; dto.CreatedBy = login.UserId; await _qe.ExecuteAsync(login, CheckInQB.INSERT_CHECKIN, dto, cancellationToken: ct).ConfigureAwait(false); return dto.CheckInId; } public async Task SubmitCheckInAsync(int checkInId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, CheckInQB.SUBMIT_CHECKIN, new { CheckInId = checkInId, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct).ConfigureAwait(false); public async Task ReviewCheckInAsync(int checkInId, decimal managerProgress, string managerNotes, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, CheckInQB.REVIEW_CHECKIN, new { CheckInId = checkInId, ManagerProgress = managerProgress, ManagerNotes = managerNotes, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct).ConfigureAwait(false); }