fix(draftAutoApprove): строго вчерашние черновики, LIMIT 4, не больше слотов
Проблема: брали черновики за 36ч → при нескольких деплоях за день или при накоплении старых черновиков draftAutoApprove раскладывал их все по слотам подряд → очередь на несколько дней вместо 1. Исправления: - WHERE created_at AT TIME ZONE 'Europe/Moscow' вчерашний день (00:00-23:59) - LIMIT 4 — не больше количества слотов в день - раскладываем только min(drafts, freeSlots) черновиков, лишние остаются draft - если черновиков > слотов — пишем в лог предупреждение
This commit is contained in:
+14
-7
@@ -43,13 +43,16 @@ async function getTodaySlots() {
|
|||||||
|
|
||||||
async function runDraftAutoApprove() {
|
async function runDraftAutoApprove() {
|
||||||
try {
|
try {
|
||||||
// Берём только черновики созданные ВЧЕРА (между 00:00 и 23:59 вчера МСК)
|
// Берём черновики созданные ВЧЕРА по МСК (между 00:00 и 23:59 вчера).
|
||||||
// Это именно те, что сгенерировались накануне и ждут одобрения
|
// Строго только вчерашние — чтобы при повторном деплое/рестарте не захватить
|
||||||
|
// старые черновики и не создать очередь на несколько дней.
|
||||||
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 >= NOW() - INTERVAL '36 hours'
|
AND created_at AT TIME ZONE 'Europe/Moscow' >= (CURRENT_DATE - INTERVAL '1 day')::date
|
||||||
ORDER BY created_at ASC`
|
AND created_at AT TIME ZONE 'Europe/Moscow' < CURRENT_DATE::date
|
||||||
|
ORDER BY created_at ASC
|
||||||
|
LIMIT 4`
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!drafts.length) {
|
if (!drafts.length) {
|
||||||
@@ -80,10 +83,14 @@ async function runDraftAutoApprove() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Раскладываем черновики по свободным слотам (1 к 1)
|
if (drafts.length > freeSlots.length) {
|
||||||
for (let i = 0; i < drafts.length; i++) {
|
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 draft = drafts[i];
|
||||||
const slot = freeSlots[i] || freeSlots[freeSlots.length - 1]; // если черновиков больше слотов — ставим в последний
|
const slot = freeSlots[i];
|
||||||
|
|
||||||
await query(
|
await query(
|
||||||
`UPDATE articles SET status='published', published_at=$2 WHERE id=$1`,
|
`UPDATE articles SET status='published', published_at=$2 WHERE id=$1`,
|
||||||
|
|||||||
Reference in New Issue
Block a user