Initial commit: HelpDesk ICHN - .NET 10 backend + Next.js 16 frontend
This commit is contained in:
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
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user