using FLSDAL.DTO.Survey; using FLSDAL.Query.Survey; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace FLSDAL.CustomCode.Survey; public class SurveySummaryDAL : ISurveySummaryDAL { private readonly IQueryExecutor _qe; public SurveySummaryDAL(IQueryExecutor queryExecutor) => _qe = queryExecutor; public async Task GetActiveQuestionCountAsync(int instrumentConfigId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync( login, SurveyQB.GET_ACTIVE_QUESTION_COUNT, new { InstrumentConfigId = instrumentConfigId }, cancellationToken: ct).ConfigureAwait(false); public async Task UpdateSummaryAsync( int instrumentConfigId, int flsInstanceId, int groupId, int summaryIdBatchStart, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, SurveyQB.RECOMPUTE_SURVEY_SUMMARY, new { InstrumentConfigId = instrumentConfigId, FlsInstanceId = flsInstanceId, GroupId = groupId, SummaryIdBatchStart = summaryIdBatchStart, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task> GetSummaryAsync( int flsInstanceId, int groupId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync( login, SurveyQB.GET_SUMMARY, new { FlsInstanceId = flsInstanceId, GroupId = groupId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); public async Task> GetRespondentAnswersAsync( int flsRespondentId, LoginDTO login, CancellationToken ct) { const string sql = @" SELECT A.SURVEYANSWERID, A.FLSSESSIONID, A.INSTQUESTIONID, A.QUESTIONID, A.QUESTIONTYPEID, A.ANSWERTEXT, A.ANSWERNUMERIC, A.ANSWEROPTIONIDS, CAST(A.ISDRAFT AS INT) AS ISDRAFT, A.ANSWEREDAT FROM TSURVEYRESPONSEANSWER A JOIN TFLSRESPONSESESSION S ON S.FLSSESSIONID = A.FLSSESSIONID WHERE S.FLSRESPONDENTID = @FlsRespondentId AND A.ISDRAFT = 0 AND A.TENANTID = @TenantId ORDER BY A.INSTQUESTIONID"; return await _qe.QueryAsync( login, sql, new { FlsRespondentId = flsRespondentId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); } }