/**
  * Update Document
  *
  * @param String $name
  * @param Int $id
  * @param Request $request
  * @return Response
  */
 public function putDocument($name, $id, Request $request)
 {
     if (!$this->appKeyAvailable($request)) {
         return $this->notAuthorized($request);
     }
     if (!$this->setSessionUser($request)) {
         $this->setResultError("Not logged in", 401);
     } elseif (!$this->isCollection($name)) {
         $this->setResultError("Collection '{$name}' doesn't exist", 404);
     } else {
         $document = Document::find($id);
         if (!$document) {
             $this->setResultError("Document is not found", 404);
         } elseif (!$this->isAllowed($request, 'document', $id, 'update') && !$this->isModerator()) {
             $this->setResultError("Unauthorized action", 403);
         } else {
             $data = $request->all();
             $document->data = json_encode($data);
             $document->save();
             foreach (Data::whereDocumentId($document->id)->get() as $row) {
                 $row->delete();
             }
             foreach ($data as $key => $value) {
                 Data::create(['document_id' => $document->id, 'key' => $key, 'value' => $value]);
             }
             $this->setResultOk();
             $this->setDocumentData($document);
         }
     }
     return $this->setResponse();
 }