using Microsoft.EntityFrameworkCore; using System.Diagnostics.CodeAnalysis; namespace OpenArchival.DataAccess; public class FilePathListingProvider : IFilePathListingProvider { private readonly IDbContextFactory _contextFactory; private readonly ILogger _logger; [SetsRequiredMembers] public FilePathListingProvider(IDbContextFactory factory, ILogger logger) { _contextFactory = factory; _logger = logger; } public async Task GetFilePathListingAsync(int id) { await using var context = await _contextFactory.CreateDbContextAsync(); return await context.ArtifactFilePaths.Where(f => f.Id == id).FirstOrDefaultAsync(); } public async Task GetFilePathListingByPathAsync(string path) { await using var context = await _contextFactory.CreateDbContextAsync(); return await context.ArtifactFilePaths.Where(f => f.Path == path).FirstOrDefaultAsync(); } public async Task CreateFilePathListingAsync(FilePathListing filePathListing) { await using var context = await _contextFactory.CreateDbContextAsync(); context.ArtifactFilePaths.Add(filePathListing); await context.SaveChangesAsync(); } public async Task UpdateFilePathListingAsync(FilePathListing filePathListing) { await using var context = await _contextFactory.CreateDbContextAsync(); context.ArtifactFilePaths.Update(filePathListing); await context.SaveChangesAsync(); } public async Task DeleteFilePathListingAsync(FilePathListing filePathListing) { await using var context = await _contextFactory.CreateDbContextAsync(); context.ArtifactFilePaths.Remove(filePathListing); await context.SaveChangesAsync(); } public async Task DeleteFilePathListingAsync(string originalFileName, string diskPath) { await using var context = await _contextFactory.CreateDbContextAsync(); var listingToDelete = await context.ArtifactFilePaths .Where(p => p.OriginalName == originalFileName) .Where(p => p.Path == diskPath) .FirstOrDefaultAsync(); if (listingToDelete == null) { return false; } context.RemoveRange(listingToDelete); await context.SaveChangesAsync(); return true; } }