User: ВОТ ТИП ОТЗЫВВОВ export type CardReviewResponse = {
    id: number;
    message: string;
    rating: number;
    media: Array<(string)>;
    verifiedPurchase: boolean;
    createdAt: string;
    replyToId: number | null;
    userId: number;
    user: UserReviewResponse;
    replies?: Array<CardReviewResponse>;
}; СДЕЛАЙ МНЕ json ld import { CardReviewResponse } from "@/src/openapi/requests";

type ProductSchemaProps = {
  reviews: Array<CardReviewResponse>;
};

const ReviewsSchema = ({ reviews }: ProductSchemaProps) => {
  const jsonLd = {};

  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
    />
  );
};

export default ReviewsSchema;

Assistant:  ППонял, нужно на основе массива отзывов `CardReviewResponse` создать корректный JSON-LD для schema.org `Review`, чтобы можно было положить его в `<script type="application/ld+json">`.

Ниже пример решения, который рекурсивно обрабатывает отзывы и вложенные ответы (`replies`) в структуру JSON-LD для Review, с учетом всех ключевых полей:

```tsx
import { CardReviewResponse } from "@/src/openapi/requests";

type ProductSchemaProps = {
  reviews: Array<CardReviewResponse>;
};

const ReviewsSchema = ({ reviews }: ProductSchemaProps) => {
  // Рекурсивная функция преобразования CardReviewResponse в schema.org Review
  const mapReview = (review: CardReviewResponse): any => {
    return {
      "@type": "Review",
      "author": {
        "@type": "Person",
        "name": review.user.name || `User ${review.userId}`,
      },
      "datePublished": review.createdAt,
      "reviewBody": review.message,
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": review.rating,
        "bestRating": 5,
        "worstRating": 1
      },
      "interactionStatistic": {
        "@type": "InteractionCounter",
        "interactionType": { "@type": "CommunicateAction" },
        "userInteractionCount": review.replies ? review.replies.length : 0
      },
      "isBasedOn": review.verifiedPurchase ? "VerifiedPurchase" : undefined,
      "publisher": {
        "@type": "Organization",
        "name": "YourCompanyName" // сюда можно поставить имя компании/сайта
      },
      // Добавим вложенные ответы как review — reviews
      ...(review.replies && review.replies.length > 0
        ? { "comment": review.replies.map(mapReview) }
        : {}),
      "image": review.media.length > 0 ? review.media : undefined,
    };
  };

  // Схема с массивом отзывов
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "Review",
    // так как несколько отзывов — используем Review для каждого,
    // объединяем в массив в reviews, например обернув в Product
    // Типичный вариант — Product с reviews
    // Если нужен просто список reviews без Product, тогда можно дать просто массив
  };

  // Чаще reviews кладут как свойство объекта Product или Thing
  const jsonLdSchema = {
    "@context": "https://schema.org",
    "@type": "Product",
    "name": "Product Name Here", // можно передавать через props, если нужно
    "review": reviews.map(mapReview)
  };

  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLdSchema, null, 2) }}
    />
  );
};

export default ReviewsSchema;
```

---

### Ключевые моменты:
- Обернул отзывы в объект типа `Product` с полем `"review"`, которое принимает массив отзывов.
- Каждый отзыв по `schema.org/Review` с автором, рейтингом, текстом, датой и вложенными комментариями.
- Вложенные ответы (если есть) кладутся в поле `comment` как массив Review.
- `image` — массив media (если не пустой).
- `isBasedOn` с простым строковым значением для индикатора VerifiedPurchase (в оригинальной спецификации такого поля нет, обычно там `associatedMedia` или `reviewAspect`, можно заменить или убрать, по необходимости).
- Можно дополнительно передать название продукта (name), а также данные издателя.

Если нужно дать задачу более узко либо оформить например только один отзыв — скажите, могу помочь.
User: что это  const jsonLd = {     "@context": "https://schema.org",     "@type": "Review",   };
Assistant:  ``const jsonLd = { "@context": "https://schema.org", "@type": "Review" };`

— это просто пример минимального объекта JSON-LD, который задает контекст и тип сущности для схемы microdata/JSON-LD согласно спецификации schema.org.

**Подробно:**

- `@context: "https://schema.org"` — указывает, что используем словарь (контекст) schema.org, благодаря которому поисковые системы понимают семантику данных.
- `@type: "Review"` — говорит, что описываем сущность типа "Review" (отзыв).

В твоём примере этот объект был промежуточным шаблоном, который потом нужно было заполнить реальными данными из отзывов (id, message, rating и т.д.).

То есть это начальный "каркас" структуры, куда надо вставлять остальные поля, чтобы получилась валидная схема для SEO. Без добавления свойств объект мало полезен — просто говорит "здесь Review", но ничего про него не объясняет.

В моём полном варианте я этот объект уже переопределил и дополнил реальными данными, поэтому переменная `jsonLd` с таким простым значением не нужна. Ее можно убрать или использовать, если нужна простая заглушка.

---

Если коротко: это стартовый объект JSON-LD с типом "Review", шаблон для наполнения нужными данными.
User: поч ты написал его таким и не юзаешь зач он в коде 
Assistant: