/**
  * @ApiDoc(
  *  resource = true,
  *  description = "Create a new conversation NEED X-AUTH-TOKEN",
  *  statusCodes = {
  *      200 = "Returned when successful",
  *      400 = "Returned when data has errors",
  *      403 = "Returned when authentication failed"
  *  }
  * )
  *
  * @param ParamFetcher $paramFetcher
  * @param Request      $request
  *
  * @return View
  *
  * @throws \HttpInvalidParamException
  *
  * @RequestParam(name="to", nullable=true, description="Message receiver")
  */
 public function postAction(ParamFetcher $paramFetcher, Request $request)
 {
     $em = $this->getManager();
     $user1 = LoginApiController::checkAuthentication($request, $em);
     $to = $paramFetcher->get('to');
     if (null === $to) {
         throw new \HttpInvalidParamException('You must specify a second participant');
     }
     $userRepository = $this->getUserRepository();
     $user2 = $userRepository->find($to);
     if ($this->conversationWithBothParticipantsAlreadyExists($user1, $user2)) {
         return $this->view('A conversation with those users already exists');
     }
     $conversationHandler = $this->get('messenger.conversation_handler');
     $conversation = $conversationHandler->createConversation($user1, $user2);
     $em->persist($conversation);
     $em->flush();
     return $this->view($this->populateConversationValueObject($conversation));
 }
예제 #2
0
 /**
  * @ApiDoc(
  *  resource = true,
  *  description = "Returns all messages of a given user",
  *  statusCodes = {
  *      200 = "Returned when sucessful",
  *      404 = "Returned when no messages are found"
  *  }
  * )
  *
  * @param Request $request
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function getMessagesAction(Request $request)
 {
     $em = $this->getManager();
     $user = LoginApiController::checkAuthentication($request, $em);
     $messageRepository = $this->getMessageRepository();
     if (null === $user) {
         throw new NotFoundHttpException('The user associated with the given api key does not exist');
     }
     /** @var Message[] $messagesFromBase */
     $messagesFromBase = $messageRepository->findByUser($user->getId());
     if (empty($messagesFromBase)) {
         throw new NotFoundHttpException('No message found');
     }
     $messages = [];
     foreach ($messagesFromBase as $message) {
         $messages[] = $this->populateMessageValueObject($message);
     }
     $view = $this->view($messages);
     return $this->handleView($view);
 }
 /**
  * @ApiDoc(
  *  resource = true,
  *  description = "Post a new message NEED X-AUTH-TOKEN",
  *  statusCodes = {
  *      200 = "Returned when successful",
  *      403 = "Returned when forbidden"
  *  }
  * )
  *
  * @param ParamFetcher $paramFetcher
  * @param Request      $request
  *
  * @return View
  *
  * @throws \HttpInvalidParamException
  *
  * @RequestParam(name="to", nullable=true, description="Message receiver")
  * @RequestParam(name="text", nullable=true, description="Message content")
  * @RequestParam(name="type", nullable=true, description="Message type")
  * @RequestParam(name="conversationId", nullable=true, description="Id the of conversation")
  */
 public function postAction(ParamFetcher $paramFetcher, Request $request)
 {
     $em = $this->getManager();
     $from = LoginApiController::checkAuthentication($request, $em);
     $message = new Message();
     // Conversation
     $conversation = $this->handleConversation($from, $paramFetcher);
     $message->setConversation($conversation);
     // Type
     $message = $this->handleMessageType($message, $paramFetcher->get('type'));
     // Text
     $message->setText($paramFetcher->get('text'));
     // User
     $message->setUser($from);
     $em->persist($message);
     $em->persist($conversation);
     $em->flush();
     // Don't return the whole message with useless and/or confidential informations
     // Just fill a ValueObject
     $messageValueObject = $this->populateMessageValueObject($message, $from);
     return $this->view($messageValueObject);
 }