using System; using System.Collections.Generic; using System.Linq; using Portoa.Persistence; using VideoGameQuotes.Api; namespace VideoGameQuotes.Web.Services { public interface IQuoteService { Game GetGame(int id); IEnumerable GetAllGames(); IEnumerable GetAllSystems(); IEnumerable GetAllPublishers(); IEnumerable GetAllCategories(); Quote SaveQuote(Quote quote); Quote GetQuote(int id); Publisher GetPublisher(int id); GamingSystem GetSystem(int systemId); Category GetCategory(int categoryId); Category SaveCategory(Category category); IEnumerable GetMostRecentQuotes(int limit); } public class QuoteService : IQuoteService { private readonly IRepository quoteRepository; private readonly IRepository gameRepository; private readonly IRepository systemRepository; private readonly IRepository publisherRepository; private readonly IRepository categoryRepository; public QuoteService( IRepository quoteRepository, IRepository gameRepository, IRepository systemRepository, IRepository publisherRepository, IRepository categoryRepository ) { this.quoteRepository = quoteRepository; this.categoryRepository = categoryRepository; this.gameRepository = gameRepository; this.systemRepository = systemRepository; this.publisherRepository = publisherRepository; } [UnitOfWork] public Game GetGame(int id) { return gameRepository.FindById(id); } [UnitOfWork] public IEnumerable GetAllGames() { return gameRepository.Records; } [UnitOfWork] public IEnumerable GetAllSystems() { return systemRepository.Records; } [UnitOfWork] public IEnumerable GetAllPublishers() { return publisherRepository.Records; } [UnitOfWork] public IEnumerable GetAllCategories() { return categoryRepository.Records; } [UnitOfWork] public Quote SaveQuote(Quote quote) { return quoteRepository.Save(quote); } [UnitOfWork] public Quote GetQuote(int id) { return quoteRepository.FindById(id); } [UnitOfWork] public Publisher GetPublisher(int id) { return publisherRepository.FindById(id); } [UnitOfWork] public GamingSystem GetSystem(int systemId) { return systemRepository.FindById(systemId); } [UnitOfWork] public Category GetCategory(int categoryId) { return categoryRepository.FindById(categoryId); } [UnitOfWork] public Category SaveCategory(Category category) { return categoryRepository.Save(category); } [UnitOfWork] public IEnumerable GetMostRecentQuotes(int limit) { return quoteRepository .Records .OrderByDescending(quote => quote.Created) .Take(limit); } } }