52 lines
2.0 KiB
PL/PgSQL
52 lines
2.0 KiB
PL/PgSQL
-- ============================================================
|
|
-- Migration: article_status_scheduling
|
|
-- Timestamp: 20260321080000
|
|
-- Adds: pending status support + scheduled_at column to both article tables
|
|
-- ============================================================
|
|
|
|
-- 1. Add scheduled_at to wp_imported_posts
|
|
ALTER TABLE public.wp_imported_posts
|
|
ADD COLUMN IF NOT EXISTS scheduled_at TIMESTAMPTZ,
|
|
ADD COLUMN IF NOT EXISTS submitted_for_review_at TIMESTAMPTZ;
|
|
|
|
-- 2. Add scheduled_at to native_articles
|
|
ALTER TABLE public.native_articles
|
|
ADD COLUMN IF NOT EXISTS scheduled_at TIMESTAMPTZ,
|
|
ADD COLUMN IF NOT EXISTS submitted_for_review_at TIMESTAMPTZ;
|
|
|
|
-- 3. Add status index for pending on both tables
|
|
CREATE INDEX IF NOT EXISTS idx_wp_imported_posts_status ON public.wp_imported_posts(status);
|
|
CREATE INDEX IF NOT EXISTS idx_wp_imported_posts_scheduled_at ON public.wp_imported_posts(scheduled_at) WHERE scheduled_at IS NOT NULL;
|
|
CREATE INDEX IF NOT EXISTS idx_native_articles_scheduled_at ON public.native_articles(scheduled_at) WHERE scheduled_at IS NOT NULL;
|
|
|
|
-- 4. Function to auto-publish scheduled articles (called via cron or on-demand)
|
|
CREATE OR REPLACE FUNCTION public.publish_scheduled_articles()
|
|
RETURNS INTEGER
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
published_count INTEGER := 0;
|
|
native_count INTEGER := 0;
|
|
BEGIN
|
|
-- Publish scheduled wp_imported_posts
|
|
UPDATE public.wp_imported_posts
|
|
SET status = 'published', scheduled_at = NULL, updated_at = CURRENT_TIMESTAMP
|
|
WHERE status = 'draft'
|
|
AND scheduled_at IS NOT NULL
|
|
AND scheduled_at <= CURRENT_TIMESTAMP;
|
|
GET DIAGNOSTICS published_count = ROW_COUNT;
|
|
|
|
-- Publish scheduled native_articles
|
|
UPDATE public.native_articles
|
|
SET status = 'published', scheduled_at = NULL, published_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP
|
|
WHERE status = 'draft'
|
|
AND scheduled_at IS NOT NULL
|
|
AND scheduled_at <= CURRENT_TIMESTAMP;
|
|
GET DIAGNOSTICS native_count = ROW_COUNT;
|
|
|
|
published_count := published_count + native_count;
|
|
|
|
RETURN published_count;
|
|
END;
|
|
$$;
|