Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
 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));
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        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));
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
0
        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));
        }