Files
avbeat-com/supabase/migrations/20260321080000_article_status_scheduling.sql
2026-05-07 16:39:17 +00:00

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;
$$;