public ActionResult <IEnumerable <CardGetDto> > Get()
        {
            // Select
            var user = _userRepository.GetUser(User.Identity.Name);

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

            var cards = _cardRepository.GetAllWithTransactions(user);

            // Mapping
            var cardsDto = _dtoFactory.Map(cards, TryValidateModel);

            // Return
            return(Ok(cardsDto));
        }
        public void Map_ReturnValidDto()
        {
            // Arrange
            var fakeCard = _testDataGenerator.GenerateFakeCard(
                new CardPostDto
            {
                Name     = "my card",
                Currency = (int)Currency.RUR,
                Type     = (int)CardType.MAESTRO
            });

            // Act
            var dto = _dtoFactory.Map(fakeCard, _ => true);

            // Assert
            Assert.Equal(10M, dto.Balance);
            Assert.Equal(3, dto.Type);
            Assert.Equal(0, dto.Currency);
            Assert.Equal("01/22", dto.Exp);
            Assert.Equal("6271190189011743", dto.Number);
        }
        public void Map_ReturnValidDto()
        {
            // Arrange
            var fakeCard = _testDataGenerator.GenerateFakeCard(
                new CardPostDto
            {
                Name     = "my card",
                Currency = (int)Currency.RUR,
                Type     = (int)CardType.MAESTRO
            });
            var fakeTransaction = TestDataGenerator.GenerateFakeTransaction(fakeCard);

            // Act
            var dto = _dtoFactory.Map(fakeTransaction, _ => true);

            // Assert
            Assert.Equal(10M, dto.Sum);
            Assert.Equal("4083XXXXXXXX6239", dto.To);
            Assert.Equal(fakeCard.CardNumber, dto.From);
            Assert.False(dto.IsCredit);
        }
        public ActionResult <IEnumerable <TransactionGetDto> > Get(
            [Required][CreditCard] string number,
            [FromQuery][Range(1, 1000)] int skip = 0)
        {
            // Validate
            if (!_cardChecker.CheckCardEmitter(number))
            {
                ModelState.AddModelError("number", "This card number is invalid");
            }

            if (!ModelState.IsValid)
            {
                _logger.LogStateWarning("This model is invalid.", ModelState);
                return(BadRequest(ModelState));
            }

            // Select
            var user = _userRepository.GetUser(User.Identity.Name);

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

            var transactions = _transactionRepository.Get(
                user,
                number,
                skip,
                10);

            // Mapping
            var transactionsDto = _dtoFactory.Map(transactions, TryValidateModel);

            // Return
            return(Ok(transactionsDto));
        }