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 }); }
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); }
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); }
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(); }
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 }); }