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