Aleksei Pavlov 4ec3239dc3 feat(postcast): система категорий + банк тем + гибкая ротация
Новая архитектура автогенерации (перенос и доработка из ZeroPost):

БД (3 новые таблицы + поля в posts):
  channel_categories — категории принадлежат каналу пользователя.
    CRUD по slug (уникален в рамках канала), цвет, иконка, sort_order.
  category_topics — банк тем с жанровыми маркерами:
    [ТУТОРИАЛ][СРАВНЕНИЕ][МНЕНИЕ][ДАЙДЖЕСТ][КЕЙС][НОВОСТЬ]
    genre: detected auto или задан явно.
    Атомарный захват через UPDATE...FOR UPDATE SKIP LOCKED (нет дублей).
  channel_autogen_settings — настройки per-канал:
    posts_per_day: 1-20 (пользователь выбирает сам, 3 по умолчанию)
    run_hour/run_minute, rotation_mode, last_run_at
  best_time_stats — заготовка под аналитику лучшего времени.
  posts: +source_topic, +source_category_id, +genre

Ротация (src/services/autogenNew.js):
  getTodayCategoryIds: скользящее окно размером posts_per_day.
  Если категорий <= posts_per_day — берём все.
  Если больше — сдвиг на 1 каждый день (dayOfYear % total).
  Пример: 8 категорий, 3 поста/день → каждый день другие 3 категории.
  Предпросмотр: GET /api/channels/:id/autogen/rotation?days=7

Фиксы из ZeroPost (не будет тех же ошибок):
  pg_advisory_lock по (channel_id, category_id) — нет параллельных дублей
  Двойная проверка после lock: уже генерировали сегодня?
  Промпт учитывает жанр ([ТУТОРИАЛ] → пошаговый гайд и т.д.)
  generateTopicsForCategory: AI генерит N тем с равномерным распределением жанров

API routes:
  GET/POST/PATCH/DELETE /api/channels/:id/categories
  GET/POST/PATCH/DELETE /api/channels/:id/categories/:catId/topics
  POST /api/channels/:id/categories/:catId/topics/generate (AI, async)
  GET/POST/PATCH        /api/channels/:id/autogen
  POST                  /api/channels/:id/autogen/run
  GET                   /api/channels/:id/autogen/today (черновики за сегодня)
  GET                   /api/channels/:id/autogen/rotation (preview на N дней)
2026-06-24 19:22:36 +03:00
2026-05-30 18:27:07 +00:00

zeropost-engine

ZeroPost - zeropost-engine

S
Description
ZeroPost - zeropost-engine
Readme 901 KiB
Languages
JavaScript 100%