feat: add Dashboard service with manager summary statistics

This commit is contained in:
2026-06-09 01:30:19 +03:30
parent c38f2de9c4
commit f101085b52
2 changed files with 96 additions and 0 deletions

View File

@@ -0,0 +1,68 @@
using Complex.Application;
using Complex.Common.Dto;
using Complex.Domain.Entities;
using Microsoft.EntityFrameworkCore;
namespace Complex.Application.Services.Dashboard
{
public interface IDashboardService
{
ResultDto<DashboardSummaryDto> GetManagerSummary(Guid complexId);
}
public class DashboardService : IDashboardService
{
private readonly IComplexDBContext _complexDBContext;
public DashboardService(IComplexDBContext complexDBContext)
{
_complexDBContext = complexDBContext;
}
public ResultDto<DashboardSummaryDto> GetManagerSummary(Guid complexId)
{
var units = _complexDBContext.Units.Where(u => u.ComplexId == complexId);
var totalUnits = units.Count();
var ownerUnits = units.Count(u => u.OwnerId != null);
var tenantUnits = units.Count(u => u.TenantId != null);
var activeCostCycles = _complexDBContext.CostCycles
.Count(c => c.ComplexId == complexId && c.EndDate >= DateOnly.FromDateTime(DateTime.Now));
var unitPersonMobileNumbers = units
.Where(u => u.OwnerId != null || u.TenantId != null)
.Select(u => u.OwnerId)
.Union(units.Where(u => u.TenantId != null).Select(u => u.TenantId))
.Distinct()
.ToList();
var totalPersons = _complexDBContext.Persons
.Count(p => unitPersonMobileNumbers.Contains(p.Id));
var result = new DashboardSummaryDto
{
TotalUnits = totalUnits,
OwnerUnits = ownerUnits,
TenantUnits = tenantUnits,
ActiveCostCycles = activeCostCycles,
TotalPersons = totalPersons
};
return new ResultDto<DashboardSummaryDto>
{
Data = result,
IsSuccess = true
};
}
}
public class DashboardSummaryDto
{
public int TotalUnits { get; set; }
public int OwnerUnits { get; set; }
public int TenantUnits { get; set; }
public int ActiveCostCycles { get; set; }
public int TotalPersons { get; set; }
}
}

View File

@@ -0,0 +1,28 @@
using Complex.Application.Services.Dashboard;
using Complex.Common.Dto;
using Complex.EndPoint.Utility;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Complex.EndPoint.Controllers
{
[ApiController]
[ApiVersion("1")]
[Route("api/v{version:apiVersion}/[controller]/[action]")]
[Authorize]
public class DashboardController : Controller
{
private readonly IDashboardService _dashboardService;
public DashboardController(IDashboardService dashboardService)
{
_dashboardService = dashboardService;
}
[HttpGet]
public ResultDto<DashboardSummaryDto> ManagerSummary(Guid complexId)
{
return _dashboardService.GetManagerSummary(complexId);
}
}
}