47e301a5b8
- scripts/create_biz_brain_courses.sql: идемпотентное создание 5 курсов (biz-brain-base, biz-brain-premium, module-caldav, module-ai-pdf, module-legacy) - scripts/verify_biz_brain_grant.sh: проверка /api/internal/grant (Нужен Дмитрий для запуска на проде) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
129 lines
6.4 KiB
PL/PgSQL
129 lines
6.4 KiB
PL/PgSQL
-- ============================================================
|
||
-- WS6: Создание курсов-носителей «Второй мозг для бизнеса»
|
||
-- ============================================================
|
||
-- ВАЖНО: Выполнять НА ПРОДЕ только после проверки на staging.
|
||
-- Запускать через SSH: psql <db_url> -f create_biz_brain_courses.sql
|
||
-- Идемпотентно: INSERT IGNORE по slug (уникальный ключ).
|
||
--
|
||
-- Курсы-носители (5 штук):
|
||
-- biz-brain-base — основной курс (ZIP хранилища + видео-онбординг)
|
||
-- biz-brain-premium — премиум-раздел (консультации, инструкции по расширениям)
|
||
-- module-caldav — расширение CalDAV-календарь
|
||
-- module-ai-pdf — расширение AI-разбор PDF
|
||
-- module-legacy — расширение Legacy-миграция
|
||
-- ============================================================
|
||
|
||
BEGIN;
|
||
|
||
-- Функция для генерации cuid-подобного ID (через gen_random_uuid как fallback)
|
||
-- В реальности Prisma генерирует cuid автоматически — используем это свойство.
|
||
-- Если у вас Postgres 14+: gen_random_uuid() дает UUID, но Prisma ожидает cuid.
|
||
-- Безопаснее создать через Prisma API или LMS-Admin.
|
||
|
||
-- Проверяем что slug ещё не существует перед вставкой
|
||
DO $$
|
||
BEGIN
|
||
-- biz-brain-base
|
||
IF NOT EXISTS (SELECT 1 FROM "Course" WHERE slug = 'biz-brain-base') THEN
|
||
INSERT INTO "Course" (id, slug, title, description, published, "allowAudio", "order", "createdAt", "updatedAt")
|
||
VALUES (
|
||
'clbizbrainbase0000001',
|
||
'biz-brain-base',
|
||
'Второй мозг для бизнеса — Базовый',
|
||
'Готовое хранилище Obsidian для собственника: CRM-воронка, финансовый кокпит, журнал решений, витрина команды. Разовый платёж, бессрочный доступ.',
|
||
false, -- опубликовать вручную после наполнения контентом
|
||
false,
|
||
100,
|
||
NOW(),
|
||
NOW()
|
||
);
|
||
RAISE NOTICE 'Создан курс biz-brain-base';
|
||
ELSE
|
||
RAISE NOTICE 'Курс biz-brain-base уже существует — пропуск';
|
||
END IF;
|
||
|
||
-- biz-brain-premium
|
||
IF NOT EXISTS (SELECT 1 FROM "Course" WHERE slug = 'biz-brain-premium') THEN
|
||
INSERT INTO "Course" (id, slug, title, description, published, "allowAudio", "order", "createdAt", "updatedAt")
|
||
VALUES (
|
||
'clbizbrainprem0000002',
|
||
'biz-brain-premium',
|
||
'Второй мозг для бизнеса — Премиум (инструкции и консультации)',
|
||
'Раздел для премиум-покупателей: инструкции по установке расширений, запись на 2 персональные консультации, ответы на частые вопросы.',
|
||
false,
|
||
false,
|
||
101,
|
||
NOW(),
|
||
NOW()
|
||
);
|
||
RAISE NOTICE 'Создан курс biz-brain-premium';
|
||
ELSE
|
||
RAISE NOTICE 'Курс biz-brain-premium уже существует — пропуск';
|
||
END IF;
|
||
|
||
-- module-caldav
|
||
IF NOT EXISTS (SELECT 1 FROM "Course" WHERE slug = 'module-caldav') THEN
|
||
INSERT INTO "Course" (id, slug, title, description, published, "allowAudio", "order", "createdAt", "updatedAt")
|
||
VALUES (
|
||
'clmodulecaldav00000003',
|
||
'module-caldav',
|
||
'Расширение: CalDAV-календарь',
|
||
'Двусторонняя синхронизация задач и событий Obsidian с Google Calendar / Apple Calendar через CalDAV. Плагин Full Calendar Remastered v0.13.2.',
|
||
false,
|
||
false,
|
||
200,
|
||
NOW(),
|
||
NOW()
|
||
);
|
||
RAISE NOTICE 'Создан курс module-caldav';
|
||
ELSE
|
||
RAISE NOTICE 'Курс module-caldav уже существует — пропуск';
|
||
END IF;
|
||
|
||
-- module-ai-pdf
|
||
IF NOT EXISTS (SELECT 1 FROM "Course" WHERE slug = 'module-ai-pdf') THEN
|
||
INSERT INTO "Course" (id, slug, title, description, published, "allowAudio", "order", "createdAt", "updatedAt")
|
||
VALUES (
|
||
'clmoduleaipdf000000004',
|
||
'module-ai-pdf',
|
||
'Расширение: AI-разбор PDF и исследований',
|
||
'Промпты А1/А2/А3 для структурированного разбора PDF-документов, статей и исследований с помощью AI. Включает эталонный прогон и демо-PDF.',
|
||
false,
|
||
false,
|
||
201,
|
||
NOW(),
|
||
NOW()
|
||
);
|
||
RAISE NOTICE 'Создан курс module-ai-pdf';
|
||
ELSE
|
||
RAISE NOTICE 'Курс module-ai-pdf уже существует — пропуск';
|
||
END IF;
|
||
|
||
-- module-legacy
|
||
IF NOT EXISTS (SELECT 1 FROM "Course" WHERE slug = 'module-legacy') THEN
|
||
INSERT INTO "Course" (id, slug, title, description, published, "allowAudio", "order", "createdAt", "updatedAt")
|
||
VALUES (
|
||
'clmodulelegacy00000005',
|
||
'module-legacy',
|
||
'Расширение: Legacy-миграция из Evernote / Notion',
|
||
'Пошаговые инструкции и чеклист пост-обработки для переноса данных из Evernote и Notion в хранилище «Второй мозг для бизнеса».',
|
||
false,
|
||
false,
|
||
202,
|
||
NOW(),
|
||
NOW()
|
||
);
|
||
RAISE NOTICE 'Создан курс module-legacy';
|
||
ELSE
|
||
RAISE NOTICE 'Курс module-legacy уже существует — пропуск';
|
||
END IF;
|
||
END
|
||
$$;
|
||
|
||
COMMIT;
|
||
|
||
-- Проверка результата
|
||
SELECT slug, title, published, "order" FROM "Course"
|
||
WHERE slug IN ('biz-brain-base', 'biz-brain-premium', 'module-caldav', 'module-ai-pdf', 'module-legacy')
|
||
ORDER BY "order";
|