using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using TMSDAL.DTO.TrainerDashboard; using TMSDAL.Query.TrainerDashboard; namespace TMSDAL.CustomCode.TrainerDashboard { public class TrainerDashboardDAL : ITrainerDashboardDAL { private readonly IQueryExecutor _QueryExecutor; public TrainerDashboardDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } public async Task GetDashboardSummary(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QuerySingleAsync( loginDTO, TrainerDashboardQB.GET_DASHBOARD_SUMMARY, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetTodaySessions(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, TrainerDashboardQB.GET_TODAY_SESSIONS, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetUpcomingSessions(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, TrainerDashboardQB.GET_UPCOMING_SESSIONS, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetActiveInstances(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, TrainerDashboardQB.GET_ACTIVE_INSTANCES, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetAllSessions(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, TrainerDashboardQB.GET_ALL_SESSIONS, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetSessionHistory(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, TrainerDashboardQB.GET_SESSION_HISTORY, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetAttendanceSummary(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, TrainerDashboardQB.GET_ATTENDANCE_SUMMARY, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetTrainerRatingSummary(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QuerySingleAsync( loginDTO, TrainerDashboardQB.GET_TRAINER_RATING_SUMMARY, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetTrainerRatings(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync( loginDTO, TrainerDashboardQB.GET_TRAINER_RATINGS, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetTrainerDashboard(int trainerId, LoginDTO loginDTO) { try { var parameters = new { TrainerId = trainerId, TenantId = loginDTO.ClientId }; var summaryTask = _QueryExecutor.QuerySingleAsync(loginDTO, TrainerDashboardQB.GET_DASHBOARD_SUMMARY, parameters); var todaySessionsTask = _QueryExecutor.QueryAsync (loginDTO, TrainerDashboardQB.GET_TODAY_SESSIONS, parameters); var upcomingSessionsTask = _QueryExecutor.QueryAsync (loginDTO, TrainerDashboardQB.GET_UPCOMING_SESSIONS, parameters); var activeInstancesTask = _QueryExecutor.QueryAsync (loginDTO, TrainerDashboardQB.GET_ACTIVE_INSTANCES, parameters); var allSessionsTask = _QueryExecutor.QueryAsync (loginDTO, TrainerDashboardQB.GET_ALL_SESSIONS, parameters); var sessionHistoryTask = _QueryExecutor.QueryAsync (loginDTO, TrainerDashboardQB.GET_SESSION_HISTORY, parameters); var attendanceSummaryTask = _QueryExecutor.QueryAsync (loginDTO, TrainerDashboardQB.GET_ATTENDANCE_SUMMARY, parameters); var ratingSummaryTask = _QueryExecutor.QuerySingleAsync (loginDTO, TrainerDashboardQB.GET_TRAINER_RATING_SUMMARY, parameters); var ratingsTask = _QueryExecutor.QueryAsync (loginDTO, TrainerDashboardQB.GET_TRAINER_RATINGS, parameters); await Task.WhenAll( summaryTask, todaySessionsTask, upcomingSessionsTask, activeInstancesTask, allSessionsTask, sessionHistoryTask, attendanceSummaryTask, ratingSummaryTask, ratingsTask); var dashboard = new TrainerFullDashboardDTO { Summary = summaryTask.Result, TodaySessions = todaySessionsTask.Result?.ToList(), UpcomingSessions = upcomingSessionsTask.Result?.ToList(), ActiveInstances = activeInstancesTask.Result?.ToList(), AllSessions = allSessionsTask.Result?.ToList(), SessionHistory = sessionHistoryTask.Result?.ToList(), AttendanceSummary = attendanceSummaryTask.Result?.ToList(), RatingSummary = ratingSummaryTask.Result, RatingResponses = ratingsTask.Result?.ToList() }; return JsonConvert.SerializeObject(dashboard); } catch (Exception) { throw; } } } }