searchDocumentationResponse.php•2.86 kB
<?php
declare(strict_types=1);
namespace OpenFGA\MCP\Responses;
use JsonSerializable;
use OpenFGA\MCP\Models\SearchResult;
use Override;
use function array_map;
use function count;
final readonly class searchDocumentationResponse extends AbstractResponse implements JsonSerializable
{
    /**
     * @param string              $query        The search query that was executed
     * @param array<SearchResult> $results      Array of search results
     * @param string              $status       Status message indicating successful search
     * @param int|null            $totalResults Total number of results found
     */
    public function __construct(
        private string $query,
        private array $results,
        private string $status = '✅ Search Results',
        private ?int $totalResults = null,
    ) {
    }
    /**
     * Create and serialize the response in one step.
     *
     * @param  string                                                                                                                                                                             $query
     * @param  array<SearchResult>                                                                                                                                                                $results
     * @param  string                                                                                                                                                                             $status
     * @param  int|null                                                                                                                                                                           $totalResults
     * @return array{status: string, query: string, total_results: int, results: array<array{chunk_id: string, sdk: string, score: float, preview: string, metadata: array<mixed>, uri: string}>}
     */
    public static function create(
        string $query,
        array $results,
        string $status = '✅ Search Results',
        ?int $totalResults = null,
    ): array {
        return (new self($query, $results, $status, $totalResults))->jsonSerialize();
    }
    /**
     * Serialize the response to JSON format.
     *
     * @return array{status: string, query: string, total_results: int, results: array<array{chunk_id: string, sdk: string, score: float, preview: string, metadata: array<mixed>, uri: string}>}
     */
    #[Override]
    public function jsonSerialize(): array
    {
        return [
            'status' => $this->status . ' for: ' . $this->query,
            'query' => $this->query,
            'total_results' => $this->totalResults ?? count($this->results),
            'results' => array_map(static fn (SearchResult $result): array => $result->jsonSerialize(), $this->results),
        ];
    }
}