using System; using System.Collections.Generic; 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 tracks. /// public class TrackRepository : LocalRepository, ITrackRepository { /// /// The database handle /// private readonly DatabaseContext _database; /// protected override Expression> DefaultSort => x => x.TrackIndex; /// /// Create a new . /// /// The database handle public TrackRepository(DatabaseContext database) : base(database) { _database = database; } /// public override Task> Search(string query) { throw new InvalidOperationException("Tracks do not support the search method."); } /// protected override async Task Validate(Track resource) { await base.Validate(resource); if (resource.EpisodeID <= 0) { resource.EpisodeID = resource.Episode?.ID ?? 0; if (resource.EpisodeID <= 0) { throw new ArgumentException("Can't store a track not related to any episode " + $"(episodeID: {resource.EpisodeID})."); } } } /// public override async Task Create(Track obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); await base.Create(obj); _database.Entry(obj).State = EntityState.Added; await _database.SaveChangesAsync(); return obj; } /// public override async Task Delete(Track obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); } } }