using Microsoft.EntityFrameworkCore; using LiteCqrs; using PnvPanel.Application.Common.Interfaces; using PnvPanel.Application.Common.Models; namespace PnvPanel.Application.Media.GetImage; public sealed class GetMediaImageQueryHandler(IAppDbContext dbContext, IFileStorage fileStorage) : IQueryHandler> { public async Task> Handle( GetMediaImageQuery query, CancellationToken cancellationToken ) { var image = await dbContext .MediaImages.AsNoTracking() .FirstOrDefaultAsync(i => i.Id == query.ImageId, cancellationToken); if (image is null) return Result.Failure(MediaErrors.NotFound); var stream = await fileStorage.OpenReadAsync(image.StoredFileName, cancellationToken); if (stream is null) return Result.Failure(MediaErrors.NotFound); return Result.Success(new MediaImageContent(stream, image.ContentType, image.FileName)); } }