Сервис каталога

Общая информация

Сервис предоставляет функционал для работы с каталогом товаров и групп, включая получение данных о группах, товарах и их дополнительных характеристиках.


Эндпоинты

1. Получение полного каталога

Описание: Возвращает весь каталог, включая список групп и товаров.

  • URL: /api/v1/catalog
  • Метод: GET
  • Тело запроса: отсутствует
  • Ответы:
    • 200 OK: Успешный ответ с данными каталога.
      {
        "products": [
          {
            "id": "string",
            "name": "string",
            "nameTo": "string",
            "code": "string",
            "parentGroup": "string",
            "price": "number",
            "oldPrice": "number",
            "composition": [
              {
                "name": "string",
                "description": "string",
                "image": "string"
              }
            ],
            "weight": "number",
            "countInSet": "number",
            "count": "number",
            "isSamaraHidden": "boolean",
            "isNovokujbyshevskHidden": "boolean",
            "isTolyattiHidden": "boolean",
            "maxPerPositionInOrder": "number",
            "order": "number",
            "energyAmount": "number",
            "fiberAmount": "number",
            "fatAmount": "number",
            "carbohydrateAmount": "number",
            "additionalInfo": {
              "filters": [
                {
                  "name": "string",
                  "code": "string"
                }
              ],
              "allergens": [
                {
                  "name": "string",
                  "code": "string"
                }
              ]
            },
            "slug": "string",
            "likesCount": "number",
            "isLiked": "boolean",
            "description": "string",
            "image": "string",
            "createdAt": "string"
          }
        ],
        "groups": [
          {
            "id": "string",
            "name": "string",
            "slug": "string",
            "parentGroup": "string",
            "isIncludedInMenu": "number",
            "order": "number",
            "additionalInfo": {
              "isServiceGroup": "boolean"
            },
            "isGroupModifier": "number",
            "image": "string",
            "nameTo": "string"
          }
        ]
      }
      
    • 500 Internal Server Error: Что-то пошло не так.

2. Получение списка групп

Описание: Возвращает список групп каталога.

  • URL: /api/v1/catalog/group
  • Метод: GET
  • Тело запроса: отсутствует
  • Ответы:
    • 200 OK: Список групп.
      [
        {
          "id": "string",
          "name": "string",
          "slug": "string",
          "parentGroup": "string",
          "isIncludedInMenu": "number",
          "order": "number",
          "additionalInfo": {
            "isServiceGroup": "boolean"
          },
          "isGroupModifier": "number",
          "image": "string",
          "nameTo": "string"
        }
      ]
      
    • 500 Internal Server Error: Что-то пошло не так.

3. Получение списка товаров

Описание: Возвращает список товаров каталога.

  • URL: /api/v1/catalog/product
  • Метод: GET
  • Тело запроса: отсутствует
  • Ответы:
    • 200 OK: Список товаров.
      [
        {
          "id": "string",
          "name": "string",
          "nameTo": "string",
          "code": "string",
          "parentGroup": "string",
          "price": "number",
          "oldPrice": "number",
          "composition": [
            {
              "name": "string",
              "description": "string",
              "image": "string"
            }
          ],
          "weight": "number",
          "countInSet": "number",
          "count": "number",
          "isSamaraHidden": "boolean",
          "isNovokujbyshevskHidden": "boolean",
          "isTolyattiHidden": "boolean",
          "maxPerPositionInOrder": "number",
          "order": "number",
          "energyAmount": "number",
          "fiberAmount": "number",
          "fatAmount": "number",
          "carbohydrateAmount": "number",
          "additionalInfo": {
            "filters": [
              {
                "name": "string",
                "code": "string"
              }
            ],
            "allergens": [
              {
                "name": "string",
                "code": "string"
              }
            ]
          },
          "slug": "string",
          "likesCount": "number",
          "isLiked": "boolean",
          "description": "string",
          "image": "string",
          "createdAt": "string"
        }
      ]
      
    • 500 Internal Server Error: Что-то пошло не так.

Логика работы

Сервисные методы

  • getCatalogCache: Кэширует и возвращает текущий каталог, включая товары и группы.
  • getGroupsAll: Получает все группы каталога, сортирует их и обрабатывает дополнительные данные.
  • getProductsAll: Получает все товары каталога, фильтрует и обрабатывает дополнительные данные.
  • getProductBySlug(slug): Возвращает товар по его slug.
  • getProductById(id): Возвращает товар по его ID.

Дополнительная информация

Мониторинг каталога

Класс CatalogMonitor из модуля init.catalog.js предоставляет функционал для отслеживания изменений в каталоге. Основные методы:

  • start(): Запускает мониторинг каталога.
  • stop(): Останавливает мониторинг каталога.
  • checkCatalogUpdate(): Проверяет обновления каталога и обновляет хеш при изменениях.