fix(auto-approve): публиковать черновики старше сегодняшних 07:00 МСК
Раньше правило было '< CURRENT_DATE' — черновики, созданные ночью после полуночи, считались сегодняшними и ждали лишние сутки (не публиковались на ближайшем 07:00). Теперь граница — сегодняшние 07:00 МСК: ночные и вечерние (17:00) попадают, дневная свежая партия — нет. Также пофикшен catch-up: вызывал несуществующий runAutoApprove() вместо runDraftAutoApprove().
This commit is contained in:
+10
-10
@@ -43,16 +43,16 @@ async function getTodaySlots() {
|
||||
|
||||
async function runDraftAutoApprove() {
|
||||
try {
|
||||
// Берём самые СТАРЫЕ черновики, созданные НЕ сегодня (по МСК).
|
||||
// Раньше окно было «строго вчера» + LIMIT 4 — поэтому всё, что не одобрили
|
||||
// на следующий день (дубли, излишки), оставалось в draft навсегда и копилось.
|
||||
// Теперь дренируем backlog по 4 старейших в день, при этом сегодняшнюю свежую
|
||||
// партию не трогаем (она станет доступна завтра). В связке с дедупом автогена
|
||||
// (макс 4/день) это даёт устойчивое состояние без накопления.
|
||||
// Берём черновики, созданные ДО сегодняшних 07:00 МСК (границы текущего цикла).
|
||||
// Раньше было `< CURRENT_DATE` (строго прошлая календарная дата) — из-за этого
|
||||
// черновики, сгенерённые ночью ПОСЛЕ полуночи (напр. в 01:00), считались
|
||||
// «сегодняшними» и ждали ещё сутки. Новое правило: всё, что старше сегодняшних
|
||||
// 07:00, публикуется на этом тике; свежую партию (генерация в 17:00) не трогаем —
|
||||
// она старше 07:00 уже на следующий день. Дренаж backlog по 4 старейших/день.
|
||||
const { rows: drafts } = await query(
|
||||
`SELECT id, title, category, created_at FROM articles
|
||||
WHERE status='draft'
|
||||
AND created_at AT TIME ZONE 'Europe/Moscow' < CURRENT_DATE::date
|
||||
AND created_at < ((date_trunc('day', now() AT TIME ZONE 'Europe/Moscow') + INTERVAL '7 hours') AT TIME ZONE 'Europe/Moscow')
|
||||
ORDER BY created_at ASC
|
||||
LIMIT 4`
|
||||
);
|
||||
@@ -125,11 +125,11 @@ function startDraftAutoApproveScheduler() {
|
||||
const { rows: missed } = await query(`
|
||||
SELECT COUNT(*) AS cnt FROM articles
|
||||
WHERE status='draft'
|
||||
AND created_at AT TIME ZONE 'Europe/Moscow' < CURRENT_DATE::date
|
||||
AND created_at < ((date_trunc('day', now() AT TIME ZONE 'Europe/Moscow') + INTERVAL '7 hours') AT TIME ZONE 'Europe/Moscow')
|
||||
`);
|
||||
if (parseInt(missed[0]?.cnt, 10) > 0) {
|
||||
console.log('[DraftApprove] catch-up при старте: найдены пропущенные вчерашние черновики (' + missed[0].cnt + ' шт)');
|
||||
await runAutoApprove();
|
||||
console.log('[DraftApprove] catch-up при старте: найдены пропущенные черновики (' + missed[0].cnt + ' шт)');
|
||||
await runDraftAutoApprove();
|
||||
}
|
||||
} catch (err) { console.error('[DraftApprove] catch-up error:', err.message); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user