public Result <Transaction> Register(int accountID, RegisterTransactionOptions options) { var result = _account.GetAccountbyID(accountID); if (result.Code != ResultCodes.Success) { return new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Could not find Account ID {accountID}" } } ; // check account balance. Must be >= options.Type * options.Amount if (options.Type == Model.Types.TransactionType.Credit && result.Data.Balance + (int)options.Type * options.Amount < 0) { return new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Not enough balance for Account ID {accountID} !" } } ; var transaction = new Transaction() { Amount = options.Amount, Type = options.Type, TransDescr = options.TransDescr }; // update account balance result.Data.Balance += (int)options.Type * options.Amount; result.Data.Transactions.Add(transaction); try { _dBContext.SaveChanges(); return(new Result <Transaction>() { Code = ResultCodes.Success, Message = $"New Transaction amount {options.Amount} {((options.Type == Model.Types.TransactionType.Credit) ? "Deducted" : "Added")} for Acount {result.Data.AccountNumber}", Data = transaction }); } catch (Exception ex) { return(new Result <Transaction>() { Code = ResultCodes.InternalServerError, Message = $"Fail to save Transaction for account ID {accountID}. Details: {ex.Message}" }); } }
public async Task <IActionResult> RegisterCards([FromBody] RegisterTransactionOptions options) { var cards = await _transactions.RegisterTransactionAsync(options); if (cards.Code != ResultCodes.Success) { return(StatusCode(cards.Code, cards.Message)); } return(Json(cards)); }
public async void Test_RegisterTranactionAsync() { var options = new RegisterTransactionOptions() { Type = TransactionType.Credit, Amount = 2600 }; var transaction = await _transaction.RegisterTranactionAsync(3, options); Assert.NotNull(transaction); }
public async void Test_RegisterTransactionAsync() { var options = new RegisterTransactionOptions() { cardsId = 1, TransType = TransactionType.CardPresent, Amount = 300 }; var transaction = await _transaction.RegisterTransactionAsync(options); Assert.NotNull(transaction); }
public void Add_New_Transaction_With_DI() { var options = new RegisterTransactionOptions() { Amount = 1500.0m, TransDescr = "Salary Payment", Type = TransactionType.Debit }; var transaction = _transaction.Register(5, options); Assert.NotNull(transaction); }
public async Task <Result <Transaction> > RegisterTransactionAsync(RegisterTransactionOptions options) { if (options.Amount <= 0) { return(new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Prepei na doseis poso megalirerro tou midenos." }); } var cards = (await _cards.GetCardsByIdAsync(options.cardsId)).Data;//fernoume tin karta kai ta transaction(limits) ola (incluce) if (cards != null)//an i karta iparxei { DateTime d = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); string transDateNow = d.ToString(); //pernoume ta simerina transactions (limits) kai eCommerce kai cardPresent, ola (to poli mexri dio na mas ferei) var transToday = cards.Transactions .Where(t => t.Created == transDateNow) .ToList(); if (cards.Balance > options.Amount) { if (options.TransType == TransactionType.CardPresent) { var CardPresentToday = transToday.Where(t => t.Type == TransactionType.CardPresent)//fere tin simerini(transToday vl pio pano) eggrafi me ton tipo cardPresent .SingleOrDefault(); if (CardPresentToday == null) { var t = new Transaction() { Type = options.TransType, Amount = options.Amount + CardPresentToday.Amount }; cards.Transactions.Add(t); cards.Balance = cards.Balance - options.Amount; _dbContext.Update(t); await _dbContext.SaveChangesAsync(); return(new Result <Transaction>() { Code = ResultCodes.Success, Data = t }); } else//an idi simera exei ginei mia cardPresent { if (CardPresentToday.Amount + options.Amount <= 1500) { var t = new Transaction() { Type = options.TransType, Amount = CardPresentToday.Amount + options.Amount }; CardPresentToday = t; cards.Balance = cards.Balance - options.Amount; await _dbContext.SaveChangesAsync(); return(new Result <Transaction>() { Code = ResultCodes.Success, Data = t }); } else { return(new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Me tin agora afti ksepernas to orio tou cardPresent pou einai 1500" }); } } } else if (options.TransType == TransactionType.CardPresent) { var ECommerceToday = transToday.Where(t => t.Type == TransactionType.ECommerce) .SingleOrDefault(); if (ECommerceToday == null) { var t = new Transaction() { Type = options.TransType, Amount = options.Amount + ECommerceToday.Amount }; cards.Transactions.Add(t); cards.Balance = cards.Balance - options.Amount; _dbContext.Update(t); await _dbContext.SaveChangesAsync(); return(new Result <Transaction>() { Code = ResultCodes.Success, Data = t }); } else { if (ECommerceToday.Amount + options.Amount <= 500) { var t = new Transaction() { Type = options.TransType, Amount = ECommerceToday.Amount + options.Amount }; ECommerceToday = t; cards.Balance = cards.Balance - options.Amount; await _dbContext.SaveChangesAsync(); return(new Result <Transaction>() { Code = ResultCodes.Success, Data = t }); } else { return(new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Me tin agora afti ksepernas to orio tou cardPresent pou einai 1500" }); } } } else { return(new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Kati den epelekses kala me to tipo tis kinisis" }); } } else { return(new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"To poso agoras {options.Amount} ksepernaei to poso tou ipoloipou tis kartas {cards.Balance}" }); } } else { return(new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Den iparxei i karta me kodiko {options.cardsId}" }); } }
public async Task <Result <Transaction> > RegisterTranactionAsync(int accountId, RegisterTransactionOptions options) { if (options.Amount < 0) { return new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"To poso pou edoses einai < 0." } } ; var account = (await _account.GetAccountByIdAsync(accountId)).Data; if (options.Type == TransactionType.Debit) { if (options.Amount > account.Balance) { return(new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Thes na xreoseis {options.Amount} evro eno o logariamos exei {account.Balance}. Akiro." }); } } if (account != null) { var transaction = new Transaction() { Type = options.Type, Amount = options.Amount }; account.Transactions.Add(transaction); account.Balance = account.Balance + ((int)options.Type) * options.Amount; _dBContext.Update <Account>(account); await _dBContext.SaveChangesAsync(); return(new Result <Transaction>() { Code = ResultCodes.Success, Data = transaction }); } else { return(new Result <Transaction>() { Code = ResultCodes.BadRequest, Message = $"Den vrethike account me kodiko {accountId}" }); } }