using System; using System.Collections.Generic; using System.Threading.Tasks; using Gestor.Application.Helpers; using Gestor.Application.Servicos.Generic; using Gestor.Common.Helpers; using Gestor.Infrastructure.UnitOfWork.Generic; using Gestor.Infrastructure.UnitOfWork.Logic; using Gestor.Model.API; using Gestor.Model.Common; using Gestor.Model.Domain.Common; using Gestor.Model.Domain.Ferramentas; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.Seguros; namespace Gestor.Application.Servicos.Ferramentas; internal class EmailServico : BaseServico { public async Task Save(Credencial credencial) { int tries = 3; base.Sucesso = true; Credencial credencialOriginal = credencial; return await Task.Run((Func)delegate { List list = new List(); credencial = credencialOriginal; while (tries > 0) { credencial = credencialOriginal; try { UnitOfWork commited = Instancia.Commited; try { bool num = ((DomainBase)credencial).Id != 0L; credencial.Senha = EncryptionHelper.Encrypt(credencial.Senha); if (num) { list.Add(CreateLog(((DomainBase)credencial).Id, credencial, (TipoTela)17)); } credencial = ((((DomainBase)credencial).Id == 0L) ? commited.CredencialRepository.SaveOrUpdate(credencial) : commited.CredencialRepository.Merge(credencial)); if (!num) { list.Add(CreateLog(((DomainBase)credencial).Id, ((DomainBase)credencial).GetValorOriginal(), (TipoTela)17, (TipoAcao)0)); } SaveLog(list, commited); ((GenericUnitOfWork)commited).Commit(); return credencial; } finally { ((IDisposable)commited)?.Dispose(); } } catch (Exception e) { tries = Registrar(e, (TipoErro)217, tries, credencial); } } return credencialOriginal; }); } public async Task Delete(Credencial email) { int tries = 3; return await Task.Run(delegate { while (tries > 0) { List list = new List(); try { UnitOfWork commited = Instancia.Commited; try { list.Add(CreateLog(((DomainBase)email).Id, ((DomainBase)email).GetValorOriginal(), (TipoTela)17, (TipoAcao)2)); commited.CredencialRepository.Delete(((DomainBase)email).Id); SaveLog(list, commited); ((GenericUnitOfWork)commited).Commit(); return true; } finally { ((IDisposable)commited)?.Dispose(); } } catch (Exception e) { tries = Registrar(e, (TipoErro)218, tries, email); } } return false; }); } internal async Task> BuscarEmail(string email) { int tries = 3; return await Task.Run(delegate { while (tries > 0) { try { UnitOfWork read = Instancia.Read; try { return read.ClienteEmailRepository.FindEmailCliente(email, (Recursos.Usuario.IdEmpresa == 1) ? 0 : Recursos.Usuario.IdEmpresa); } finally { ((IDisposable)read)?.Dispose(); } } catch (Exception e) { tries = Registrar(e, (TipoErro)109, tries, email); } } return new List(); }); } }