96 lines
3.0 KiB
PL/PgSQL
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();
|