97 lines
2.8 KiB
C#
97 lines
2.8 KiB
C#
using line_gestao_api.Data;
|
|
using line_gestao_api.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace line_gestao_api.Services;
|
|
|
|
public class DataConsistencyService : IDataConsistencyService
|
|
{
|
|
private readonly AppDbContext _db;
|
|
|
|
public DataConsistencyService(AppDbContext db)
|
|
{
|
|
_db = db;
|
|
}
|
|
|
|
public async Task SyncFromMobileLineAsync(MobileLine line, CancellationToken cancellationToken = default)
|
|
{
|
|
await ApplyMobileLineToSatellitesAsync(line, cancellationToken);
|
|
await _db.SaveChangesAsync(cancellationToken);
|
|
}
|
|
|
|
public async Task SyncFromTrocaNumeroAsync(TrocaNumeroLine trocaNumero, CancellationToken cancellationToken = default)
|
|
{
|
|
var linhaAntiga = OnlyDigits(trocaNumero.LinhaAntiga);
|
|
if (string.IsNullOrWhiteSpace(linhaAntiga))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var mobile = await _db.MobileLines
|
|
.FirstOrDefaultAsync(x => x.Linha != null && OnlyDigits(x.Linha) == linhaAntiga, cancellationToken);
|
|
|
|
if (mobile == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var linhaNova = OnlyDigits(trocaNumero.LinhaNova);
|
|
if (!string.IsNullOrWhiteSpace(linhaNova))
|
|
{
|
|
mobile.Linha = linhaNova;
|
|
}
|
|
|
|
var iccid = OnlyDigits(trocaNumero.ICCID);
|
|
if (!string.IsNullOrWhiteSpace(iccid))
|
|
{
|
|
mobile.Chip = iccid;
|
|
}
|
|
|
|
mobile.UpdatedAt = DateTime.UtcNow;
|
|
await _db.SaveChangesAsync(cancellationToken);
|
|
await ApplyMobileLineToSatellitesAsync(mobile, cancellationToken);
|
|
await _db.SaveChangesAsync(cancellationToken);
|
|
}
|
|
|
|
private static string OnlyDigits(string? value)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(value))
|
|
{
|
|
return string.Empty;
|
|
}
|
|
|
|
var chars = value.Where(char.IsDigit).ToArray();
|
|
return new string(chars);
|
|
}
|
|
|
|
private async Task ApplyMobileLineToSatellitesAsync(MobileLine line, CancellationToken cancellationToken)
|
|
{
|
|
var item = line.Item;
|
|
|
|
var vigencias = await _db.VigenciaLines
|
|
.Where(x => x.Item == item)
|
|
.ToListAsync(cancellationToken);
|
|
|
|
foreach (var vigencia in vigencias)
|
|
{
|
|
vigencia.Conta = line.Conta;
|
|
vigencia.Linha = line.Linha;
|
|
vigencia.Cliente = line.Cliente;
|
|
vigencia.Usuario = line.Usuario;
|
|
vigencia.PlanoContrato = line.PlanoContrato;
|
|
vigencia.UpdatedAt = DateTime.UtcNow;
|
|
}
|
|
|
|
var userDatas = await _db.UserDatas
|
|
.Where(x => x.Item == item)
|
|
.ToListAsync(cancellationToken);
|
|
|
|
foreach (var userData in userDatas)
|
|
{
|
|
userData.Linha = line.Linha;
|
|
userData.Cliente = line.Cliente;
|
|
userData.UpdatedAt = DateTime.UtcNow;
|
|
}
|
|
}
|
|
}
|