38 lines
1.3 KiB
C#
38 lines
1.3 KiB
C#
using Hutopy.Application.Common.Interfaces;
|
|
using Hutopy.Domain.Entities;
|
|
|
|
namespace Hutopy.Application.Stripe.Commands;
|
|
public record CreateSessionCheckoutCommand : IRequest<string>
|
|
{
|
|
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<CreateSessionCheckoutCommand, string>
|
|
{
|
|
public async Task<string> 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;
|
|
}
|
|
}
|