forked from admin/zeropost-engine
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 дней)
This commit is contained in:
@@ -18,6 +18,8 @@ const photoSearchRoutes = require('./src/routes/photo-search');
|
||||
const scheduledPostsRoutes = require('./src/routes/scheduledPosts');
|
||||
const channelStatsRoutes = require('./src/routes/channelStats');
|
||||
const calendarRoutes = require('./src/routes/calendar');
|
||||
const channelCategoriesRoutes = require('./src/routes/channelCategories');
|
||||
const channelAutogenRoutes = require('./src/routes/channelAutogen');
|
||||
const metricsRoutes = require('./src/routes/metrics');
|
||||
const usageRoutes = require('./src/routes/usage');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user