using LiteCharms.Extensions; using LiteCharms.Infrastructure.Database; using LiteCharms.Models; namespace LiteCharms.Features.Quotes.Queries.Handlers; public class GetQuoteQueryHandler(IDbContextFactory contextFactory) : IRequestHandler> { public async ValueTask> Handle(GetQuoteQuery request, CancellationToken cancellationToken) { try { await using var context = await contextFactory.CreateDbContextAsync(cancellationToken); var quote = await context.Quotes.AsNoTracking().FirstOrDefaultAsync(q => q.Id == request.QuoteId, cancellationToken); return quote is not null ? Result.Ok(quote.ToModel()) : Result.Fail(new Error($"Quote with ID {request.QuoteId} not found.")); } catch (Exception ex) { return Result.Fail(new Error(ex.Message).CausedBy(ex)); } } }