You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Readarr/src/NzbDrone.Core/Books/Repositories/SeriesRepository.cs

49 lines
1.8 KiB

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>
{
Series FindById(string foreignSeriesId);
List<Series> FindById(List<string> foreignSeriesId);
List<Series> GetByAuthorMetadataId(int authorMetadataId);
List<Series> GetByAuthorId(int authorId);
}
public class SeriesRepository : BasicRepository<Series>, ISeriesRepository
{
public SeriesRepository(IMainDatabase database, IEventAggregator eventAggregator)
: base(database, eventAggregator)
{
}
public Series FindById(string foreignSeriesId)
{
return Query(x => x.ForeignSeriesId == foreignSeriesId).SingleOrDefault();
}
public List<Series> FindById(List<string> foreignSeriesId)
{
return Query(x => foreignSeriesId.Contains(x.ForeignSeriesId));
}
public List<Series> GetByAuthorMetadataId(int authorMetadataId)
{
return QueryDistinct(Builder().Join<Series, SeriesBookLink>((l, r) => l.Id == r.SeriesId)
.Join<SeriesBookLink, Book>((l, r) => l.BookId == r.Id)
.Where<Book>(x => x.AuthorMetadataId == authorMetadataId));
}
public List<Series> GetByAuthorId(int authorId)
{
return QueryDistinct(Builder().Join<Series, SeriesBookLink>((l, r) => l.Id == r.SeriesId)
.Join<SeriesBookLink, Book>((l, r) => l.BookId == r.Id)
.Join<Book, Author>((l, r) => l.AuthorMetadataId == r.AuthorMetadataId)
.Where<Author>(x => x.Id == authorId));
}
}
}