Kavita/API/Data/Repositories/ExternalChapterMetadataRepository.cs
Amelia 052b3f9fe4
Ingest ExternalReviews from K+
Adds a new entity ExternalChapterMetadata, which would allow us to
extend chapters to Recommendations, Ratings, etc in the future
2025-04-28 16:19:03 +02:00

45 lines
1.4 KiB
C#

#nullable enable
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using API.Entities.Metadata;
using API.Extensions.QueryExtensions;
using AutoMapper;
using Microsoft.EntityFrameworkCore;
namespace API.Data.Repositories;
public enum ExternalChapterMetadataIncludes
{
None = 0,
ExternalReviews = 1 << 1,
}
public interface IExternalChapterMetadataRepository
{
void Attach(ExternalChapterMetadata externalChapterMetadata);
void Remove(IEnumerable<ExternalChapterReview>? reviews);
Task<ExternalChapterMetadata?> Get(int chapterId, ExternalChapterMetadataIncludes includes = ExternalChapterMetadataIncludes.ExternalReviews);
}
public class ExternalChapterMetadataRepository(DataContext context, IMapper mapper): IExternalChapterMetadataRepository
{
public void Attach(ExternalChapterMetadata externalChapterMetadata)
{
context.ExternalChapterMetadata.Attach(externalChapterMetadata);
}
public void Remove(IEnumerable<ExternalChapterReview>? reviews)
{
if (reviews == null) return;
context.ExternalChapterReview.RemoveRange(reviews);
}
public async Task<ExternalChapterMetadata?> Get(int chapterId, ExternalChapterMetadataIncludes includes = ExternalChapterMetadataIncludes.ExternalReviews)
{
return await context.ExternalChapterMetadata
.Includes(includes)
.FirstOrDefaultAsync(c => c.ChapterId == chapterId);
}
}