using FBCKDAL.DTOs; using FBCKDAL.Interfaces; using FBCKDAL.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace FBCKDAL.Implementations; public class MemoDAL : IMemoDAL { private readonly IQueryExecutor _qe; public MemoDAL(IQueryExecutor qe) => _qe = qe; public async Task GetMemoAsync(int memoId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, MemoQB.GET_MEMO, new { MemoId = memoId, TenantId = login.ClientId }).ConfigureAwait(false); public async Task> GetMemoListAsync( int toEmployeeId, int fromEmployeeId, short memoType, short status, int page, int pageSize, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, MemoQB.GET_MEMO_LIST, new { ToEmployeeId = toEmployeeId, FromEmployeeId = fromEmployeeId, MemoType = memoType, Status = status, TenantId = login.ClientId, Offset = (page - 1) * pageSize, PageSize = pageSize }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task GetMemoStatusAsync(int memoId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync(login, MemoQB.GET_MEMO_STATUS, new { MemoId = memoId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task SaveMemoAsync(MemoDTO dto, LoginDTO login, CancellationToken ct) { if (dto.MemoId == 0) { dto.TenantId = login.ClientId; dto.CreatedBy = login.UserId; return await _qe.ExecuteIdentityAsync(login, MemoQB.INSERT_MEMO, dto).ConfigureAwait(false); } dto.ModifiedBy = login.UserId; await _qe.ExecuteAsync(login, MemoQB.UPDATE_MEMO, dto, cancellationToken: ct).ConfigureAwait(false); return dto.MemoId; } public async Task SendMemoAsync(int memoId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, MemoQB.SEND_MEMO, new { MemoId = memoId, ModifiedBy = login.UserId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task AcknowledgeMemoAsync(int memoId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, MemoQB.ACKNOWLEDGE_MEMO, new { MemoId = memoId, ModifiedBy = login.UserId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task RecallMemoAsync(int memoId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, MemoQB.RECALL_MEMO, new { MemoId = memoId, ModifiedBy = login.UserId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); }