using LinqToDB; namespace Azaion.Common.Database; public class AnnotationRepository : IAnnotationRepository { private readonly IDbFactory _dbFactory; public AnnotationRepository(IDbFactory dbFactory) { _dbFactory = dbFactory; } public async Task> GetByMediaHashAsync(string hash, CancellationToken ct = default) { return await _dbFactory.Run(async db => await db.GetTable() .Where(x => x.MediaHash == hash) .ToListAsync(ct)); } public async Task GetByNameAsync(string name, CancellationToken ct = default) { return await _dbFactory.Run(async db => await db.GetTable() .FirstOrDefaultAsync(x => x.Name == name, ct)); } public async Task> GetAllAsync(CancellationToken ct = default) { return await _dbFactory.Run(async db => await db.GetTable().ToListAsync(ct)); } public async Task SaveAsync(Annotation annotation, CancellationToken ct = default) { await _dbFactory.RunWrite(async db => { await db.InsertOrReplaceAsync(annotation, token: ct); }); } public async Task DeleteAsync(List names, CancellationToken ct = default) { await _dbFactory.DeleteAnnotations(names, ct); } }