示例#1
0
 public Payment(
     PaymentId paymentId,
     string cardNumber,
     decimal amount,
     string currency,
     DateTimeOffset operationDate,
     Result <BankAuthorizationId> bankAuthorizationResult)
 {
     PaymentId               = paymentId;
     CardNumber              = cardNumber;
     Amount                  = amount;
     Currency                = currency;
     OperationDate           = operationDate;
     BankAuthorizationResult = bankAuthorizationResult;
 }
        public async Task <Result <PaymentId> > ProcessAsync(ValidPaymentRequest request)
        {
            var authorizationRequest = await _bankClient.CreateBankRequestAsync(request);

            var authorizationResult = await _bankClient.AuthorizeAsync(authorizationRequest);

            var paymentId = PaymentId.GenerateNew();

            var payment = new Payment(
                paymentId: paymentId,
                cardNumber: Masking.GetMask(request.CardNumber),
                amount: request.Amount,
                currency: request.Currency,
                operationDate: DateTimeOffset.UtcNow,
                bankAuthorizationResult: authorizationResult);

            await _repository.PutAsync(payment);

            return(authorizationResult.IsSuccess
                ? Result <PaymentId> .CreateSuccess(paymentId)
                : Result <PaymentId> .CreateFailure(paymentId));
        }