68 lines
2.8 KiB
C#
68 lines
2.8 KiB
C#
using System.Security.Claims;
|
|
using HelpDesk.Data.Repositories;
|
|
using HelpDesk.Models.DTOs;
|
|
using HelpDesk.Models.Entities;
|
|
using HelpDesk.Models.Enums;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace HelpDesk.API.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
[Authorize(Policy = "Agent")]
|
|
public class DashboardController : ControllerBase
|
|
{
|
|
private readonly ITicketRepository _ticketRepository;
|
|
private readonly IUserRepository _userRepository;
|
|
|
|
public DashboardController(ITicketRepository ticketRepository, IUserRepository userRepository)
|
|
{
|
|
_ticketRepository = ticketRepository;
|
|
_userRepository = userRepository;
|
|
}
|
|
|
|
[HttpGet("stats")]
|
|
public async Task<ActionResult<DashboardStatsDto>> GetStats()
|
|
{
|
|
var agents = await _userRepository.GetByRoleAsync(UserRole.Agent);
|
|
var agentWorkloads = new List<AgentWorkloadDto>();
|
|
|
|
foreach (var agent in agents)
|
|
{
|
|
var activeTickets = await _ticketRepository.GetCountAsync(
|
|
assigneeId: agent.Id,
|
|
status: TicketStatus.Open);
|
|
|
|
var inProgressTickets = await _ticketRepository.GetCountAsync(
|
|
assigneeId: agent.Id,
|
|
status: TicketStatus.InProgress);
|
|
|
|
agentWorkloads.Add(new AgentWorkloadDto
|
|
{
|
|
UserId = agent.Id,
|
|
UserName = $"{agent.FirstName} {agent.LastName}",
|
|
ActiveTickets = activeTickets + inProgressTickets,
|
|
ResolvedThisWeek = 0
|
|
});
|
|
}
|
|
|
|
return Ok(new DashboardStatsDto
|
|
{
|
|
TotalTickets = await _ticketRepository.GetTotalCountAsync(),
|
|
OpenTickets = await _ticketRepository.GetCountByStatusAsync(TicketStatus.Open),
|
|
InProgressTickets = await _ticketRepository.GetCountByStatusAsync(TicketStatus.InProgress),
|
|
PendingTickets = await _ticketRepository.GetCountByStatusAsync(TicketStatus.Pending),
|
|
ResolvedTickets = await _ticketRepository.GetCountByStatusAsync(TicketStatus.Resolved),
|
|
ClosedTickets = await _ticketRepository.GetCountByStatusAsync(TicketStatus.Closed),
|
|
CriticalTickets = await _ticketRepository.GetCountByPriorityAsync(TicketPriority.Critical),
|
|
HighTickets = await _ticketRepository.GetCountByPriorityAsync(TicketPriority.High),
|
|
MediumTickets = await _ticketRepository.GetCountByPriorityAsync(TicketPriority.Medium),
|
|
LowTickets = await _ticketRepository.GetCountByPriorityAsync(TicketPriority.Low),
|
|
AverageResponseTimeMinutes = await _ticketRepository.GetAverageResponseTimeAsync(),
|
|
AverageResolutionTimeMinutes = await _ticketRepository.GetAverageResolutionTimeAsync(),
|
|
AgentWorkloads = agentWorkloads
|
|
});
|
|
}
|
|
}
|