/// <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; }
/// <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; }