Files
helpdesk/backend/HelpDesk.API/Controllers/DashboardController.cs
T

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
});
}
}