This commit is contained in:
eric
2026-03-11 10:26:40 -05:00
parent 4c041d939a
commit 8cbc092437
71 changed files with 13541 additions and 92 deletions

View 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 数据(前端已内置)

View File

@@ -0,0 +1,2 @@
-- 若已执行过 001可单独执行此文件添加 article_markdown 列
ALTER TABLE wxgzh_course_chapters ADD COLUMN IF NOT EXISTS article_markdown TEXT;

View 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'));