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

96 lines
3.0 KiB
PL/PgSQL

-- ============================================================
-- Migration: wp_imported_posts
-- Timestamp: 20260320230000
-- ============================================================
-- 1. wp_imported_posts table
CREATE TABLE IF NOT EXISTS public.wp_imported_posts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
wp_id INTEGER NOT NULL,
wp_slug TEXT NOT NULL,
title TEXT NOT NULL,
excerpt TEXT,
content TEXT,
author_name TEXT,
category TEXT,
tags TEXT[],
featured_image TEXT,
featured_image_alt TEXT,
status TEXT NOT NULL DEFAULT 'published',
wp_published_at TIMESTAMPTZ,
imported_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_wp_imported_posts_wp_id ON public.wp_imported_posts(wp_id);
CREATE INDEX IF NOT EXISTS idx_wp_imported_posts_slug ON public.wp_imported_posts(wp_slug);
CREATE INDEX IF NOT EXISTS idx_wp_imported_posts_imported_at ON public.wp_imported_posts(imported_at DESC);
-- 2. wp_import_logs table (tracks import runs)
CREATE TABLE IF NOT EXISTS public.wp_import_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
started_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMPTZ,
total_fetched INTEGER DEFAULT 0,
total_imported INTEGER DEFAULT 0,
total_skipped INTEGER DEFAULT 0,
total_errors INTEGER DEFAULT 0,
status TEXT NOT NULL DEFAULT 'running',
error_message TEXT
);
CREATE INDEX IF NOT EXISTS idx_wp_import_logs_started_at ON public.wp_import_logs(started_at DESC);
-- 3. update_updated_at function (reuse if exists)
CREATE OR REPLACE FUNCTION public.update_updated_at()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$;
-- 4. Enable RLS
ALTER TABLE public.wp_imported_posts ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.wp_import_logs ENABLE ROW LEVEL SECURITY;
-- 5. RLS Policies for wp_imported_posts
DROP POLICY IF EXISTS "public_read_wp_imported_posts" ON public.wp_imported_posts;
CREATE POLICY "public_read_wp_imported_posts"
ON public.wp_imported_posts
FOR SELECT
TO public
USING (true);
DROP POLICY IF EXISTS "authenticated_manage_wp_imported_posts" ON public.wp_imported_posts;
CREATE POLICY "authenticated_manage_wp_imported_posts"
ON public.wp_imported_posts
FOR ALL
TO authenticated
USING (true)
WITH CHECK (true);
-- 6. RLS Policies for wp_import_logs
DROP POLICY IF EXISTS "public_read_wp_import_logs" ON public.wp_import_logs;
CREATE POLICY "public_read_wp_import_logs"
ON public.wp_import_logs
FOR SELECT
TO public
USING (true);
DROP POLICY IF EXISTS "authenticated_manage_wp_import_logs" ON public.wp_import_logs;
CREATE POLICY "authenticated_manage_wp_import_logs"
ON public.wp_import_logs
FOR ALL
TO authenticated
USING (true)
WITH CHECK (true);
-- 7. Trigger for updated_at
DROP TRIGGER IF EXISTS update_wp_imported_posts_updated_at ON public.wp_imported_posts;
CREATE TRIGGER update_wp_imported_posts_updated_at
BEFORE UPDATE ON public.wp_imported_posts
FOR EACH ROW EXECUTE FUNCTION public.update_updated_at();