예제 #1
0
        public ApiResult <Card> BindCardToAccount(string cardNumber, string accountNumber)
        {
            // Basic Validations
            if (string.IsNullOrWhiteSpace(cardNumber))
            {
                return(ApiResult <Card> .UpdateFailed(
                           Constants.ApiResultCode.BadRequest, "Card Number cannot be empty"));
            }

            if (string.IsNullOrWhiteSpace(accountNumber))
            {
                return(ApiResult <Card> .UpdateFailed(
                           Constants.ApiResultCode.BadRequest, "Account Number cannot be empty"));
            }

            // get ref to card
            var cardResult = GetCardbyNumber(cardNumber);

            if (!cardResult.IsSuccessful())
            {
                return(cardResult);
            }
            var card = cardResult.Data;

            // get ref to account
            var account = _dbContext.Set <Account>()
                          .Where(a => a.AccountId == accountNumber)
                          .SingleOrDefault();

            if (account == null)
            {
                return(ApiResult <Card> .UpdateFailed(
                           Constants.ApiResultCode.BadRequest, "Account Number does not exist"));
            }
            ;

            // combine account to card and vice versa
            account.Cards.Add(card);
            card.Accounts.Add(account);

            // update database
            try {
                _dbContext.SaveChanges();
            }
            catch (Exception ex) {
                return(ApiResult <Card> .UpdateFailed(
                           ApiResultCode.InternalServerError, $"Failed to update database: Details: {ex.Message}"));
            }

            return(new ApiResult <Card>()
            {
                Data = card
            });
        }
예제 #2
0
        public void Card_Register_Success()
        {
            var customer = new Customer()
            {
                Firstname = "Dimitris",
                Lastname  = "Pnevmatikos",
                VatNumber = "117008855",
                Email     = "*****@*****.**",
                IsActive  = true
            };

            var account = new Account()
            {
                Balance      = 1000M,
                CurrencyCode = "EUR",
                State        = Constants.AccountState.Active,
                AccountId    = "GR123456789121"
            };

            customer.Accounts.Add(account);
            var cardNumber = GenerateCardNumber();

            var card = new Card()
            {
                Active     = true,
                CardNumber = cardNumber,
                CardType   = Constants.CardType.Debit
            };

            account.Cards.Add(card);

            _dbContext.Add(customer);
            _dbContext.SaveChanges();

            var customerFromDb = _dbContext.Set <Customer>()
                                 .Where(c => c.VatNumber == "117008855")
                                 .Include(c => c.Accounts)
                                 .ThenInclude(a => a.Cards)
                                 .SingleOrDefault();

            var customerCard = customerFromDb.Accounts
                               .SelectMany(a => a.Cards)
                               .Where(c => c.CardNumber == cardNumber)
                               .SingleOrDefault();

            Assert.NotNull(customerCard);
            Assert.Equal(Constants.CardType.Debit, customerCard.CardType);
            Assert.True(customerCard.Active);
        }
예제 #3
0
        public void Card_Register_Success()
        {
            var customer = _customerTests.RegisterCustomer_Success(
                Constants.Country.GreekCountryCode);

            var account = new Account()
            {
                Balance      = 1000M,
                CurrencyCode = "EUR",
                State        = Constants.AccountState.Active,
                AccountId    = $"GR{DateTimeOffset.Now:ssfffffff}"
            };

            customer.Accounts.Add(account);
            _dbContext.SaveChanges();

            var card = new Card()
            {
                Active     = true,
                CardNumber = $"4111111111111{DateTimeOffset.Now:fff}",
                CardType   = Constants.CardType.Debit
            };

            account.Cards.Add(card);

            _dbContext.Add(card);
            _dbContext.SaveChanges();

            var customerFromDb = _dbContext.Set <Customer>()
                                 .Where(c => c.VatNumber == customer.VatNumber)
                                 .Include(c => c.Accounts)
                                 .ThenInclude(a => a.Cards)
                                 .SingleOrDefault();

            var customerCard = customerFromDb.Accounts
                               .SelectMany(a => a.Cards)
                               .Where(c => c.CardNumber == card.CardNumber)
                               .SingleOrDefault();

            Assert.NotNull(customerCard);
            Assert.Equal(Constants.CardType.Debit, customerCard.CardType);
            Assert.True(customerCard.Active);
        }
예제 #4
0
        static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath($"{AppDomain.CurrentDomain.BaseDirectory}")
                         .AddJsonFile("appsettings.json", false)
                         .Build();

            var connectionString = config.GetConnectionString("tinyBank");

            var builder = new DbContextOptionsBuilder();

            builder.UseSqlServer(connectionString);

            using var context = new TinyBankDbContext(builder.Options);

            //var customer = new Customer() {
            //    Firstname = "Spyro",
            //    Lastname = "Spyrou",
            //    VatNumber = "117003930",
            //    IsActive = true
            //};

            //customer.Accounts.Add(
            //    new Account() {
            //        AccountId = "GR123456",
            //        Balance = 1000,
            //        CurrencyCode = "EUR",
            //        Description = "A test account",
            //        State = Core.Constants.AccountState.Active
            //    });

            var account = new Account()
            {
                AccountId    = "GR123456789",
                Balance      = 1000,
                CurrencyCode = "EUR",
                Description  = "A secondary test account",
                State        = Core.Constants.AccountState.Active,
                CustomerId   = Guid.Parse("A45CC9FF-A3AE-4AA5-8CFB-5685D950CA2B")
            };

            context.Add(account);
            context.SaveChanges();
        }
예제 #5
0
        public ApiResult <Customer> Register(RegisterCustomerOptions options)
        {
            if (options == null)
            {
                return(new ApiResult <Customer>()
                {
                    Code = ApiResultCode.BadRequest,
                    ErrorText = $"Null {nameof(options)}"
                });
            }

            if (string.IsNullOrWhiteSpace(options.Firstname))
            {
                return(new ApiResult <Customer>()
                {
                    Code = ApiResultCode.BadRequest,
                    ErrorText = $"Null or empty {nameof(options.Firstname)}"
                });
            }

            if (string.IsNullOrWhiteSpace(options.Lastname))
            {
                return(new ApiResult <Customer>()
                {
                    Code = ApiResultCode.BadRequest,
                    ErrorText = $"Null or empty {nameof(options.Lastname)}"
                });
            }

            if (options.Type == Constants.CustomerType.Undefined)
            {
                return(new ApiResult <Customer>()
                {
                    Code = ApiResultCode.BadRequest,
                    ErrorText = $"Invalid customer type {nameof(options.Type)}"
                });
            }

            if (!IsValidVatNumber(options.CountryCode, options.VatNumber))
            {
                return(new ApiResult <Customer>()
                {
                    Code = ApiResultCode.BadRequest,
                    ErrorText = $"Invalid Vat number {options.VatNumber}"
                });
            }

            var customerExists = Exists(options.VatNumber);

            if (customerExists)
            {
                return(new ApiResult <Customer>()
                {
                    Code = ApiResultCode.Conflict,
                    ErrorText = $"Customer with Vat number {options.VatNumber} already exists"
                });
            }

            var customer = _mapper.Map <Customer>(options);

            customer.IsActive = true;

            _dbContext.Add(customer);

            try {
                _dbContext.SaveChanges();
            } catch (Exception ex) {
                // log
                Console.WriteLine(ex);

                return(new ApiResult <Customer>()
                {
                    Code = ApiResultCode.InternalServerError,
                    ErrorText = $"Customer could not be saved"
                });
            }

            return(new ApiResult <Customer>()
            {
                Data = customer
            });
        }