using AutoMapper; using Gestor.Infrastructure.Entities.Ferramentas; using Gestor.Infrastructure.Entities.Generic; using Gestor.Infrastructure.Mappers; using Gestor.Infrastructure.Repository.Generic; using Gestor.Infrastructure.Repository.Interface; using Gestor.Infrastructure.UnitOfWork.Generic; using Gestor.Model.Domain.Ferramentas; using Gestor.Model.Domain.Generic; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; namespace Gestor.Infrastructure.Repository.Logic { public class AgendaTelefoneRepository : GenericRepository, IAgendaTelefoneRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public AgendaTelefoneRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public void Delete(long id) { base.Delete(base.FindEntityById(id)); } public void DeleteRange(long id) { IQueryable agendaTelefoneDbs = from x in base.All() where x.Agenda.Id == id select x; if (!agendaTelefoneDbs.Any()) { return; } base.DeleteRange(agendaTelefoneDbs); } public List Find(string telefone) { List list = ( from x in base.All() where x.Numero.Contains(telefone) select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } private List FindByAgenda(long id) { return ( from x in base.All() where x.Agenda.Id == id select new AgendaTelefone() { Id = x.Id, Agenda = ApplicationMapper.Mapper.Map(x.Agenda), Prefixo = x.Prefixo, Numero = x.Numero, Tipo = x.Tipo, Observacao = x.Observacao }).ToList(); } public List FindByAgendaId(long id) { return this.FindByAgenda(id); } public AgendaTelefone FindById(long id) { AgendaTelefoneDb agendaTelefoneDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(agendaTelefoneDb); } public List Inserir(List telefones) { List agendaTelefoneDbs = ApplicationMapper.Mapper.Map, List>(telefones); agendaTelefoneDbs.ForEach((AgendaTelefoneDb x) => { if (x.Id == 0) { this.SaveOrUpdate(x); return; } base.Merge(x); }); return ApplicationMapper.Mapper.Map, List>(agendaTelefoneDbs); } public List Inserir(List telefones, Agenda agenda) { telefones.ForEach((AgendaTelefone x) => x.Agenda = agenda); List agendaTelefoneDbs = ApplicationMapper.Mapper.Map, List>(telefones); base.AddRange(agendaTelefoneDbs); return ApplicationMapper.Mapper.Map, List>(agendaTelefoneDbs); } public AgendaTelefone Merge(AgendaTelefone telefone) { AgendaTelefoneDb agendaTelefoneDb = ApplicationMapper.Mapper.Map(telefone); base.Merge(agendaTelefoneDb); return ApplicationMapper.Mapper.Map(agendaTelefoneDb); } public List Merge(List telefones, Agenda agenda) { IQueryable agendaTelefoneDbs = from x in base.All() where x.Agenda.Id == agenda.Id select x; AgendaTelefoneRepository agendaTelefoneRepository = this; ( from x in agendaTelefoneDbs select x.Id).ToList().Where((long x) => { List agendaTelefones = telefones; Func u003cu003e9_114 = AgendaTelefoneRepository.u003cu003ec.u003cu003e9__11_4; if (u003cu003e9_114 == null) { u003cu003e9_114 = (AgendaTelefone t) => t.Id; AgendaTelefoneRepository.u003cu003ec.u003cu003e9__11_4 = u003cu003e9_114; } return !agendaTelefones.Select(u003cu003e9_114).Contains(x); }).ToList().ForEach(new Action(agendaTelefoneRepository.Delete)); List agendaTelefoneDbs1 = ApplicationMapper.Mapper.Map, List>(telefones); agendaTelefoneDbs1.ForEach((AgendaTelefoneDb x) => { if (x.Id != 0) { base.Merge(x); return; } x.Agenda = ApplicationMapper.Mapper.Map(agenda); this.SaveOrUpdate(x); }); return ApplicationMapper.Mapper.Map, List>(agendaTelefoneDbs1); } public AgendaTelefone SaveOrUpdate(AgendaTelefone telefone) { AgendaTelefoneDb agendaTelefoneDb = ApplicationMapper.Mapper.Map(telefone); this.SaveOrUpdate(agendaTelefoneDb); return ApplicationMapper.Mapper.Map(agendaTelefoneDb); } } }