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> 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 { 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 { new() { Nome = "Faturamento", TotalGeral = totalClientes, TotalAtual = billingClientes } } }; return Ok(report); } }