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