using FBCKDAL.DTOs; using FBCKDAL.Interfaces; using FBCKDAL.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace FBCKDAL.Implementations; public class FeedbackDAL : IFeedbackDAL { private readonly IQueryExecutor _qe; public FeedbackDAL(IQueryExecutor qe) => _qe = qe; public async Task GetFeedbackAsync(int feedbackId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, FeedbackQB.GET_FEEDBACK, new { FeedbackId = feedbackId, TenantId = login.ClientId }).ConfigureAwait(false); public async Task> GetFeedbackListAsync( int targetEmployeeId, int responderId, short status, int page, int pageSize, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, FeedbackQB.GET_FEEDBACK_LIST, new { TargetEmployeeId = targetEmployeeId, ResponderId = responderId, Status = status, TenantId = login.ClientId, Offset = (page - 1) * pageSize, PageSize = pageSize }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task GetFeedbackSummaryAsync(int employeeId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, FeedbackQB.GET_FEEDBACK_SUMMARY, new { EmployeeId = employeeId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false) ?? new FeedbackSummaryDTO(); public async Task InsertFeedbackAsync(FeedbackDTO dto, LoginDTO login, CancellationToken ct) { dto.TenantId = login.ClientId; dto.CreatedBy = login.UserId; return await _qe.ExecuteIdentityAsync(login, FeedbackQB.INSERT_FEEDBACK, dto).ConfigureAwait(false); } public async Task UpdateFeedbackStatusAsync(int feedbackId, short status, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, FeedbackQB.UPDATE_FEEDBACK_STATUS, new { FeedbackId = feedbackId, Status = status, ModifiedBy = login.UserId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateFeedbackResponseAsync(int feedbackId, string responsesJson, decimal overallRating, short status, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, FeedbackQB.UPDATE_FEEDBACK_RESPONSE, new { FeedbackId = feedbackId, ResponsesJson = responsesJson, OverallRating = overallRating, Status = status, ModifiedBy = login.UserId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); }