示例#1
0
 /**
  * @Route("/{uuid}/{category}/{key}", requirements={"uuid" = "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"})
  * @Method({"POST"})
  */
 public function postAction(Request $request, $uuid, $category, $key)
 {
     $response = new TextPlainResponse('Huh?', 503);
     $doctrine = $this->getDoctrine();
     $em = $doctrine->getManager();
     $conn = $em->getConnection();
     $recordRepository = $doctrine->getRepository('VirtualPersistBundle:Record');
     $user = $doctrine->getRepository('VirtualPersistBundle:User')->findOneByUuid($uuid);
     if ($user) {
         $record = $recordRepository->findOneByUserCategoryKey($user, $category, $key);
         if ($record) {
             try {
                 $conn->beginTransaction();
                 $record->setData($request->request->get('data', ''));
                 $record->setTimestamp(new \DateTime('now'));
                 $em->persist($record);
                 $em->flush();
                 $conn->commit();
             } catch (\Exception $e) {
                 $conn->rollback();
                 $em->close();
                 throw $e;
             }
         } else {
             // no record
             // Glean the data to post.
             $data = $request->request->get('data', '');
             $record = new Record();
             $record->setOwner($user);
             $record->setCategory($category);
             $record->setKey($key);
             $record->setData($data);
             $record->setTimestamp(new \DateTime('now'));
             // Isolate writing the new record in a transaction.
             $conn->beginTransaction();
             try {
                 $em->persist($record);
                 $em->flush();
                 $conn->commit();
             } catch (\Exception $e) {
                 $conn->rollback();
                 $em->close();
                 throw $e;
             }
         }
         $response = new TextPlainResponse('Item added.', 200);
     } else {
         // no such user
         $response = new TextPlainResponse('No such item.', 404);
     }
     return $this->addDebugInfo($response);
 }