4.2 KiB
4.2 KiB
MongoDB Schema Update - Unleash Support
🐛 Проблема
При сохранении воронки с AB тестами в правилах навигации возникала ошибка:
Error: Funnel validation failed:
funnelData.screens.1.navigation.rules.0.conditions.0.conditionType:
`unleash` is not a valid enum value for path `conditionType`.
✅ Решение
Обновлена схема MongoDB в src/lib/models/Funnel.ts:
Было:
const NavigationConditionSchema = new Schema({
screenId: { type: String, required: true },
conditionType: {
type: String,
enum: ["options", "values"], // ❌ "unleash" отсутствует
default: "options",
},
operator: {
type: String,
enum: ["includesAny", "includesAll", "includesExactly", "equals"],
default: "includesAny",
},
optionIds: [{ type: String }],
values: [{ type: String }],
// ❌ Нет полей для Unleash
}, { _id: false });
Стало:
const NavigationConditionSchema = new Schema({
screenId: { type: String, required: true },
conditionType: {
type: String,
enum: ["options", "values", "unleash"], // ✅ Добавлен "unleash"
default: "options",
},
operator: {
type: String,
enum: ["includesAny", "includesAll", "includesExactly", "equals"],
default: "includesAny",
},
optionIds: [{ type: String }],
values: [{ type: String }],
// ✅ Добавлены поля для Unleash AB тестов
unleashFlag: { type: String },
unleashVariants: [{ type: String }],
}, { _id: false });
📋 Изменения
- conditionType enum - добавлен
"unleash" - unleashFlag - название флага из Unleash (String)
- unleashVariants - массив ожидаемых вариантов (Array of Strings)
🔄 Применение изменений
Development:
Модель автоматически пересоздается в dev режиме:
if (process.env.NODE_ENV !== "production" &&
typeof mongoose.models.Funnel !== "undefined") {
mongoose.deleteModel("Funnel");
}
Действия:
- Остановите dev сервер (если запущен)
- Запустите заново:
npm run dev:full - Схема обновится автоматически
Production:
В production моделям нужна миграция или ручное обновление:
# Если нужно, можно добавить миграцию
# Но благодаря { strict: false } новые поля будут приниматься
✅ Проверка
После обновления схемы:
npm run dev:full
# Откройте админку
# Создайте правило навигации с AB тестом
# Сохраните воронку
# ✅ Должно сохраниться без ошибок
📊 Пример данных в MongoDB
{
"navigation": {
"rules": [
{
"conditions": [
{
"screenId": "gender",
"conditionType": "unleash",
"operator": "equals",
"unleashFlag": "onboarding-flow-test",
"unleashVariants": ["short"]
}
],
"nextScreenId": "payment"
}
]
}
}
🎯 Совместимость
Обратная совместимость:
✅ Существующие воронки продолжают работать:
conditionType: "options"- работает как преждеconditionType: "values"- работает как прежде- Новые поля опциональны
Схема FunnelHistory:
❌ Не требует изменений:
- Использует
Schema.Types.MixedдляfunnelSnapshot - Нет жесткой валидации enum
📝 Связанные файлы
/src/lib/models/Funnel.ts- ✏️ Обновлена схема/src/lib/models/FunnelHistory.ts- ✅ Изменений не требуется/src/lib/funnel/types.ts- ✅ TypeScript типы уже обновлены
Дата: 2025-01-20
Статус: ✅ Готово