public ApiResult <Customer> Update(int id, CreateCustomerOptions options) { ApiResult <Customer> res = GetCustomerById(id); if (!res.Success) { return(res); } if (options == null) { return(ApiResult <Customer> .CreateUnsuccessful (StatusCode.BadRequest, "null options")); } Customer c = res.Data; if (!string.IsNullOrWhiteSpace(options.Email) && options.Email.Contains("@")) { c.Email = options.Email; } context.SaveChanges(); return(ApiResult <Customer> .CreateSuccessful(c)); }
public ApiResult <Customer> Create(CreateCustomerOptions options) { if (options == null) { return(null); } if (string.IsNullOrWhiteSpace(options.Email) || !options.Email.Contains("@") || string.IsNullOrWhiteSpace(options.VatNumber)) { return(null); } var customer = new Customer(); customer.VatNumber = options.VatNumber; customer.Email = options.Email; customer.FirstName = options.FirstName; context.Set <Customer>().Add(customer); context.SaveChanges(); return(ApiResult <Customer> .CreateSuccessful(customer)); }
public ApiResult <List <Customer> > GetCustomers(int howMany) { return (ApiResult <List <Customer> > .CreateSuccessful( context.Set <Customer>() .Take(howMany) .ToList() )); }
public ApiResult <Product> GetProductById(Guid id) { var product = context .Set <Product>() .SingleOrDefault(s => s.Id == id); if (product == null) { return(new ApiResult <Product>( StatusCode.NotFound, $"Product {id} not found")); } return(ApiResult <Product> .CreateSuccessful(product)); }
public ApiResult <Account> Create(Guid customerId, CreateAccountOptions options) { if (options == null) { return(ApiResult <Account> .CreateFailed( Constants.ApiResultCode.BadRequest, $"Null {nameof(options)}")); } if (string.IsNullOrWhiteSpace(options.CurrencyCode) || !options.CurrencyCode.Equals( Constants.CurrencyCode.Euro, StringComparison.OrdinalIgnoreCase)) { return(ApiResult <Account> .CreateFailed( Constants.ApiResultCode.BadRequest, $"Invalid or unsupported currency {options.CurrencyCode}")); } var customerResult = _customers.GetById(customerId); if (!customerResult.IsSuccessful()) { return(customerResult.ToResult <Account>()); } var customer = customerResult.Data; var account = new Account() { AccountId = CreateAccountId(customer.CountryCode), Balance = 0M, CurrencyCode = options.CurrencyCode, Customer = customer, State = Constants.AccountState.Active, Description = options.Description }; _dbContext.Add(account); try { _dbContext.SaveChanges(); } catch (Exception) { return(ApiResult <Account> .CreateFailed( Constants.ApiResultCode.InternalServerError, "Could not save account")); } return(ApiResult <Account> .CreateSuccessful(account)); }
public ApiResult <IQueryable <Customer> > Search( SearchCustomerOptions options) { if (options == null) { return(ApiResult <IQueryable <Customer> > .CreateUnsuccessful (StatusCode.BadRequest, "null options")); } if (string.IsNullOrWhiteSpace(options.Email) && (options.Id == null || options.Id == 0) && string.IsNullOrWhiteSpace(options.VatNumber) && string.IsNullOrWhiteSpace(options.FirstName) ) { return(ApiResult <IQueryable <Customer> > .CreateUnsuccessful (StatusCode.BadRequest, "null options")); } var query = context .Set <Customer>() .AsQueryable(); if (options.Id != null && options.Id != 0) { query = query.Where( c => c.Id == options.Id); } if (options.VatNumber != null) { query = query.Where( c => c.VatNumber == options.VatNumber); } if (options.Email != null) { query = query.Where( c => c.Email.Equals(options.Email)); } if (!string.IsNullOrWhiteSpace(options.FirstName)) { query = query .Where(c => c.FirstName.Contains(options.FirstName)); } return(ApiResult <IQueryable <Customer> > .CreateSuccessful(query)); }
public ApiResult <Order> CreateOrder( CreateOrderOptions options) { if (options == null) { return(new ApiResult <Order>( StatusCode.BadRequest, "null options")); } var cresult = customer_ .GetCustomerById(options.CustomerId); if (!cresult.Success) { return(ApiResult <Order> .Create(cresult)); } var order = new Order(); foreach (var id in options.ProductIds) { var prodResult = product_ .GetProductById(id); if (!prodResult.Success) { return(ApiResult <Order> .Create( prodResult)); } order.TotalCost = 0; order.TotalCost += prodResult.Data.Price; order.OrderProducts.Add( new OrderProduct() { Product = prodResult.Data }); } context_.Add(order); cresult.Data.Orders.Add(order); context_.SaveChanges(); return(ApiResult <Order> .CreateSuccessful(order)); }
public ApiResult <int> OrdersInEachStatus( SearchOrderOptions option) { if (option == null) { return(new ApiResult <int>( StatusCode.BadRequest, "null options")); } var status = option.OrderStatus; var result = order_.SearchOrder(option); var order = result.Data; var totalOrders = order.Count(); return(ApiResult <int> .CreateSuccessful( totalOrders)); }
public ApiResult <Account> Charge(string accountId, decimal amount) { if (accountId == null) { return(ApiResult <Account> .CreateFailed( Constants.ApiResultCode.BadRequest, $"Null {nameof(accountId)}")); } IQueryable <Account> accountResultSearch = _dbContext.Set <Account>().AsQueryable().Where(a => a.AccountId == accountId); var account = accountResultSearch.Include(c => c.Cards).SingleOrDefault(); if (account == null) { return(ApiResult <Account> .CreateFailed( Constants.ApiResultCode.NotFound, $"Account {accountId} was not found")); } if (account.State != Constants.AccountState.Active) { return(ApiResult <Account> .CreateFailed( Constants.ApiResultCode.Success, $"Account State {account.State}")); } if (account.Balance < amount) { return(ApiResult <Account> .CreateFailed( Constants.ApiResultCode.Success, "Ιnsufficient Βalance")); } account.Balance -= amount; //_dbContext.Add(account); try { _dbContext.SaveChanges(); } catch (Exception) { return(ApiResult <Account> .CreateFailed( Constants.ApiResultCode.InternalServerError, "Could not save account")); } return(ApiResult <Account> .CreateSuccessful(account)); }
public ApiResult <Card> Create(string accountId, CreateCardOptions options) { if (options == null) { return(ApiResult <Card> .CreateFailed( Constants.ApiResultCode.BadRequest, $"Null {nameof(options)}")); } var accountResult = _accountService.GetById(accountId); if (!accountResult.IsSuccessful()) { return(accountResult.ToResult <Card>()); } var account = accountResult.Data; var card = new Card() { CardNumber = options.CardNumber, CardType = options.CardType, Active = true }; card.Accounts.Add(account); _dbContext.Add(card); try { _dbContext.SaveChanges(); } catch (Exception) { return(ApiResult <Card> .CreateFailed( Constants.ApiResultCode.InternalServerError, "Could not save account")); } return(ApiResult <Card> .CreateSuccessful(card)); }
public ApiResult <Card> Checkout(PaymentOptions options) { if (options == null || !options.IsValid()) { return(ApiResult <Card> .CreateFailed( Constants.ApiResultCode.BadRequest, $"Null {nameof(options)}")); } var card = Get(options.CardNumber); var cardValidationsApiResult = card.Validations(options); if (cardValidationsApiResult != null) { return(cardValidationsApiResult); } var account = card.Accounts.FirstOrDefault(); var accountValidationsApiResult = account.Validations(options); if (accountValidationsApiResult != null) { return(accountValidationsApiResult); } decimal amount = options.Amount; account.Balance -= amount; try { _dbContext.SaveChanges(); } catch (Exception) { return(ApiResult <Card> .CreateFailed( Constants.ApiResultCode.InternalServerError, "Could Not Save")); } return(ApiResult <Card> .CreateSuccessful(card)); }