public HttpResponseMessage Validate(int establishmentId, int establishmentUrlId, EstablishmentUrlApiModel model)
        {
            //System.Threading.Thread.Sleep(2000); // test api latency

            model.OwnerId = establishmentId;
            model.Id = establishmentUrlId;

            ValidationResult validationResult;
            string propertyName;
            if (model.OwnerId < 1 || model.Id < 1)
            {
                var command = new CreateEstablishmentUrl(User);
                Mapper.Map(model, command);
                validationResult = _createValidator.Validate(command);
                propertyName = command.PropertyName(y => y.Value);
            }
            else
            {
                var command = new UpdateEstablishmentUrl(User);
                Mapper.Map(model, command);
                validationResult = _updateValidator.Validate(command);
                propertyName = command.PropertyName(y => y.Value);
            }

            Func<ValidationFailure, bool> forValue = x => x.PropertyName == propertyName;
            if (validationResult.Errors.Any(forValue))
                return Request.CreateResponse(HttpStatusCode.BadRequest,
                    validationResult.Errors.First(forValue).ErrorMessage, "text/plain");

            return Request.CreateResponse(HttpStatusCode.OK);
        }
        public HttpResponseMessage Post(int establishmentId, EstablishmentUrlApiModel model)
        {
            //System.Threading.Thread.Sleep(2000); // test api latency

            if (!FindResources(establishmentId))
                throw new HttpResponseException(HttpStatusCode.NotFound);
            model.OwnerId = establishmentId;

            var command = new CreateEstablishmentUrl(User);
            Mapper.Map(model, command);

            try
            {
                _createHandler.Handle(command);
            }
            catch (ValidationException ex)
            {
                var badRequest = Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message, "text/plain");
                return badRequest;
            }

            var response = Request.CreateResponse(HttpStatusCode.Created,
                string.Format("Establishment URL '{0}' was successfully created.", model.Value));
            var url = Url.Link(null, new
            {
                controller = "EstablishmentUrls",
                action = "Get",
                establishmentId,
                establishmentUrlId = command.Id,
            });
            Debug.Assert(url != null);
            response.Headers.Location = new Uri(url);
            return response;
        }
        public HttpResponseMessage Put(int establishmentId, int establishmentUrlId, EstablishmentUrlApiModel model)
        {
            //System.Threading.Thread.Sleep(2000); // test api latency

            if (!FindResources(establishmentId, establishmentUrlId))
                throw new HttpResponseException(HttpStatusCode.NotFound);
            model.OwnerId = establishmentId;
            model.Id = establishmentUrlId;

            var command = new UpdateEstablishmentUrl(User);
            Mapper.Map(model, command);

            try
            {
                _updateHandler.Handle(command);
            }
            catch (ValidationException ex)
            {
                var badRequest = Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message, "text/plain");
                return badRequest;
            }

            var response = Request.CreateResponse(HttpStatusCode.OK, "Establishment URL was successfully updated.");
            return response;
        }