using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using QuizplusApi.Models.Question;
using QuizplusApi.Models.Quiz;
using QuizplusApi.ViewModels.Helper;
using QuizplusApi.Models;
using QuizplusApi.ViewModels.UserLog;
using QuizplusApi.ViewModels.User;
namespace QuizplusApi.Controllers
{
[ApiController]
[Route("api/[controller]/[action]")]
public class DashboardController:ControllerBase
{
private readonly AppDbContext _context;
public DashboardController(AppDbContext context)
{
_context=context;
}
///
///Get running Quizes
///
[HttpGet("{email}")]
[Authorize(Roles="Student")]
public ActionResult GetRunningQuizes(string email)
{
try
{
List availableQuizes=new List();
List availableQuizesFilter=new List();
int? adminId=_context.Users.SingleOrDefault(q=>q.Email==email).AddedBy;
var quizes=_context.QuizTopics.Where(q=>q.IsRunning==true);
var listWithOutCustomInput= quizes.Where(q=>q.QuizParticipantOptionId==1 && q.AddedBy==adminId);
var customInputsList=quizes.Where(q=>q.QuizParticipantOptionId==2 && q.AddedBy==adminId &&
email==_context.QuizParticipants.SingleOrDefault(m=>m.Email==email && m.QuizTopicId==q.QuizTopicId).Email);
//check for all students
foreach(QuizTopic item in listWithOutCustomInput)
{
if(item.QuizscheduleStartTime==null && item.QuizscheduleEndTime==null)
{
availableQuizes.Add(item);
}
}
foreach(QuizTopic item in listWithOutCustomInput)
{
if(item.QuizscheduleStartTime!=null && item.QuizscheduleEndTime==null)
{
if(DateTime.UtcNow.Date>=item.QuizscheduleStartTime)
{
availableQuizes.Add(item);
}
}
}
foreach(QuizTopic item in listWithOutCustomInput)
{
if(item.QuizscheduleStartTime!=null && item.QuizscheduleEndTime!=null)
{
if(DateTime.UtcNow.Date>=item.QuizscheduleStartTime && DateTime.UtcNow.Date<=item.QuizscheduleEndTime)
{
availableQuizes.Add(item);
}
}
}
//check for custom inputs
foreach(QuizTopic item in customInputsList)
{
if(item.QuizscheduleStartTime==null && item.QuizscheduleEndTime==null)
{
availableQuizes.Add(item);
}
}
foreach(QuizTopic item in customInputsList)
{
if(item.QuizscheduleStartTime!=null && item.QuizscheduleEndTime==null)
{
if(DateTime.UtcNow.Date>=item.QuizscheduleStartTime)
{
availableQuizes.Add(item);
}
}
}
foreach(QuizTopic item in customInputsList)
{
if(item.QuizscheduleStartTime!=null && item.QuizscheduleEndTime!=null)
{
if(DateTime.UtcNow.Date>=item.QuizscheduleStartTime && DateTime.UtcNow.Date<=item.QuizscheduleEndTime)
{
availableQuizes.Add(item);
}
}
}
foreach(QuizTopic item in availableQuizes)
{
if(item.AllowMultipleAttempt==true)
{
availableQuizesFilter.Add(item);
}
else if(item.AllowMultipleAttempt==false)
{
int recordCount=_context.QuizResponseInitials.Where(q=>q.QuizTopicId==item.QuizTopicId && q.Email==email).Count();
if(recordCount==0)
{
availableQuizesFilter.Add(item);
}
}
}
var listWithQuestionCount=from q in availableQuizesFilter select new {q.QuizTopicId,q.QuizTitle,
q.QuizTime,q.QuizTotalMarks,q.QuizMarkOptionId,q.QuizParticipantOptionId,q.AllowMultipleInputByUser,
q.AllowMultipleAnswer,q.AllowMultipleAttempt,q.AllowCorrectOption,q.AllowQuizStop,q.AllowQuizSkip,q.QuizPassMarks,
q.AllowQuestionSuffle,q.QuizscheduleStartTime,q.QuizscheduleEndTime,q.IsRunning,q.QuizPrice,
PaymentCount=_context.QuizPayments.Where(m=>m.Email==email && m.QuizTopicId==q.QuizTopicId).Count(),
QuestionsCount=_context.QuizQuestions.Where(m=>m.QuizTopicId==q.QuizTopicId).Count()};
return Ok(listWithQuestionCount);
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
///
///Get overall status
///
[HttpGet("{userId}")]
[AllowAnonymous]
public ActionResult GetStatus(int userId)
{
try
{
var objUser=_context.Users.Where(e=>e.UserId==userId).FirstOrDefault();
int totalStudents=0,totalQuizes=0,liveQuizes=0,totalQuestions=0;
if(objUser.UserRoleId==3)
{
totalStudents=_context.Users.Where(q=>q.UserRoleId==1).Count();
totalQuizes=_context.QuizTopics.Count();
liveQuizes=_context.QuizTopics.Where(q=>q.IsRunning==true).Count();
totalQuestions=_context.QuizQuestions.Count();
}
else if(objUser.UserRoleId==1)
{
totalStudents=_context.Users.Where(q=>q.UserRoleId==2 && q.AddedBy==userId).Count();
totalQuizes=_context.QuizTopics.Where(q=>q.AddedBy==userId).Count();
liveQuizes=_context.QuizTopics.Where(q=>q.IsRunning==true && q.AddedBy==userId).Count();
totalQuestions=_context.QuizQuestions.Where(q=>q.AddedBy==userId).Count();
}
return Ok(new Status{TotalStudents=totalStudents,TotalQuizes=totalQuizes,LiveQuizes=liveQuizes,TotalQuestions=totalQuestions});
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
///
///Get date wise payment summary
///
[Authorize(Roles="SuperAdmin,Admin")]
[HttpGet("{id}")]
public ActionResult GetPaymentSummaryByDate(int id)
{
try
{
var objUser=_context.Users.Where(e=>e.UserId==id).FirstOrDefault();
if(objUser.UserRoleId==3)
{
var list=_context.BillingPayments.Where(q=>q.Price>0).GroupBy(e=>e.DateAdded.Date).OrderByDescending(e=>e.Key).Take(10)
.Select(e => new{ e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Date=s.Key,Count=s.Count});
return Ok(userList);
}
else
{
var list=_context.QuizPayments.Where(q=>q.AdminId==id).GroupBy(e=>e.DateAdded.Date).OrderByDescending(e=>e.Key).Take(10)
.Select(e => new{ e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Date=s.Key,Count=s.Count});
return Ok(userList);
}
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
///
///Get date wise Login summary
///
[AllowAnonymous]
[HttpGet("{id}")]
public ActionResult GetLogInSummaryByDate(int id)
{
try
{
var objUser=_context.Users.Where(e=>e.UserId==id).FirstOrDefault();
if(objUser.UserRoleId==1)
{
var list=_context.LogHistories.Where(q=>q.AdminId==id).GroupBy(e=>e.LogInTime.Date).OrderByDescending(e=>e.Key).Take(10)
.Select(e => new{ e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Date=s.Key,Count=s.Count});
return Ok(userList);
}
else if(objUser.UserRoleId==3)
{
var list=_context.LogHistories.GroupBy(e=>e.LogInTime.Date).OrderByDescending(e=>e.Key).Take(10)
.Select(e => new{ e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Date=s.Key,Count=s.Count});
return Ok(userList);
}
else
{
var list=_context.LogHistories.Where(e=>e.UserId==id).GroupBy(e=>e.LogInTime.Date).OrderByDescending(e=>e.Key).Take(10)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Date=s.Key,Count=s.Count});
return Ok(userList);
}
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
///
///Get month wise Login summary
///
[AllowAnonymous]
[HttpGet("{id}")]
public ActionResult GetLogInSummaryByMonth(int id)
{
try
{
var objUser=_context.Users.Where(e=>e.UserId==id).FirstOrDefault();
if(objUser.UserRoleId==1)
{
var list=_context.LogHistories.Where(q=>q.LogInTime.Year==DateTime.Now.Year && q.AdminId==id).GroupBy(e=>e.LogInTime.Month)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Month=MonthName.ReturnMonthName(s.Key),Count=s.Count});
return Ok(userList);
}
else if(objUser.UserRoleId==3)
{
var list=_context.LogHistories.Where(q=>q.LogInTime.Year==DateTime.Now.Year).GroupBy(e=>e.LogInTime.Month)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Month=MonthName.ReturnMonthName(s.Key),Count=s.Count});
return Ok(userList);
}
else
{
var list=_context.LogHistories.Where(e=>e.UserId==id).GroupBy(e=>e.LogInTime.Month)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Month=MonthName.ReturnMonthName(s.Key),Count=s.Count});
return Ok(userList);
}
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
///
///Get Browser Login summary
///
[AllowAnonymous]
[HttpGet("{id}")]
public ActionResult GetBrowserCount(int id)
{
try
{
var objUser=_context.Users.Where(e=>e.UserId==id).FirstOrDefault();
if(objUser.UserRoleId==1)
{
var list=_context.LogHistories.Where(e=>e.Browser!=null && e.AdminId==id).GroupBy(e=>e.Browser)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Browser=s.Key,Count=s.Count});
return Ok(userList);
}
else if(objUser.UserRoleId==3)
{
var list=_context.LogHistories.Where(e=>e.Browser!=null).GroupBy(e=>e.Browser)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Browser=s.Key,Count=s.Count});
return Ok(userList);
}
else
{
var list=_context.LogHistories.Where(e=>e.UserId==id && e.Browser!=null).GroupBy(e=>e.Browser)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Browser=s.Key,Count=s.Count});
return Ok(userList);
}
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
///
///Get Platform Login summary
///
[AllowAnonymous]
[HttpGet("{id}")]
public ActionResult GetPlatformCount(int id)
{
try
{
var objUser=_context.Users.Where(e=>e.UserId==id).FirstOrDefault();
if(objUser.UserRoleId==1)
{
var list=_context.LogHistories.Where(e=>e.Platform!=null && e.AdminId==id).GroupBy(e=>e.Platform)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Platform=s.Key,Count=s.Count});
return Ok(userList);
}
else if(objUser.UserRoleId==3)
{
var list=_context.LogHistories.Where(e=>e.Platform!=null).GroupBy(e=>e.Platform)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Platform=s.Key,Count=s.Count});
return Ok(userList);
}
else
{
var list=_context.LogHistories.Where(e=>e.UserId==id && e.Platform!=null).GroupBy(e=>e.Platform)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Platform=s.Key,Count=s.Count});
return Ok(userList);
}
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
///
///Get date wise Quiz Attendance count
///
[AllowAnonymous]
[HttpGet("{id}")]
public ActionResult GetQuizCountByDate(int id)
{
try
{
var objUser=_context.Users.Where(e=>e.UserId==id).FirstOrDefault();
if(objUser.UserRoleId==1)
{
var list=_context.QuizResponseInitials.Join(_context.Users,
initial=>initial.UserId,
user=>user.UserId,
(initial,user)=>new{
DateAdded=initial.DateAdded,
AddedBy=user.AddedBy
}).Where(q=>q.AddedBy==id).GroupBy(e=>e.DateAdded.Date).OrderByDescending(e=>e.Key).Take(10)
.Select(e => new{ e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Date=s.Key,Count=s.Count});
return Ok(userList);
}
else if(objUser.UserRoleId==3)
{
var list=_context.QuizResponseInitials.Join(_context.Users,
initial=>initial.UserId,
user=>user.UserId,
(initial,user)=>new{
DateAdded=initial.DateAdded,
AddedBy=user.AddedBy
}).GroupBy(e=>e.DateAdded.Date).OrderByDescending(e=>e.Key).Take(10)
.Select(e => new{ e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Date=s.Key,Count=s.Count});
return Ok(userList);
}
else
{
var list=_context.QuizResponseInitials.Where(e=>e.UserId==id).GroupBy(e=>e.DateAdded.Date).OrderByDescending(e=>e.Key).Take(10)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{Date=s.Key,Count=s.Count});
return Ok(userList);
}
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
///
///Get Quiz wise user attendance count
///
[AllowAnonymous]
[HttpGet("{id}")]
public ActionResult GetUserCountByQuiz(int id)
{
try
{
var objUser=_context.Users.Where(e=>e.UserId==id).FirstOrDefault();
if(objUser.UserRoleId==1)
{
var list=_context.QuizResponseInitials.Join(_context.Users,
initial=>initial.UserId,
user=>user.UserId,
(initial,user)=>new{
QuizTitle=initial.QuizTitle,
AddedBy=user.AddedBy
}).Where(q=>q.AddedBy==id).GroupBy(e=>e.QuizTitle)
.Select(e => new{ e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{QuizTitle=s.Key,Count=s.Count});
return Ok(userList);
}
else if(objUser.UserRoleId==3)
{
var list=_context.QuizResponseInitials.Join(_context.Users,
initial=>initial.UserId,
user=>user.UserId,
(initial,user)=>new{
QuizTitle=initial.QuizTitle,
AddedBy=user.AddedBy
}).GroupBy(e=>e.QuizTitle)
.Select(e => new{ e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{QuizTitle=s.Key,Count=s.Count});
return Ok(userList);
}
else
{
var list=_context.QuizResponseInitials.Where(e=>e.UserId==id).GroupBy(e=>e.QuizTitle)
.Select(e => new { e.Key, Count = e.Count() });
var userList=list.Select(s=>new UserLog{QuizTitle=s.Key,Count=s.Count});
return Ok(userList);
}
}
catch (Exception ex)
{
return Accepted(new Confirmation { Status = "error", ResponseMsg = ex.Message });
}
}
}
}