Beispiel #1
0
        TransactionDataDto ITransactionDataParser.Parse(string data)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(TransactionDataDto));

            using TextReader reader = new StringReader(data);
            TransactionDataDto result = (TransactionDataDto)serializer.Deserialize(reader);

            return(result);
        }
Beispiel #2
0
        public TransactionDataDto Parse(string data)
        {
            TransactionDataDto result = new TransactionDataDto();
            var rows = data.Split(RowSplitter);

            foreach (var row in rows)
            {
                var transaction = ParseCsvRowToTransactionDto(row);

                result.Transactions.Add(transaction);
            }

            return(result);
        }
Beispiel #3
0
        public async Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }

            IFormCollection files = await bindingContext.HttpContext.Request.ReadFormAsync();

            UploadTransactionDataRequest result = new UploadTransactionDataRequest();

            foreach (var file in files.Files)
            {
                ITransactionDataParser parser = _transactionDataParserFactory.CreateParser(file.ContentType);
                string fileContent            = await GetFileContent(file);

                TransactionDataDto transactionData = parser.Parse(fileContent);
                result.TransactionData.Transactions.AddRange(transactionData.Transactions);
            }
            bindingContext.Result = ModelBindingResult.Success(result);
        }
Beispiel #4
0
 public UploadTransactionDataRequest()
 {
     TransactionData = new TransactionDataDto();
 }
Beispiel #5
0
        public async Task <IActionResult> CreateTransaction(int id, [FromBody] TransactionDataDto transactionDataDto)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(Json(new
                    {
                        errors = ModelState.Errors()
                    }));
                }

                var userId = id;

                var amount          = Math.Round(transactionDataDto.Amount, 2);
                var currency        = transactionDataDto.Currency;
                var transactionType = transactionDataDto.TransactionType;

                var bonus         = CalculateBonus(userId);
                var exchangeRates = await GetExchangeRates(currency);

                var points = CalculateLoyaltyPoints(amount, exchangeRates, transactionType);

                switch (transactionType)
                {
                case TransactionType.Deposit:
                    _userTransactionDao.Add(userId, amount, currency, transactionType, points);
                    _userAccountDao.Update(userId, amount, currency);
                    break;

                case TransactionType.Withdraw:
                    _userTransactionDao.Add(userId, amount, currency, transactionType, points);
                    _userAccountDao.Update(userId, -amount, currency);
                    break;

                case TransactionType.Purchase:
                    _userTransactionDao.Add(userId, amount, currency, transactionType, points);
                    _userAccountDao.Update(userId, amount, currency);
                    _userAccountDao.Update(userId, Math.Round(-amount * exchangeRates.SellPrice * (1.00m - bonus) / exchangeRates.Unit, 2),
                                           Currency.PLN);
                    break;

                case TransactionType.Sell:
                    _userTransactionDao.Add(userId, amount, currency, transactionType, points);
                    _userAccountDao.Update(userId, -amount, currency);
                    _userAccountDao.Update(userId,
                                           Math.Round(amount * exchangeRates.PurchasePrice * (1.00m + bonus) / exchangeRates.Unit, 2), Currency.PLN);
                    break;

                default:
                    return(Json(new
                    {
                        errors = "Invalid transaction type."
                    }));
                }

                return(Json(Ok()));
            }
            catch (InvalidOperationException ex)
            {
                return(Json(new
                {
                    errors = ex.Message
                }));
            }
        }