using ErsatzTV.Core; using ErsatzTV.Core.Domain; using ErsatzTV.Infrastructure.Data; using ErsatzTV.Infrastructure.Extensions; using Microsoft.EntityFrameworkCore; namespace ErsatzTV.Application.Artworks; public class GetArtworkHandler(IDbContextFactory dbContextFactory) : IRequestHandler> { private readonly IDbContextFactory _dbContextFactory = dbContextFactory; public async Task> Handle( GetArtwork request, CancellationToken cancellationToken) { try { await using TvContext dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); Option artwork = await dbContext.Artwork .AsNoTracking() .SelectOneAsync(a => a.Id, a => a.Id == request.Id) .MapT(Project); return artwork.ToEither(BaseError.New("Artwork not found")); } catch (Exception ex) { return BaseError.New(ex.ToString()); } } private static Artwork Project(Artwork artwork) { return new Artwork { Id = artwork.Id, Path = artwork.Path, ArtworkKind = artwork.ArtworkKind }; } }