using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; using Kyoo.Database; using Microsoft.EntityFrameworkCore; namespace Kyoo.Core.Controllers { /// /// A local repository to handle providers. /// public class ProviderRepository : LocalRepository, IProviderRepository { /// /// The database handle /// private readonly DatabaseContext _database; /// /// Create a new . /// /// The database handle public ProviderRepository(DatabaseContext database) : base(database) { _database = database; } /// protected override Expression> DefaultSort => x => x.Slug; /// public override async Task> Search(string query) { return await _database.Providers .Where(_database.Like(x => x.Name, $"%{query}%")) .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } /// public override async Task Create(Provider obj) { await base.Create(obj); _database.Entry(obj).State = EntityState.Added; await _database.SaveChangesAsync("Trying to insert a duplicated provider " + $"(slug {obj.Slug} already exists)."); return obj; } /// public override async Task Delete(Provider obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); } /// public Task> GetMetadataID(Expression> where = null, Sort sort = default, Pagination limit = default) where T : class, IMetadata { return ApplyFilters(_database.MetadataIds() .Include(y => y.Provider), x => _database.MetadataIds().FirstOrDefaultAsync(y => y.ResourceID == x), x => x.ResourceID, where, sort, limit); } } }