line-gestao-api/Controllers/ConsistencyController.cs

102 lines
2.9 KiB
C#

using line_gestao_api.Data;
using line_gestao_api.Dtos;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace line_gestao_api.Controllers;
[ApiController]
[Route("api/consistency")]
[Authorize(Roles = "admin")]
public class ConsistencyController : ControllerBase
{
private readonly AppDbContext _db;
public ConsistencyController(AppDbContext db)
{
_db = db;
}
[HttpGet("gaps")]
public async Task<ActionResult<ConsistencyReportDto>> GetGaps()
{
var totalLinhas = await _db.MobileLines.AsNoTracking().CountAsync();
var totalClientes = await _db.MobileLines.AsNoTracking()
.Where(x => x.Cliente != null && x.Cliente != "")
.Select(x => x.Cliente!)
.Distinct()
.CountAsync();
var muregLinhas = await _db.MuregLines.AsNoTracking()
.Select(x => x.MobileLineId)
.Distinct()
.CountAsync();
var trocaLinhas = await _db.TrocaNumeroLines.AsNoTracking()
.Select(x => x.Item)
.Distinct()
.CountAsync();
var userDataLinhas = await _db.UserDatas.AsNoTracking()
.Select(x => x.Item)
.Distinct()
.CountAsync();
var vigenciaLinhas = await _db.VigenciaLines.AsNoTracking()
.Select(x => x.Item)
.Distinct()
.CountAsync();
var billingClientes = await _db.BillingClients.AsNoTracking()
.Where(x => x.Cliente != null && x.Cliente != "")
.Select(x => x.Cliente)
.Distinct()
.CountAsync();
var report = new ConsistencyReportDto
{
TotalLinhasGeral = totalLinhas,
TotalClientesGeral = totalClientes,
LinhasPorAba = new List<ConsistencyGapDto>
{
new()
{
Nome = "Mureg",
TotalGeral = totalLinhas,
TotalAtual = muregLinhas
},
new()
{
Nome = "TrocaNumero",
TotalGeral = totalLinhas,
TotalAtual = trocaLinhas
},
new()
{
Nome = "UserData",
TotalGeral = totalLinhas,
TotalAtual = userDataLinhas
},
new()
{
Nome = "Vigencia",
TotalGeral = totalLinhas,
TotalAtual = vigenciaLinhas
}
},
ClientesPorAba = new List<ConsistencyGapDto>
{
new()
{
Nome = "Faturamento",
TotalGeral = totalClientes,
TotalAtual = billingClientes
}
}
};
return Ok(report);
}
}