using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Tango.BLL.Objects; using Tango.DAL; using Tango.DAL.Entities; using System.Linq; using Tango.BLL.Mappers; namespace Tango.BLL.Services { public class OrganizationsService : ServiceBase { private IRepository _organizationsRepository; private IRepository _machinesRepository; private OrganizationToOrganizationEntityMapper _mapper; public OrganizationsService(IRepository organizationsRepository, IRepository machinesRepository) { _organizationsRepository = organizationsRepository; _machinesRepository = machinesRepository; _mapper = new OrganizationToOrganizationEntityMapper(); } public async Task> GetAllOrganizations() { var entities = await _organizationsRepository.GetAllAsync(); var organizations = entities.Select(x => _mapper.Create(x)).ToList(); return organizations; } public async Task DeleteAllOrganizations() { var orgs = await GetAllOrganizations(); long count = 0; foreach (var org in orgs) { count += await DeleteOrganizationByID(org.ID); } return count; } public async Task AddOrganization(Organization organization) { OrganizationEntity entity = _mapper.Create(organization); entity = await _organizationsRepository.Insert(entity); _mapper.Map(entity, organization); return organization; } public async Task GetOrganizationByID(String id) { var entity = (await _organizationsRepository.GetAsync(x => x.ID == id)).ToList().SingleOrDefault(); if (entity == null) { throw new KeyNotFoundException($"Could not find organization with id {id}."); } return _mapper.Create(entity); } public async Task DeleteOrganizationByID(String id) { await _machinesRepository.DeleteAsync(x => x.OrganizationID == id); long count = await _organizationsRepository.DeleteAsync(x => x.ID == id); return count; } public async Task Count() { return await _organizationsRepository.Count(); } } }