/**
* Create a new item.
*
* @param Request $request
* @param string|int $id
*
* @throws NotFoundHttpException
* @throws RuntimeException
* @throws UserProtectedException
* @throws UserLimitReachedException
*
* @return mixed
*/
public function __invoke(Request $request, $id)
{
/**
* @var ResourceInterface
*/
list($resourceType, $format) = $this->extractAttributes($request);
/**
* @var User
*/
$data = $this->getItem($this->dataProvider, $resourceType, $id);
$context = $resourceType->getDenormalizationContext();
$context['object_to_populate'] = $data;
if ($data->isProtected()) {
throw new UserProtectedException();
}
$data = $this->serializer->deserialize($request->getContent(), $resourceType->getEntityClass(), $format, $context);
if ($data->isActive()) {
if ($this->userService->checkUserLimit()) {
throw new UserLimitReachedException();
}
}
$this->userService->syncData($data);
$data->setNewPassword('');
$data->setPassword('');
$data->setLegacy(false);
return $data;
}