using System; using System.Threading; using System.Threading.Tasks; using FrameworkDAL.Query.GEF; using GB5Shared.DTO.Framework.Login; using GB5Shared.GEF; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.Validation; namespace FrameworkDAL.CustomCode.GEF { public class GEFOutcomeFeedbackDAL : IGEFOutcomeFeedbackDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IValidation _Validation; public GEFOutcomeFeedbackDAL(IQueryExecutor QueryExecutor, IValidation Validation) { _QueryExecutor = QueryExecutor; _Validation = Validation; } public async Task SaveOutcomeFeedback(OutcomeFeedbackDTO dto, LoginDTO login, CancellationToken ct) { try { var recordedOn = dto.RecordedOn == default ? DateTime.UtcNow : dto.RecordedOn; // TGEFOUTCOMEFEEDBACK has an IDENTITY PK — insert without the ID column, read it // back via SCOPE_IDENTITY() (same pattern as GopQueueDAL's log-table inserts). int newId = await _QueryExecutor.ExecuteIdentityAsync( login, GEFOutcomeFeedbackQB.INSERT_OUTCOME_FEEDBACK, new { ClientId = login.ClientId, dto.Domain, dto.EntityCode, dto.EntityId, dto.OutcomeType, dto.Blocker, FocusAdherence = dto.FocusAdherence ? (byte)1 : (byte)0, dto.RecordedById, RecordedOn = recordedOn }); dto.OutcomeFeedbackId = newId; } catch (Exception ex) { throw new Exception(await _Validation.HandleException(ex, ErrorResponse.SaveErrorMessage)); } } } }