Initial commit: HelpDesk ICHN - .NET 10 backend + Next.js 16 frontend

This commit is contained in:
Nurfog committed 2026-09-10 10:20:51 -03:00
commit 359f0caf85
90 files changed
+13395

No files matched your search

@@ -0,0 +1,67 @@
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
});
}
}