public async Task <ActionResult <MerchantCreationResponse> > CreateMerchant([FromBody] MerchantCreationRequest request) { var existingMerchant = await _paymentDb.Merchants.FirstOrDefaultAsync(m => m.Login == request.Login); if (existingMerchant != null) { return(BadRequest(new { message = "Merchant with this login already exists" })); } var salt = _encryptionService.GenerateSalt(); var merchant = new Merchant { Name = request.Name, Login = request.Login, Url = request.Url, AcquirerType = request.AcquirerType, Salt = salt, HashedPassword = _encryptionService.GetHash(request.Password, salt), Active = true, }; _paymentDb.Merchants.Add(merchant); await _paymentDb.SaveChangesAsync(); return(new MerchantCreationResponse { Id = merchant.Id }); }
public async Task <ActionResult <PaymentResponse> > PostPayment([FromBody] PaymentRequest request) { var merchantId = GetMerchantId(); var merchant = await _paymentDb.Merchants.FindAsync(merchantId); if (merchant == null) { // TODO: log merchant absence return(BadRequest()); } if (!merchant.Active) { // TODO: log inactive merchant return(BadRequest("This merchant is not active")); } var bank = _banksRegistry.GetAcquirer(merchant); var response = await bank.SubmitPayment(request); var payment = new Payment { Id = response.AcquirerPaymentId, Amount = request.Amount, Currency = request.Currency, ExpiryMonth = request.ExpiryMonth, ExpiryYear = request.ExpiryYear, CardLastDigits = request.CardNumber.Substring(Math.Max(0, request.CardNumber.Length - 4)), CardNumberHashed = _encryptionService.GetHash(request.CardNumber, merchant.Salt), CardNumberLength = (byte)request.CardNumber.Length, MerchantId = merchantId, Status = response.Status, CreatedUtc = DateTime.UtcNow, }; _paymentDb.Payments.Add(payment); await _paymentDb.SaveChangesAsync(); return(GetPaymentResponse(payment)); }
public async Task <int> Complete() { return(await _context.SaveChangesAsync()); }
public async Task <int> SaveChangesAsync() { return(await Db.SaveChangesAsync()); }