示例#1
0
        public IActionResult UpdateCardLimit(
            [FromBody] AuthorizeCardOptions options)
        {
            var cust = _limits.UpdateCardLimit(options);

            return(Json(cust));
        }
示例#2
0
        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."
            });
        }
    }
示例#3
0
        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));
        }
示例#4
0
        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
                });
            }
        }