Ejemplo n.º 1
0
        /// <summary>
        /// Request customer data.
        /// </summary>
        /// <param name="request">Customer request message.</param>
        /// <returns>Customer response message.</returns>
        public CustomerResponse GetCustomers(CustomerRequest request)
        {
            CustomerResponse response = new CustomerResponse();
            response.CorrelationId = request.RequestId;

            // Validate client tag, access token, and user credentials
            if (!ValidRequest(request, response, Validate.All))
                return response;

            CustomerCriteria criteria = request.Criteria as CustomerCriteria;
            string sort = criteria.SortExpression;

            if (request.LoadOptions.Contains("Customers"))
            {
                IEnumerable<Customer> customers;
                if (!criteria.IncludeOrderStatistics)
                {
                    // Simple customer list without order information
                    customers = customerDao.GetCustomers(criteria.SortExpression);
                }
                else if (sort.IndexOf("NumOrders") >= 0 || sort.IndexOf("LastOrderDate") >= 0)
                {
                    // Sort order is handled by the Order Dao
                    IList<Customer> list = customerDao.GetCustomers();
                    customers = orderDao.GetOrderStatistics(list, sort);
                }
                else
                {
                    // Sort order is handled by the Customer Dao, but alse need order statistics
                    IList<Customer> list = customerDao.GetCustomers(sort);
                    customers = orderDao.GetOrderStatistics(list);
                }
                response.Customers = customers.Select(c => Mapper.ToDataTransferObject(c)).ToList();
            }

            if (request.LoadOptions.Contains("Customer"))
            {
                Customer customer = customerDao.GetCustomer(criteria.CustomerId);
                if (request.LoadOptions.Contains("Orders"))
                    customer.Orders = orderDao.GetOrders(customer.CustomerId);

                response.Customer = Mapper.ToDataTransferObject(customer);
            }

            return response;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Set (add, update, delete) customer value.
        /// </summary>
        /// <param name="request">Customer request message.</param>
        /// <returns>Customer response message.</returns>
        public CustomerResponse SetCustomers(CustomerRequest request)
        {
            CustomerResponse response = new CustomerResponse();
            response.CorrelationId = request.RequestId;

            // Validate client tag, access token, and user credentials
            if (!ValidRequest(request, response, Validate.All))
                return response;

            // Transform customer data transfer object to customer business object
            Customer customer = Mapper.FromDataTransferObject(request.Customer);

            // Validate customer business rules

            if (request.Action != "Delete")
            {
                if (!customer.Validate())
                {
                    response.Acknowledge = AcknowledgeType.Failure;

                    foreach (string error in customer.ValidationErrors)
                        response.Message += error + Environment.NewLine;

                    return response;
                }
            }

            // Run within the context of a database transaction. Currently commented out.
            // The Decorator Design Pattern.
            //using (TransactionDecorator transaction = new TransactionDecorator())
            {
                if (request.Action == "Create")
                {
                    customerDao.InsertCustomer(customer);
                    response.Customer = Mapper.ToDataTransferObject(customer);
                    response.RowsAffected = 1;
                }
                else if (request.Action == "Update")
                {
                    response.RowsAffected = customerDao.UpdateCustomer(customer);
                    response.Customer = Mapper.ToDataTransferObject(customer);
                }
                else if (request.Action == "Delete")
                {
                    CustomerCriteria criteria = request.Criteria as CustomerCriteria;
                    Customer cust = customerDao.GetCustomer(criteria.CustomerId);

                    response.RowsAffected = customerDao.DeleteCustomer(cust);
                }

                //transaction.Complete();
            }

            return response;
        }