using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using AutoMapper; using AutoMapper.QueryableExtensions; using Kavita.API.Repositories; using Kavita.Models.DTOs.MediaErrors; using Kavita.Models.Entities; using Microsoft.EntityFrameworkCore; namespace Kavita.Database.Repositories; public class MediaErrorRepository(DataContext context, IMapper mapper) : IMediaErrorRepository { public void Attach(MediaError? error) { if (error == null) return; context.MediaError.Attach(error); } public void Remove(MediaError? error) { if (error == null) return; context.MediaError.Remove(error); } public void Remove(IList errors) { context.MediaError.RemoveRange(errors); } public Task Find(string filename, CancellationToken ct = default) { return context.MediaError .Where(e => e.FilePath == filename) .FirstOrDefaultAsync(ct); } public async Task> GetAllErrorDtosAsync(CancellationToken ct = default) { return await context.MediaError .OrderByDescending(m => m.Created) .ProjectTo(mapper.ConfigurationProvider) .AsNoTracking() .ToListAsync(ct); } public Task ExistsAsync(MediaError error, CancellationToken ct = default) { return context.MediaError.AnyAsync(m => m.FilePath.Equals(error.FilePath) && m.Comment.Equals(error.Comment) && m.Details.Equals(error.Details), ct ); } public async Task DeleteAll(CancellationToken ct = default) { await context.MediaError.ExecuteDeleteAsync(ct); } public Task> GetAllErrorsAsync(IList comments, CancellationToken ct = default) { return context.MediaError .Where(m => comments.Contains(m.Comment)) .ToListAsync(ct); } }