예제 #1
0
 /**
  * {@inheritdoc}
  */
 public function inspect(InspectionRequest $request) : Inspection
 {
     $query = 'MATCH (parent:Message {identifier: {messageIdentifier}})-[:PARENT_MESSAGE*0..]-(message:Message) ' . 'OPTIONAL MATCH (message)<-[received:RECEIVED_MESSAGE]-(p:Peer) ' . 'OPTIONAL MATCH (message)-[sent:SENT_MESSAGE]-(sender:Peer) ' . 'OPTIONAL MATCH (message)-[:PARENT_MESSAGE*1]->(directParent:Message) ' . 'WITH message, count(p) AS c, collect(p) AS peers, sender, collect(received) as receivedCollection, sent, directParent ' . 'RETURN message, sender, head(receivedCollection) AS received, sent, directParent AS parent, ' . 'CASE c WHEN 1 THEN peers[0] ELSE head(filter(x in peers where x.virtual IS NULL)) END AS receiver ' . 'ORDER BY received.start ASC';
     $response = $this->getResponse($this->client->sendCypherQuery($query, ['messageIdentifier' => (string) $request->getMessageIdentifier()]));
     $profiles = array_map(function (array $row) {
         return $this->createProfile($row);
     }, $response);
     return new Inspection($profiles);
 }
 /**
  * {@inheritdoc}
  */
 public function apply(Request $request, ParamConverter $configuration)
 {
     if (null === ($rawMessageIdentifier = $request->query->get('message_identifier'))) {
         throw new BadRequestHttpException('The `message_identifier` parameter is required');
     }
     $messageIdentifier = StringMessageIdentifier::fromString($rawMessageIdentifier);
     $inspectionRequest = InspectionRequest::fromMessageIdentifier($messageIdentifier);
     $request->attributes->set($configuration->getName(), $inspectionRequest);
 }