Exemple #1
0
        private async Task <Entities.System.NumberRanges.NumberRange> CreateDefault(NumberRangeType rangeType)
        {
            var numberRange = new Entities.System.NumberRanges.NumberRange
            {
                RangeType = rangeType
            };

            //make configurable
            switch (rangeType)
            {
            case NumberRangeType.Cheque:
                numberRange.Prefix = "01";
                break;

            case NumberRangeType.Savings:
                numberRange.Prefix = "TXN";
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(rangeType), rangeType, null);
            }

            await _db.NumberRanges.AddAsync(numberRange);

            await _db.SaveChangesAsync();

            return(numberRange);
        }
Exemple #2
0
        public async Task SeedData()
        {
            var seedUserEmail = _config["SeedUser:Email"];
            var seedUser      = await _db.Users.IgnoreQueryFilters().FirstOrDefaultAsync(user => user.Email == seedUserEmail);

            if (seedUser == null)
            {
                _logger.LogInformation($"Seeding Database...");
                _logger.LogInformation($"Creating User...");
                var user = new User
                {
                    FullName    = "John Smith",
                    Address     = "1099 King Street",
                    City        = "Auckland",
                    Country     = "New Zealand",
                    PostCode    = "1024",
                    DateOfBirth = DateTime.UtcNow.AddYears(-30),
                    Email       = seedUserEmail,
                    Phone       = "+642112345678",
                    CreatedOn   = DateTime.UtcNow
                };
                await _db.Users.AddAsync(user);

                await _db.SaveChangesAsync();

                _tenantProvider.SetTenantId(user.Id);

                _logger.LogInformation($"Creating Accounts...");
                var account1 = await _accountService.OpenAccount(
                    new OpenAccountRequest { AccountType = AccountType.TRANSACTION }, user.Id);

                var account2 = await _accountService.OpenAccount(
                    new OpenAccountRequest { AccountType = AccountType.SAVING }, user.Id);

                await _db.SaveChangesAsync();

                _logger.LogInformation($"Seeding Transactions...");
                var transactions = ReadFromFile();
                foreach (var transaction in transactions)
                {
                    account1.PostTransaction(transaction);
                }
                _db.Update(account1);
                await _db.SaveChangesAsync();
            }
            else
            {
                _logger.LogInformation($"Seed User {seedUserEmail} Already Exists...");
            }
        }
        public async Task <IActionResult> OpenAccount([FromBody] OpenAccountRequest openAccountRequest)
        {
            var user = await _db.Users.FirstOrDefaultAsync(u => u.Id == _tenantProvider.GetTenantId());

            if (user == null)
            {
                return(NotFound());
            }

            var account = await _accountService.OpenAccount(openAccountRequest, _tenantProvider.GetTenantId());

            await _db.SaveChangesAsync();

            return(Ok(new AccountViewModel(account)));
        }
        public async Task <IActionResult> PostUser([FromBody] RegisterUserRequest registerUserRequest)
        {
            var user = await _db.Users.AddAsync(registerUserRequest.ToDomainModel());

            await _db.SaveChangesAsync();

            return(Ok(new UserViewModel(user.Entity)));
        }
Exemple #5
0
        public async Task <IActionResult> PostPayment([FromBody] PostPaymentRequest postPaymentRequest)
        {
            _logger.LogInformation("incoming post payment request", postPaymentRequest);
            if (IsValid(postPaymentRequest))
            {
                var(debit, credit) = CreateTransactions(postPaymentRequest);

                var fromAccount = await GetAccount(postPaymentRequest.FromAccount);

                if (fromAccount == null)
                {
                    return(NotFound());
                }

                fromAccount.PostTransaction(debit);

                var interIntra = "";

                if (IsIntrabank(postPaymentRequest))
                {
                    _logger.LogInformation("intrabank payment request", postPaymentRequest);
                    var toAccount = await GetAccount(postPaymentRequest.ToAccount, false);

                    if (toAccount == null)
                    {
                        return(NotFound());
                    }

                    toAccount.PostTransaction(credit);
                    interIntra = "intra";
                }
                else
                {
                    _logger.LogInformation("outbound payment request", postPaymentRequest);
                    await AddToSettlementBatch(credit);

                    interIntra = "inter";
                }

                await _db.SaveChangesAsync();

                _logger.LogInformation($"Posted {interIntra}-bank transaction of ${credit.Amount} from {postPaymentRequest.FromAccount} to {postPaymentRequest.ToAccount}");

                /*await _cloudWatch.PutMetricDataAsync(new PutMetricDataRequest
                 * {
                 *  Namespace = "Payments",
                 *  MetricData = new List<MetricDatum>
                 *  {
                 *      new MetricDatum
                 *      {
                 *          MetricName = "TransferEvent",
                 *          Unit = StandardUnit.Count,
                 *          Value = 1,
                 *          TimestampUtc = DateTime.UtcNow,
                 *          Dimensions = new List<Dimension>
                 *          {
                 *              new Dimension { Name = "InterIntra", Value = interIntra }
                 *          }
                 *      },
                 *      new MetricDatum
                 *      {
                 *          MetricName = "TransferValue",
                 *          Unit = StandardUnit.None,
                 *          Value = (double) credit.Amount,
                 *          TimestampUtc = DateTime.UtcNow,
                 *          Dimensions = new List<Dimension>
                 *          {
                 *              new Dimension { Name = "InterIntra", Value = interIntra }
                 *          }
                 *      }
                 *  }
                 * });*/

                return(Ok());
            }

            return(UnprocessableEntity());
        }