public IActionResult UpdateCardLimit( [FromBody] AuthorizeCardOptions options) { var cust = _limits.UpdateCardLimit(options); return(Json(cust)); }
public Result <Limit> UpdateCardLimit(AuthorizeCardOptions options) { var result = _card.Authorize(options); if (result.Code != ResultCodes.Success) { return new Result <Limit>() { Code = result.Code, Message = result.Message } } ; //Κάνε το update στον πίνακα των καρτών το νέο balance result.Data.AvailableBalance -= options.TransactionAmount; //Κάνω commit τις αλλαγές στη βάση _dbContext.Update(result.Data); _dbContext.SaveChanges(); //Τώρα θα πρέπει να κάνω και αλλαγή στον πίνακα των limits //Αν δεν υπάρχει εγγραφή, θα την προσθέσω, αλλιώς να κάνω update var limit = _dbContext.Set <Limit>() .Where(c => c.TransactionType == options.TransactionType) .Where(c => c.DateOfTransactions == DateTime.Today) .SingleOrDefault(); //Εάν δε βρεθεί εγγραφή, τότε σημαίνει πως είναι η πρώτη συναλλαγή για σήμερα, οπότε προσθέτω νέα εγγραφή if (limit == null) { var newLimit = new Limit { AggregateAmount = options.TransactionAmount, TransactionType = options.TransactionType, DateOfTransactions = DateTimeOffset.Now }; var cardTemp = result.Data; cardTemp.Limits.Add(newLimit); //_dbContext.Add(newLimit); _dbContext.SaveChanges(); } else { limit.AggregateAmount += options.TransactionAmount; _dbContext.Update(limit); _dbContext.SaveChanges(); } return(new Result <Limit>() { Code = ResultCodes.Success, Message = $"The transaction has been commited." }); } }
public IActionResult Authorize(string cardNumber, int type, decimal amount) { AuthorizeCardOptions options = new AuthorizeCardOptions { CardNumber = cardNumber, TransactionType = type, TransactionAmount = amount }; var card = _cards.Authorize(options); return(Json(card)); }
public Result <Card> Authorize(AuthorizeCardOptions options) { if (string.IsNullOrWhiteSpace(options.CardNumber)) { return(new Result <Card>() { Code = ResultCodes.BadRequest, Message = $"The CardNumber {options.CardNumber} is not valid" }); } if (options.CardNumber.Length != 16) { return(new Result <Card>() { Code = ResultCodes.BadRequest, Message = $"The CardNumber's lenght {options.CardNumber} is not valid. it must be 16 digits." }); } if (options.TransactionAmount == 0M) { return(new Result <Card>() { Code = ResultCodes.BadRequest, Message = $"The Transaction's amount {options.TransactionAmount} is zero" }); } if (options.TransactionType != 1 && options.TransactionType != 2) { return(new Result <Card>() { Code = ResultCodes.BadRequest, Message = $"The Transaction Type {options.TransactionType} is not valid" }); } var card = _dbContext.Set <Card>() .Where(c => c.CardNumber == options.CardNumber) .SingleOrDefault(); if (card == null) { return(new Result <Card>() { Code = ResultCodes.NotFound, Message = $"The CardNumber {options.CardNumber} not found in the database." }); } //Εάν έχει βρεθεί κάρτα στη βάση και είναι έγκυρη, ψαχνω στον πίνακα των Limit να δω εάν υπάρχει εγγραφή if (card.AvailableBalance >= options.TransactionAmount) { var limit = _dbContext.Set <Limit>() .Where(c => c.TransactionType == options.TransactionType) .Where(c => c.DateOfTransactions == DateTime.Today) .SingleOrDefault(); //Εάν δε βρεθεί εγγραφή, τότε σημαίνει πως είναι η πρώτη συναλλαγή για σήμερα, οπότε είμαι οκ if (limit == null) { return(new Result <Card>() { Code = ResultCodes.Success, Message = "The transaction can be proceed.", Data = card }); } else { var transLimit = 0M; if (options.TransactionType == 1) { transLimit = Consts.Consts.CardPresentLimit; } else { transLimit = Consts.Consts.ECommerceLimit; } var localLimit = limit.AggregateAmount + options.TransactionAmount; if (localLimit > transLimit) { return(new Result <Card>() { Code = ResultCodes.NotAvailableBalance, Message = "The transaction can not be proceed. Your transaction will exceed your daily limit." }); } else { return(new Result <Card>() { Code = ResultCodes.Success, Message = "The transaction can be proceed." }); } } } else { return(new Result <Card>() { Code = ResultCodes.Success, Message = $"The CardNumber {options.CardNumber} has not available amount for this transaction.", Data = card }); } }