diff --git a/draftAutoApprove.js b/draftAutoApprove.js index b533f2f..a531515 100644 --- a/draftAutoApprove.js +++ b/draftAutoApprove.js @@ -43,13 +43,16 @@ async function getTodaySlots() { async function runDraftAutoApprove() { try { - // Берём только черновики созданные ВЧЕРА (между 00:00 и 23:59 вчера МСК) - // Это именно те, что сгенерировались накануне и ждут одобрения + // Берём черновики созданные ВЧЕРА по МСК (между 00:00 и 23:59 вчера). + // Строго только вчерашние — чтобы при повторном деплое/рестарте не захватить + // старые черновики и не создать очередь на несколько дней. const { rows: drafts } = await query( `SELECT id, title, category, created_at FROM articles WHERE status='draft' - AND created_at >= NOW() - INTERVAL '36 hours' - ORDER BY created_at ASC` + AND created_at AT TIME ZONE 'Europe/Moscow' >= (CURRENT_DATE - INTERVAL '1 day')::date + AND created_at AT TIME ZONE 'Europe/Moscow' < CURRENT_DATE::date + ORDER BY created_at ASC + LIMIT 4` ); if (!drafts.length) { @@ -80,10 +83,14 @@ async function runDraftAutoApprove() { return; } - // Раскладываем черновики по свободным слотам (1 к 1) - for (let i = 0; i < drafts.length; i++) { + if (drafts.length > freeSlots.length) { + console.log(`[DraftApprove] черновиков ${drafts.length} > свободных слотов ${freeSlots.length} — лишние останутся в draft`); + } + + // Раскладываем черновики по свободным слотам (1 к 1, не больше числа слотов) + for (let i = 0; i < Math.min(drafts.length, freeSlots.length); i++) { const draft = drafts[i]; - const slot = freeSlots[i] || freeSlots[freeSlots.length - 1]; // если черновиков больше слотов — ставим в последний + const slot = freeSlots[i]; await query( `UPDATE articles SET status='published', published_at=$2 WHERE id=$1`,