/** * @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)); }
/** * @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); }