using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using TMSDAL.DTO.LearnerDashboard; using TMSDAL.Query.LearnerDashboard; namespace TMSDAL.CustomCode.LearnerDashboard { public class LearnerDashboardDAL : ILearnerDashboardDAL { private readonly IQueryExecutor _QueryExecutor; public LearnerDashboardDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } public async Task GetLearnerSummary(int employeeId, LoginDTO loginDTO) { try { var parameters = new { EmployeeId = employeeId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QuerySingleAsync( loginDTO, LearnerDashboardQB.GET_LEARNER_SUMMARY, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetActiveEnrollments(int employeeId, LoginDTO loginDTO) { try { var parameters = new { EmployeeId = employeeId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, LearnerDashboardQB.GET_ACTIVE_ENROLLMENTS, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetLearnerCertificates(int employeeId, LoginDTO loginDTO) { try { var parameters = new { EmployeeId = employeeId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, LearnerDashboardQB.GET_LEARNER_CERTIFICATES, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetTrainingHistory(int employeeId, LoginDTO loginDTO) { try { var parameters = new { EmployeeId = employeeId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, LearnerDashboardQB.GET_TRAINING_HISTORY, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetLearnerDashboard(int employeeId, LoginDTO loginDTO) { try { var parameters = new { EmployeeId = employeeId, TenantId = loginDTO.ClientId }; var summaryTask = _QueryExecutor.QuerySingleAsync(loginDTO, LearnerDashboardQB.GET_LEARNER_SUMMARY, parameters); var enrollmentsTask = _QueryExecutor.QueryAsync (loginDTO, LearnerDashboardQB.GET_ACTIVE_ENROLLMENTS, parameters); var certsTask = _QueryExecutor.QueryAsync (loginDTO, LearnerDashboardQB.GET_LEARNER_CERTIFICATES, parameters); var historyTask = _QueryExecutor.QueryAsync (loginDTO, LearnerDashboardQB.GET_TRAINING_HISTORY, parameters); await Task.WhenAll(summaryTask, enrollmentsTask, certsTask, historyTask); var dashboard = new LearnerFullDashboardDTO { Summary = summaryTask.Result, ActiveEnrollments = enrollmentsTask.Result?.ToList(), Certificates = certsTask.Result?.ToList(), TrainingHistory = historyTask.Result?.ToList() }; return JsonConvert.SerializeObject(dashboard); } catch (Exception) { throw; } } } }