public static void UpdateCustomer(this Customer customer, CustomerViewModel customerVm)
 {
     customer.FirstName = customerVm.FirstName;
     customer.LastName = customerVm.LastName;
     customer.IdentityCard = customerVm.IdentityCard;
     customer.Mobile = customerVm.Mobile;
     customer.DateOfBirth = customerVm.DateOfBirth;
     customer.Email = customerVm.Email;
     customer.UniqueKey = (customerVm.UniqueKey == null || customerVm.UniqueKey == Guid.Empty)
         ? Guid.NewGuid() : customerVm.UniqueKey;
     customer.RegistrationDate = (customer.RegistrationDate == null || customer.RegistrationDate.Equals(DateTime.MinValue) ? DateTime.Now : customerVm.RegistrationDate);
 }
        public HttpResponseMessage Register(HttpRequestMessage request, CustomerViewModel customer)
        {
            return this.CreateHttpResponse(request, () =>
            {
                HttpResponseMessage response = null;

                if (ModelState.IsValid)
                {
                    if (customerRepository.FindBy(customerToFind =>
                    {
                        return customerToFind.Email.Equals(customer.Email) ||
                               customerToFind.IdentityCard.Equals(customer.IdentityCard);
                    }
                    ).Count() != 0)
                    {
                        ModelState.AddModelError("Invalid User", "User with such Email/IC exists");
                        response = request.CreateResponse(HttpStatusCode.BadRequest,
                        ModelState.Keys.SelectMany(k => ModelState[k].Errors).Select(m => m.ErrorMessage).ToArray());
                    }
                    else
                    {
                        Customer tempCustomer = new Customer();
                        tempCustomer.UpdateCustomer(customer);
                        customerRepository.Add(tempCustomer);
                        unitOfWork.Commit();

                        response = request.CreateResponse(HttpStatusCode.OK,
                            Mapper.Map<Customer, CustomerViewModel>(tempCustomer));
                    }

                }
                else
                {
                    response = request.CreateResponse(HttpStatusCode.BadRequest,
                        ModelState.Keys.SelectMany(k => ModelState[k].Errors).Select(m => m.ErrorMessage).ToArray());
                }

                return response;
            });
        }
        public HttpResponseMessage Update(HttpRequestMessage request, CustomerViewModel customer)
        {
            return this.CreateHttpResponse(request, () =>
            {
                HttpResponseMessage response = null;
                if (ModelState.IsValid)
                {
                    Customer tempCustomer = customerRepository.GetSingle(customer.Id);
                    tempCustomer.UpdateCustomer(customer);
                    unitOfWork.Commit();

                    response = request.CreateResponse(HttpStatusCode.OK);
                }
                else
                {
                    response = request.CreateResponse(HttpStatusCode.BadRequest,
                        ModelState.Keys.SelectMany(k => ModelState[k].Errors).Select(m => m.ErrorMessage).ToArray());
                }

                return response;
            });
        }