's'
This commit is contained in:
75
supabase/migrations/001_knowledge_tables.sql
Normal file
75
supabase/migrations/001_knowledge_tables.sql
Normal file
@@ -0,0 +1,75 @@
|
||||
-- 知识付费平台数据表
|
||||
-- 在 Supabase SQL Editor 中执行
|
||||
|
||||
-- 电子书专栏
|
||||
CREATE TABLE IF NOT EXISTS wxgzh_ebooks (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
title TEXT NOT NULL,
|
||||
cover TEXT,
|
||||
description TEXT,
|
||||
sort_order INT DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 电子书章节
|
||||
CREATE TABLE IF NOT EXISTS wxgzh_ebook_chapters (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
ebook_id BIGINT NOT NULL REFERENCES wxgzh_ebooks(id) ON DELETE CASCADE,
|
||||
title TEXT NOT NULL,
|
||||
content TEXT,
|
||||
is_free BOOLEAN DEFAULT false,
|
||||
sort_order INT DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 课程专栏
|
||||
CREATE TABLE IF NOT EXISTS wxgzh_courses (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
title TEXT NOT NULL,
|
||||
cover TEXT,
|
||||
description TEXT,
|
||||
sort_order INT DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 课程章节(视频 + 配套文章)
|
||||
CREATE TABLE IF NOT EXISTS wxgzh_course_chapters (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
course_id BIGINT NOT NULL REFERENCES wxgzh_courses(id) ON DELETE CASCADE,
|
||||
title TEXT NOT NULL,
|
||||
video_url TEXT,
|
||||
article_markdown TEXT,
|
||||
duration INT DEFAULT 0,
|
||||
is_free BOOLEAN DEFAULT false,
|
||||
sort_order INT DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 若表已存在,可单独执行添加列:
|
||||
-- ALTER TABLE wxgzh_course_chapters ADD COLUMN IF NOT EXISTS article_markdown TEXT;
|
||||
|
||||
-- VIP 用户表(user_id 对应 auth.users.id)
|
||||
CREATE TABLE IF NOT EXISTS wxgzh_vip_users (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id UUID NOT NULL UNIQUE REFERENCES auth.users(id) ON DELETE CASCADE,
|
||||
expire_at TIMESTAMPTZ NOT NULL,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 启用 RLS
|
||||
ALTER TABLE wxgzh_ebooks ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE wxgzh_ebook_chapters ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE wxgzh_courses ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE wxgzh_course_chapters ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE wxgzh_vip_users ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 公开读取策略(专栏和章节列表可匿名读)
|
||||
CREATE POLICY "ebooks_public_read" ON wxgzh_ebooks FOR SELECT USING (true);
|
||||
CREATE POLICY "ebook_chapters_public_read" ON wxgzh_ebook_chapters FOR SELECT USING (true);
|
||||
CREATE POLICY "courses_public_read" ON wxgzh_courses FOR SELECT USING (true);
|
||||
CREATE POLICY "course_chapters_public_read" ON wxgzh_course_chapters FOR SELECT USING (true);
|
||||
|
||||
-- VIP 表仅允许用户查询自己的记录
|
||||
CREATE POLICY "vip_users_select_own" ON wxgzh_vip_users FOR SELECT USING (auth.uid() = user_id);
|
||||
|
||||
-- 示例数据可在 Supabase 后台手动插入,或使用 mock 数据(前端已内置)
|
||||
2
supabase/migrations/002_add_article_markdown.sql
Normal file
2
supabase/migrations/002_add_article_markdown.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
-- 若已执行过 001,可单独执行此文件添加 article_markdown 列
|
||||
ALTER TABLE wxgzh_course_chapters ADD COLUMN IF NOT EXISTS article_markdown TEXT;
|
||||
33
supabase/migrations/003_add_access_level.sql
Normal file
33
supabase/migrations/003_add_access_level.sql
Normal file
@@ -0,0 +1,33 @@
|
||||
ALTER TABLE wxgzh_ebook_chapters
|
||||
ADD COLUMN IF NOT EXISTS access_level TEXT NOT NULL DEFAULT 'free';
|
||||
|
||||
ALTER TABLE wxgzh_course_chapters
|
||||
ADD COLUMN IF NOT EXISTS access_level TEXT NOT NULL DEFAULT 'free';
|
||||
|
||||
UPDATE wxgzh_ebook_chapters
|
||||
SET access_level = CASE
|
||||
WHEN is_free THEN 'free'
|
||||
ELSE 'vip'
|
||||
END
|
||||
WHERE access_level IS NULL OR access_level = 'free';
|
||||
|
||||
UPDATE wxgzh_course_chapters
|
||||
SET access_level = CASE
|
||||
WHEN is_free THEN 'free'
|
||||
ELSE 'vip'
|
||||
END
|
||||
WHERE access_level IS NULL OR access_level = 'free';
|
||||
|
||||
ALTER TABLE wxgzh_ebook_chapters
|
||||
DROP CONSTRAINT IF EXISTS wxgzh_ebook_chapters_access_level_check;
|
||||
|
||||
ALTER TABLE wxgzh_course_chapters
|
||||
DROP CONSTRAINT IF EXISTS wxgzh_course_chapters_access_level_check;
|
||||
|
||||
ALTER TABLE wxgzh_ebook_chapters
|
||||
ADD CONSTRAINT wxgzh_ebook_chapters_access_level_check
|
||||
CHECK (access_level IN ('free', 'vip', 'svip'));
|
||||
|
||||
ALTER TABLE wxgzh_course_chapters
|
||||
ADD CONSTRAINT wxgzh_course_chapters_access_level_check
|
||||
CHECK (access_level IN ('free', 'vip', 'svip'));
|
||||
Reference in New Issue
Block a user