using Microsoft.EntityFrameworkCore; using System.Diagnostics.CodeAnalysis; namespace OpenArchival.DataAccess; public class ArchiveEntryTagProvider : IArchiveEntryTagProvider { private readonly IDbContextFactory _dbFactory; private readonly ILogger _logger; [SetsRequiredMembers] public ArchiveEntryTagProvider(IDbContextFactory context, ILogger logger) { _dbFactory = context; _logger = logger; } public async Task GetEntryTagAsync(int id) { await using var context = await _dbFactory.CreateDbContextAsync(); return await context.ArtifactEntryTags.Where(t => t.Id == id).FirstOrDefaultAsync(); } public async Task?> GetEntryTagAsync(string name) { await using var context = await _dbFactory.CreateDbContextAsync(); return await context.ArtifactEntryTags.Where(t => t.Name == name).ToListAsync(); } public async Task UpdateEntryTagAsync(ArtifactEntryTag entryTag) { await using var context = await _dbFactory.CreateDbContextAsync(); context.ArtifactEntryTags.Update(entryTag); await context.SaveChangesAsync(); } public async Task CreateEntryTagAsync(ArtifactEntryTag entryTag) { await using var context = await _dbFactory.CreateDbContextAsync(); context.ArtifactEntryTags.Add(entryTag); await context.SaveChangesAsync(); } public async Task DeleteEntryTagAsync(ArtifactEntryTag entryTag) { await using var context = await _dbFactory.CreateDbContextAsync(); context.ArtifactEntryTags.Remove(entryTag); await context.SaveChangesAsync(); } public async Task?> Search(string query) { await using var context = await _dbFactory.CreateDbContextAsync(); return await context.ArtifactEntryTags .Where(p => p.Name.ToLower().Contains(query.ToLower())).ToListAsync(); } public async Task?> Top(int count) { await using var context = await _dbFactory.CreateDbContextAsync(); return await context.ArtifactEntryTags .OrderBy(p => p.Name) .Take(count) .ToListAsync(); } }