Lines 100.00% 9 / 9
Methods 100.00% 5 / 5
Classes 100.00% 1 / 1
Name Lines Methods CRAP
 createJsonResponse 100.00% 1 / 1 100.00% 1 / 1 1
 createJsonEnvelopeResponse 100.00% 2 / 2 100.00% 1 / 1 1
 createRedirectResponse 100.00% 2 / 2 100.00% 1 / 1 1
 createEventStreamResponse 100.00% 2 / 2 100.00% 1 / 1 1
 createStreamResponse 100.00% 2 / 2 100.00% 1 / 1 1
20final class LucentResponseFactory
21{
22    /**
23     * Create a JSON response.
24     *
25     * @param mixed $data Data to JSON-encode as the body
26     * @param int $status HTTP status code
27     * @return ResponseInterface
28     */
29    public function createJsonResponse(mixed $data, int $status = 200): ResponseInterface
30    {
31        return Response::json($data, $status);
32    }
33
34    /**
35     * Create a JSON response with the legacy {message, outcome, status, content} envelope.
36     *
37     * @param array $content The response content
38     * @param string $message The response message
39     * @param bool $outcome Whether the request succeeded
40     * @param int $status HTTP status code
41     * @return ResponseInterface
42     */
43    public function createJsonEnvelopeResponse(
44        array $content = [],
45        string $message = 'Request successfully executed.',
46        bool $outcome = true,
47        int $status = 200
48    ): ResponseInterface {
49        $response = new Response();
50        return $response->withJsonEnvelope($content, $message, $outcome, $status);
51    }
52
53    /**
54     * Create a redirect response.
55     *
56     * @param string $url The URL to redirect to
57     * @param int $status HTTP status code (default 302)
58     * @return ResponseInterface
59     */
60    public function createRedirectResponse(string $url, int $status = 302): ResponseInterface
61    {
62        $response = new Response();
63        return $response->withRedirect($url, $status);
64    }
65
66    /**
67     * Create an SSE (Server-Sent Events) response.
68     *
69     * @param Traversable $source A lazy iterable (Generator, Iterator, or
70     *                            IteratorAggregate e.g. LazyCollection)that
71     *                            yields SSE event payloads
72     * @return ResponseInterface
73     */
74    public function createEventStreamResponse(Traversable $source): ResponseInterface
75    {
76        $response = new Response();
77        return $response->withEventStream($source);
78    }
79
80    /**
81     * Create a generic streaming response.
82     *
83     * @param callable|Traversable $source A callable or Traversable/Generator
84     * @param array $headers Additional headers
85     * @return ResponseInterface
86     */
87    public function createStreamResponse(callable|Traversable $source, array $headers = []): ResponseInterface
88    {
89        $response = new Response();
90        return $response->withStream($source, $headers);
91    }
92}