using System; using System.Collections.Generic; using System.Linq; using Portoa.Persistence; using VideoGameQuotes.Api; namespace VideoGameQuotes.Web.Services { public interface ISystemService { IEnumerable FindByNameOrAbbreviation(string name, string abbreviation); GamingSystem Save(GamingSystem system); GamingSystem FindById(int id); void Delete(int id); IEnumerable GetGamesForSystem(GamingSystem system); } public class SystemService : ISystemService { private readonly IRepository repository; private readonly IRepository gameRepository; public SystemService(IRepository repository, IRepository gameRepository) { this.repository = repository; this.gameRepository = gameRepository; } [UnitOfWork] public IEnumerable FindByNameOrAbbreviation(string name, string abbreviation) { return repository .Records .Where(system => system.Abbreviation == abbreviation || system.Name == name); } [UnitOfWork] public GamingSystem Save(GamingSystem system) { return repository.Save(system); } [UnitOfWork] public GamingSystem FindById(int id) { return repository.FindById(id); } [UnitOfWork] public void Delete(int id) { repository.Delete(id); } public IEnumerable GetGamesForSystem(GamingSystem system) { return gameRepository .Records .Where(game => game.Systems.Contains(system)); } } }