public function createAction()
{
$this->checkPermissions(Acl::RESOURCE_OWN_FARMS, Acl::PERM_FARMS_CREATE);
$object = $this->request->getJsonBody();
/* @var $farmAdapter FarmAdapter */
$farmAdapter = $this->adapter('farm');
//Pre validates the request object
$farmAdapter->validateObject($object, Request::METHOD_POST);
$farm = $farmAdapter->toEntity($object);
if (!empty($farm->ownerId)) {
throw new ApiErrorException(400, ErrorMessage::ERR_INVALID_STRUCTURE, "Farm owner should not be set on farm creation");
}
$farm->id = null;
$farm->envId = $this->getEnvironment()->id;
$user = $this->getUser();
$farm->accountId = $user->getAccountId();
$farm->createdByEmail = $user->getEmail();
$farm->changedById = $user->getId();
$farmAdapter->validateEntity($farm);
if (!$this->getUser()->getAccount()->checkLimit(Limit::ACCOUNT_FARMS, 1)) {
throw new ApiErrorException(400, ErrorMessage::ERR_LIMIT_EXCEEDED, "Farms limit for your account exceeded");
}
//Saves entity
$farm->save();
//Responds with 201 Created status
$this->response->setStatus(201);
return $this->result($farmAdapter->toData($farm));
}