Skip to content

Конфигурация - Products (продукты)

Источник: config/products.json. Доступ к данным: infrastructure/config/products.go (через ConfigFactory().Products()).

Схема данных (фактическая):

  • products: массив Product
  • Product:
    • id: int
    • title: map<locale, string>
    • description: map<locale, string>
    • image: string (путь к изображению)
    • prices: map<string, { currency: string, value: number, merchant?: string }>
      • Ключ карты:
        • строковый api_type ("100", "30", "930", ...);
        • или тип платформы ("vk", "ok", "fs", ...);
        • для профилей мерчанта используется суффикс /profile: "930/default", "930/xsolla_ptr", "vk/promo". Именно ключ профиля (merchant_profiles.<profile>) участвует в маршруте /ext/{api_type}/{profile}/....
      • Поле merchant внутри значения позволяет явно указать профиль, если используется универсальный ключ без суффикса (например, "930" без /profile).

Логика разрешения цены (см. Product.GetPrice(apiType, platformType)):

  1. Ищется точное совпадение по api_type/profile, если передан профиль (например, "930/xsolla_secondary").
  2. Далее — просто api_type (например, "930").
  3. Затем — platformType/profile.
  4. И в конце — просто platformType (например, "vk"). Если ничего не найдено, цена не определена.

Пример (фрагмент из реального products.json):

json
{
  "products": [
    {
      "id": 2001,
      "title": { "en": "Coins: x200", "ru": "Монеты: x200" },
      "description": { "en": "Coins: x200", "ru": "Монеты: x200" },
      "image": "/logo.png",
      "prices": {
        "ok": { "currency": "OK", "value": 19 },
        "vk": { "currency": "VK", "value": 3 },
        "fs": { "currency": "FS", "value": 1 },
        "mm": { "currency": "MM", "value": 19 },
        "fb": { "currency": "USD", "value": 0.99 },
        "tg": { "currency": "XTR", "value": 3 },
        "100": { "currency": "RUB", "value": 19 },
        "930/default": { "currency": "RUB", "value": 379 },
        "930/xsolla_ptr": { "currency": "USD", "value": 4.99 },
        "vk": { "currency": "VK", "value": 3 }
      }
    }
  ]
}

Выдача в API:

  • V1: /v1/products/fetch — плоский список продуктов с локализованными полями и ценой профиля default.
  • V2: /v2/products — помимо базовой цены возвращает массив profile_prices[], где указаны все найденные профили (ключ profile, цена, валюта и флаг default). Клиент может выбрать нужный профиль, не делая дополнительных запросов.

Рекомендации:

  • Соблюдайте консистентность по ключам: если для платформы есть отдельное ценообразование, указывайте платформенный ключ; для общих случаев - api_type.
  • Локализуйте title/description; язык по умолчанию - en (см. DefaultProductLanguage).

Полная JSON Schema расположена в infrastructure/config/koanf/schemas/products.schema.json.