using Hutopy.Application.Common.Interfaces; using Hutopy.Domain.Entities; namespace Hutopy.Application.Stripe.Commands; public record CreateSessionCheckoutCommand : IRequest { public required string CreatorId { get; init; } public required int Amount { get; init; } public string Currency { get; init; } = "CAD"; public string TipMessage { get; init; } = string.Empty; } public class CreateSessionCheckoutCommandHandler( IApplicationDbContext dbContext, IStripeService stripeService ) : IRequestHandler { public async Task Handle(CreateSessionCheckoutCommand request, CancellationToken cancellationToken) { var stripeSecret = await stripeService.CreateCheckoutSession(request.Amount, request.Currency); // ReSharper disable once PossibleLossOfFraction decimal priceInDollars = (request.Amount / 100); var userTransaction = new UserTransaction { Currency = request.Currency, Amount = priceInDollars, TipMessage = request.TipMessage, ApplicationUserId = request.CreatorId }; await dbContext.UserTransactions.AddAsync(userTransaction, cancellationToken); await dbContext.SaveChangesAsync(cancellationToken); return stripeSecret; } }