getBody()->write(json_encode($data, JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE)); return $response ->withStatus($status) ->withHeader('Content-Type', 'application/json'); } public static function success( ResponseInterface $response, mixed $data = null, string $message = 'OK', int $status = 200 ): ResponseInterface { return self::json($response, [ 'success' => true, 'message' => $message, 'data' => $data, ], $status); } public static function error( ResponseInterface $response, string $message, int $status = 400, array $errors = [] ): ResponseInterface { $body = [ 'success' => false, 'message' => $message, ]; if (!empty($errors)) { $body['errors'] = $errors; } return self::json($response, $body, $status); } public static function notFound(ResponseInterface $response, string $message = 'Not found'): ResponseInterface { return self::error($response, $message, 404); } public static function unauthorized(ResponseInterface $response, string $message = 'Unauthorized'): ResponseInterface { return self::error($response, $message, 401); } public static function forbidden(ResponseInterface $response, string $message = 'Forbidden'): ResponseInterface { return self::error($response, $message, 403); } public static function validationError( ResponseInterface $response, array $errors ): ResponseInterface { return self::error($response, 'Validation failed', 422, $errors); } }