Beispiel #1
0
        public async Task <IActionResult> PutPayment(int id, Payment payment)
        {
            if (id != payment.paymentId)
            {
                return(BadRequest());
            }

            _context.Entry(payment).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!PaymentExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <IActionResult> PutProductType(Guid id, ProductType productType)
        {
            if (id != productType.ID)
            {
                return(BadRequest());
            }

            _context.Entry(productType).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ProductTypeExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <IActionResult> PutCountry(Guid id, Country country)
        {
            if (id != country.ID)
            {
                return(BadRequest());
            }

            _context.Entry(country).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CountryExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <IActionResult> PutPaymentDetail([FromRoute] Guid id, [FromBody] PaymentDetail paymentDetail)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != paymentDetail.ID)
            {
                return(BadRequest());
            }

            _context.Entry(paymentDetail).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!PaymentDetailExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Beispiel #5
0
 public async Task Create(Payment payment)
 {
     if (payment != null)
     {
         _dbContext.Payments.Add(payment);
         await _dbContext.SaveChangesAsync();
     }
 }
Beispiel #6
0
        //Add Payment
        public async Task <Payments> AddAsync(Payments payment)
        {
            payment.CreatedDate = DateTime.Now;

            _context.Set <Payments>().Add(payment);
            await _context.SaveChangesAsync();

            return(payment);
        }
        public async Task <ActionResult> PayByCreditCard(PaymentInputInfo info)
        {
            var paymentSession = await context.PaymentSessions.FirstOrDefaultAsync(session => session.SessionId == info.SessionId);

            if (paymentSession.SessionRegistrationTime.AddMinutes(paymentSession.LifeSpanInMinute) < DateTime.Now)
            {
                return(BadRequest("Payment session is out of time"));
            }

            Receipt receipt = new Receipt
            {
                Id            = Guid.NewGuid(),
                CustomerName  = info.Card.HolderName,
                Product       = paymentSession.PaymentAppointment,
                OperationTime = DateTime.Now,
                Seller        = info.Seller,
                Cost          = paymentSession.Cost
            };

            context.PaymentSessions.Remove(paymentSession);
            context.Receipts.Add(receipt);
            await context.SaveChangesAsync();

            await SendNotificationToShop(receipt);

            return(Ok($"Congratulations, {info.Card.HolderName}, you are a happy owner of {paymentSession.PaymentAppointment}!"));
        }
Beispiel #8
0
        public async Task <IActionResult> Payed(PayedInput input)
        {
            PayedInfo info = new PayedInfo(input.PayedDesc, input.Payer, DateTime.Now, input.PayDecimal, input.OrderId);


            using (var transcation = _paymentDbContext.Database.BeginTransaction(_capBus, true))
            {
                try
                {
                    await _paymentDbContext.AddAsync(info);


                    _capBus.Publish("Payment.services.Payed", info);
                    var result = await _paymentDbContext.SaveChangesAsync();

                    // transcation.Commit();
                }
                catch (Exception e)
                {
                    await transcation.RollbackAsync();

                    return(BadRequest());
                }
                return(Ok());
            }
        }
Beispiel #9
0
        public async Task <bool> AddTransaction(Transaction transaction)
        {
            var transactionDb = _mapper.Map <Models.Transaction>(transaction);

            transactionDb.Date = DateTime.Now;

            var result = _paymentDbContext.Transaction.Add(transactionDb);

            if (result.State != Microsoft.EntityFrameworkCore.EntityState.Added)
            {
                return(false);
            }

            await _paymentDbContext.SaveChangesAsync();

            return(true);
        }
        public async Task <IActionResult> PostPayment([FromBody] PostPaymentRequest request)
        {
            // todo: check if customer exists in database

            var creditCards = await DbContext.GetCreditCardByCardHolderName(request.CardHolderName).ToListAsync();

            var creditCard = default(CreditCard);

            if (creditCards.Count > 1)
            {
                creditCard = creditCards.FirstOrDefault(item => item.CardNumber == request.CardNumber);

                if (creditCard == null)
                {
                    return(BadRequest(string.Format("There isn't record for credit card with last 4 digits: {0}.", request.CardNumber)));
                }
            }
            else if (creditCards.Count == 1)
            {
                creditCard = creditCards.First();
            }
            else
            {
                return(BadRequest(string.Format("There isn't record for credit card with last 4 digits: {0}.", request.CardNumber)));
            }

            // todo: check credit card info in database

            if (!creditCard.IsValid(request))
            {
                return(BadRequest(string.Format("There is invalid data for credit card in this transaction.")));
            }

            // todo: check if customer has available credit (limit)

            if (!creditCard.HasFounds(request))
            {
                return(BadRequest(string.Format("There isn't founds to approve this transaction.")));
            }

            var txn = new PaymentTransaction
            {
                PaymentTransactionID = Guid.NewGuid(),
                CreditCardID         = creditCard.CreditCardID,
                ConfirmationID       = Guid.NewGuid(),
                Amount          = request.Amount,
                PaymentDateTime = DateTime.Now
            };

            DbContext.PaymentTransactions.Add(txn);

            creditCard.AvailableFounds -= request.Amount;

            await DbContext.SaveChangesAsync();

            return(Ok(new { txn.ConfirmationID, creditCard.Last4Digits }));
        }
        public async Task ReturnPaymentForGivenId()
        {
            var payment = _fixture.Create <Payment>();
            await _paymentContext.Payments.AddAsync(payment);

            await _paymentContext.SaveChangesAsync();

            var paymentAInDb = await _paymentRepository.GetAsync(payment.Id);

            paymentAInDb.Should().NotBeNull();
        }
Beispiel #12
0
        public async Task Handle(UpdateUserIntegrationEvent @event)
        {
            var customer = await _context.Customers.SingleOrDefaultAsync(x => x.Id == @event.UserId);

            if (customer != null)
            {
                customer = _mapper.Map(@event, customer);
                _context.Customers.Update(customer);
                await _context.SaveChangesAsync();
            }
        }
        public async Task <Read.BankInfo> CreateBankInfoAsync(Write.BankInfo bankInfo)
        {
            var bankDataModel = new Data.Model.BankInfo {
                BankCode = bankInfo.BankCode, Url = bankInfo.Url
            };

            _context.BankInfos.Add(bankDataModel);
            await _context.SaveChangesAsync();

            return(ConvertBankInfoDataModelToReadModel(bankDataModel));
        }
        public async Task <PaymentResult> MakePayment(PaymentDetailsDTO paymentDetails)
        {
            var newPayment = new PaymentDetail
            {
                CardNumber     = paymentDetails.CardNumber,
                CVV            = paymentDetails.CVV,
                CardOwnerName  = paymentDetails.CardOwnerName,
                ExpirationDate = paymentDetails.ExpirationDate
            };

            await _context.PaymentDetails.AddAsync(newPayment);

            await _context.SaveChangesAsync();

            return(new PaymentResult()
            {
                IsComplete = true
            });
        }
        public async Task <ActionResult <Guid> > CreateSession([FromBody] PaymentSessionInputInfo info)
        {
            if (info == null)
            {
                return(BadRequest());
            }

            PaymentSession paymentSession = new PaymentSession
            {
                Cost                    = info.Sum,
                SessionId               = Guid.NewGuid(),
                PaymentAppointment      = info.PaymentAppointement,
                SessionRegistrationTime = DateTime.Now,
                LifeSpanInMinute        = 60,
            };

            context.PaymentSessions.Add(paymentSession);
            await context.SaveChangesAsync();

            return(Ok(paymentSession.SessionId));
        }
Beispiel #16
0
        public static async Task Seed(PaymentDbContext dbContext)
        {
            await dbContext.Set <PaymentMethod>().AddAsync(new PaymentMethod
            {
                Id   = new System.Guid("c50683db-d227-4856-b777-ea07e030d926"),
                Code = "AM" // AMEX
            });

            await dbContext.Set <PaymentMethod>().AddAsync(new PaymentMethod
            {
                Id   = new System.Guid("aae5885e-682b-42e8-b230-7ad2dad55331"),
                Code = "MC" // MasterCard
            });

            await dbContext.Set <PaymentMethod>().AddAsync(new PaymentMethod
            {
                Id   = new System.Guid("7fa09019-f0c4-4479-b9fd-fae9652c4901"),
                Code = "CSH" // Cash
            });

            await dbContext.SaveChangesAsync();
        }
Beispiel #17
0
        public async Task AddAsync(Payment payment)
        {
            await _paymentContext.Payments.AddAsync(payment);

            await _paymentContext.SaveChangesAsync();
        }
Beispiel #18
0
        public async Task <IActionResult> PostPaymentAsync([FromBody] PostPaymentRequest request)
        {
            Logger?.LogDebug("'{0}' has been invoked", nameof(PostPaymentAsync));

            var creditCards = await DbContext.GetCreditCardByCardHolderName(request.CardHolderName).ToListAsync();

            var creditCard = default(CreditCard);

            var last4Digits = request.CardNumber.Substring(request.CardNumber.Length - 4);

            if (creditCards.Count > 1)
            {
                creditCard = creditCards.FirstOrDefault(item => item.CardNumber == request.CardNumber);
            }
            else if (creditCards.Count == 1)
            {
                creditCard = creditCards.First();
            }

            if (creditCard == null)
            {
                return(BadRequest(string.Format("There is not record for credit card with last 4 digits: {0}.", last4Digits)));
            }

            /* Check credit card information */

            if (!creditCard.IsValid(request))
            {
                return(BadRequest(string.Format("Invalid information for card payment.")));
            }

            /* Check if customer has available credit (limit) */

            if (!creditCard.HasFounds(request))
            {
                return(BadRequest(string.Format("There are no founds to approve the payment.")));
            }

            using (var txn = await DbContext.Database.BeginTransactionAsync())
            {
                try
                {
                    var paymentTxn = new PaymentTransaction
                    {
                        PaymentTransactionID = Guid.NewGuid(),
                        CreditCardID         = creditCard.CreditCardID,
                        ConfirmationID       = Guid.NewGuid(),
                        Amount          = request.Amount,
                        PaymentDateTime = DateTime.Now
                    };

                    DbContext.PaymentTransactions.Add(paymentTxn);

                    creditCard.AvailableFounds -= request.Amount;

                    await DbContext.SaveChangesAsync();

                    txn.Commit();

                    Logger?.LogInformation("The payment for card with last 4 digits: '{0}' was successfully. Confirmation #: {1}", last4Digits, paymentTxn.ConfirmationID);

                    var response = new PaymentResponse
                    {
                        ConfirmationID  = paymentTxn.ConfirmationID,
                        PaymentDateTime = paymentTxn.PaymentDateTime,
                        Last4Digits     = creditCard.Last4Digits
                    };

                    return(Ok(response));
                }
                catch (Exception ex)
                {
                    Logger?.LogCritical("There was an error on '{0}': {1}", nameof(PostPaymentAsync), ex);

                    txn.Rollback();

                    return(new ObjectResult(ex.Message)
                    {
                        StatusCode = (int)HttpStatusCode.InternalServerError
                    });
                }
            }
        }
Beispiel #19
0
 public async Task AddAsync(TEntity model)
 {
     _dbSet.Add(model);
     await _context.SaveChangesAsync();
 }
Beispiel #20
0
 public async Task <bool> SaveChangesAsync()
 {
     return((await _paymentDbContext.SaveChangesAsync()) > 0);
 }
Beispiel #21
0
 /// <inheritdoc />
 public async Task <int> SavePayment(Payment payment,
                                     CancellationToken cancellationToken)
 {
     paymentDbContext.Payments.Add(payment);
     return(await paymentDbContext.SaveChangesAsync(cancellationToken));
 }