using System; using System.Collections.Generic; using skydiveLogs_api.DomainBusiness.Interfaces; using skydiveLogs_api.DomainService.Repositories; using skydiveLogs_api.Domain; using System.Linq; namespace skydiveLogs_api.DomainBusiness { public class DropZoneService : IDropZoneService { public DropZoneService(IDropZoneRepository dropZoneRepository, IFavoriteDropZoneRepository favoriteDropZoneRepository) { _dropZoneRepository = dropZoneRepository; _favoriteDropZoneRepository = favoriteDropZoneRepository; } public void AddNewDz(DropZone newdropZone) { _dropZoneRepository.Add(newdropZone); } public void DeleteDzById(int id) { throw new NotImplementedException(); } public IEnumerable GetAllDzs(User connectedUser) { var results = Enumerable.Empty(); var dropzones = _dropZoneRepository.GetAll(); var favorites = _favoriteDropZoneRepository.GetAll(connectedUser); results = from dropZone in dropzones join favorite in favorites on dropZone equals favorite.DropZone into tmp from favoriteDz in tmp.DefaultIfEmpty() select new DropZone { Id = dropZone.Id, Address = dropZone.Address, Email = dropZone.Email, Latitude = dropZone.Latitude, Longitude = dropZone.Longitude, Name = dropZone.Name, Type = dropZone.Type, Website = dropZone.Website, IsFavorite = !(favoriteDz == null) }; return results.ToList(); } public DropZone GetDzById(int id) { return _dropZoneRepository.GetById(id); } public bool UpdateDz(int id, DropZone dropZone) { dropZone.Id = id; return _dropZoneRepository.Update(dropZone); } public bool AddToFavorite(int dzId, User connectedUser) { var dzToAddToFavorite = GetDzById(dzId); var favoriteDz = new FavoriteDropZone { DropZone = dzToAddToFavorite, User = connectedUser }; var result = _favoriteDropZoneRepository.Add(favoriteDz); return result > 0; } public bool RemoveToFavorite(int dzId, User connectedUser) { var result = _favoriteDropZoneRepository.Delete(dzId, connectedUser.Id); return result > 0; } private readonly IDropZoneRepository _dropZoneRepository; private readonly IFavoriteDropZoneRepository _favoriteDropZoneRepository; } }