using System.Collections.Generic; using NzbDrone.Core.Books; using NzbDrone.Core.Datastore; using NzbDrone.Core.Messaging.Events; namespace NzbDrone.Core.Blocklisting { public interface IBlocklistRepository : IBasicRepository { List BlocklistedByTitle(int authorId, string sourceTitle); List BlocklistedByTorrentInfoHash(int authorId, string torrentInfoHash); List BlocklistedByAuthor(int authorId); } public class BlocklistRepository : BasicRepository, IBlocklistRepository { public BlocklistRepository(IMainDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { } public List BlocklistedByTitle(int authorId, string sourceTitle) { return Query(e => e.AuthorId == authorId && e.SourceTitle.Contains(sourceTitle)); } public List BlocklistedByTorrentInfoHash(int authorId, string torrentInfoHash) { return Query(e => e.AuthorId == authorId && e.TorrentInfoHash.Contains(torrentInfoHash)); } public List BlocklistedByAuthor(int authorId) { return Query(b => b.AuthorId == authorId); } protected override SqlBuilder PagedBuilder() => new SqlBuilder(_database.DatabaseType) .Join((b, m) => b.AuthorId == m.Id) .Join((l, r) => l.AuthorMetadataId == r.Id); protected override IEnumerable PagedQuery(SqlBuilder builder) => _database.QueryJoined(builder, (bl, author, metadata) => { author.Metadata = metadata; bl.Author = author; return bl; }); } }