using System.Collections.Generic; using System.Linq; using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; namespace NzbDrone.Core.Books { public interface ISeriesRepository : IBasicRepository { Series FindById(string foreignSeriesId); List FindById(List foreignSeriesId); List GetByAuthorMetadataId(int authorMetadataId); List GetByAuthorId(int authorId); } public class SeriesRepository : BasicRepository, ISeriesRepository { public SeriesRepository(IMainDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { } public Series FindById(string foreignSeriesId) { return Query(x => x.ForeignSeriesId == foreignSeriesId).SingleOrDefault(); } public List FindById(List foreignSeriesId) { return Query(x => foreignSeriesId.Contains(x.ForeignSeriesId)); } public List GetByAuthorMetadataId(int authorMetadataId) { return QueryDistinct(Builder().Join((l, r) => l.Id == r.SeriesId) .Join((l, r) => l.BookId == r.Id) .Where(x => x.AuthorMetadataId == authorMetadataId)); } public List GetByAuthorId(int authorId) { return QueryDistinct(Builder().Join((l, r) => l.Id == r.SeriesId) .Join((l, r) => l.BookId == r.Id) .Join((l, r) => l.AuthorMetadataId == r.AuthorMetadataId) .Where(x => x.Id == authorId)); } } }