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 AgendaEmailRepository : GenericRepository, IAgendaEmailRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public AgendaEmailRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public void Delete(long id) { base.Delete(base.FindEntityById(id)); } public void DeleteRange(long id) { IQueryable agendaEmailDbs = from x in base.All() where x.Agenda.Id == id select x; if (!agendaEmailDbs.Any()) { return; } base.DeleteRange(agendaEmailDbs); } private List FindByAgenda(long id) { List list = ( from x in base.All() where x.Agenda.Id == id select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } public List FindByAgenda(List ids) { List list = ( from x in base.All() where ids.Contains(x.Agenda.Id) select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } public List FindByAgendaId(long id) { return this.FindByAgenda(id); } public AgendaEmail FindById(long id) { AgendaEmailDb agendaEmailDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(agendaEmailDb); } public List FindEmailAgenda(string email) { List list = ( from x in base.All() where x.Email.Contains(email) select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } public List Inserir(List emails, Agenda agenda) { emails.ForEach((AgendaEmail x) => x.Agenda = agenda); List agendaEmailDbs = ApplicationMapper.Mapper.Map, List>(emails); base.AddRange(agendaEmailDbs); return ApplicationMapper.Mapper.Map, List>(agendaEmailDbs); } public List Inserir(List emails) { List agendaEmailDbs = ApplicationMapper.Mapper.Map, List>(emails); agendaEmailDbs.ForEach((AgendaEmailDb x) => { if (x.Id == 0) { this.SaveOrUpdate(x); return; } base.Merge(x); }); return ApplicationMapper.Mapper.Map, List>(agendaEmailDbs); } public AgendaEmail Merge(AgendaEmail agendaEmail) { AgendaEmailDb agendaEmailDb = ApplicationMapper.Mapper.Map(agendaEmail); base.Merge(agendaEmailDb); return ApplicationMapper.Mapper.Map(agendaEmailDb); } public List Merge(List emails, Agenda agenda) { IQueryable agendaEmailDbs = from x in base.All() where x.Agenda.Id == agenda.Id select x; AgendaEmailRepository agendaEmailRepository = this; ( from x in agendaEmailDbs select x.Id).ToList().Where((long x) => { List agendaEmails = emails; Func u003cu003e9_114 = AgendaEmailRepository.u003cu003ec.u003cu003e9__11_4; if (u003cu003e9_114 == null) { u003cu003e9_114 = (AgendaEmail t) => t.Id; AgendaEmailRepository.u003cu003ec.u003cu003e9__11_4 = u003cu003e9_114; } return !agendaEmails.Select(u003cu003e9_114).Contains(x); }).ToList().ForEach(new Action(agendaEmailRepository.Delete)); List agendaEmailDbs1 = ApplicationMapper.Mapper.Map, List>(emails); agendaEmailDbs1.ForEach((AgendaEmailDb x) => { if (x.Id != 0) { base.Merge(x); return; } x.Agenda = ApplicationMapper.Mapper.Map(agenda); this.SaveOrUpdate(x); }); return ApplicationMapper.Mapper.Map, List>(agendaEmailDbs1); } public AgendaEmail SaveOrUpdate(AgendaEmail agendaEmail) { AgendaEmailDb agendaEmailDb = ApplicationMapper.Mapper.Map(agendaEmail); this.SaveOrUpdate(agendaEmailDb); return ApplicationMapper.Mapper.Map(agendaEmailDb); } } }