sql数据流,amdin业务逻辑接入
This commit is contained in:
77
docs/sql/10_schema/marketing/ak_advanced_marketing_v1.sql
Normal file
77
docs/sql/10_schema/marketing/ak_advanced_marketing_v1.sql
Normal file
@@ -0,0 +1,77 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 秒杀与拼团活动表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_advanced_marketing_v1.sql
|
||||
-- 说明:管理秒杀活动与拼团活动,按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
-- 1. 秒杀活动表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_seckill_activities (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
title TEXT NOT NULL, -- 活动标题
|
||||
single_limit INTEGER DEFAULT 1, -- 单次限购
|
||||
total_limit INTEGER DEFAULT 10, -- 总购买数量限制
|
||||
product_count INTEGER DEFAULT 0, -- 包含商品数量
|
||||
time_range TEXT NOT NULL, -- 活动时段 (如 "06:00-24:00")
|
||||
|
||||
start_date TIMESTAMPTZ NOT NULL, -- 开始日期
|
||||
end_date TIMESTAMPTZ NOT NULL, -- 结束日期
|
||||
|
||||
status BOOLEAN DEFAULT true, -- 状态: true开启, false关闭
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 2. 拼团活动表 (开团记录)
|
||||
CREATE TABLE IF NOT EXISTS public.ak_combination_activities (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
uid UUID NOT NULL REFERENCES public.ak_users(id), -- 开团团长
|
||||
product_id UUID NOT NULL REFERENCES public.ml_products(id), -- 拼团商品
|
||||
|
||||
people INTEGER DEFAULT 2, -- 几人团
|
||||
count_people INTEGER DEFAULT 1, -- 当前几人参加
|
||||
|
||||
start_time TIMESTAMPTZ DEFAULT now(), -- 开团时间
|
||||
stop_time TIMESTAMPTZ NOT NULL, -- 结束时间
|
||||
|
||||
status TEXT NOT NULL DEFAULT 'ongoing', -- ongoing进行中, pending未完成, ended已成功
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now(),
|
||||
|
||||
CONSTRAINT chk_comb_status CHECK (status IN ('ongoing', 'pending', 'ended'))
|
||||
);
|
||||
|
||||
-- 3. 启用 RLS
|
||||
ALTER TABLE public.ak_seckill_activities ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.ak_combination_activities ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 4. 创建权限策略 (按 merchant_id 隔离)
|
||||
-- 秒杀策略
|
||||
CREATE POLICY "Merchants can manage their own seckill activities"
|
||||
ON public.ak_seckill_activities FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 拼团策略
|
||||
CREATE POLICY "Merchants can manage their own combination activities"
|
||||
ON public.ak_combination_activities FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许所有认证用户查看(用于移动端展示)
|
||||
CREATE POLICY "Anyone can view active marketing activities"
|
||||
ON public.ak_seckill_activities FOR SELECT
|
||||
TO authenticated
|
||||
USING (status = true);
|
||||
|
||||
CREATE POLICY "Anyone can view ongoing combinations"
|
||||
ON public.ak_combination_activities FOR SELECT
|
||||
TO authenticated
|
||||
USING (true);
|
||||
78
docs/sql/10_schema/marketing/ak_bargain_groupbuy_v1.sql
Normal file
78
docs/sql/10_schema/marketing/ak_bargain_groupbuy_v1.sql
Normal file
@@ -0,0 +1,78 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 砍价与团购活动表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_bargain_groupbuy_v1.sql
|
||||
-- 说明:管理砍价与团购活动,按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
-- 1. 砍价活动表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_bargains (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
|
||||
|
||||
title TEXT NOT NULL, -- 活动标题
|
||||
min_price DECIMAL(12,2) NOT NULL DEFAULT 0, -- 砍价最低价
|
||||
stock INTEGER DEFAULT 0, -- 活动库存
|
||||
|
||||
start_time TIMESTAMPTZ NOT NULL, -- 开始时间
|
||||
stop_time TIMESTAMPTZ NOT NULL, -- 结束时间
|
||||
|
||||
status BOOLEAN DEFAULT true, -- 状态: true开启, false关闭
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 2. 团购活动表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_groupbuys (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
|
||||
|
||||
title TEXT NOT NULL, -- 活动标题
|
||||
price DECIMAL(12,2) NOT NULL DEFAULT 0, -- 团购价格
|
||||
people INTEGER DEFAULT 2, -- 成团人数要求
|
||||
stock INTEGER DEFAULT 0, -- 活动库存
|
||||
|
||||
start_time TIMESTAMPTZ NOT NULL, -- 开始时间
|
||||
stop_time TIMESTAMPTZ NOT NULL, -- 结束时间
|
||||
|
||||
status BOOLEAN DEFAULT true, -- 状态: true开启, false关闭
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 3. 启用 RLS
|
||||
ALTER TABLE public.ak_marketing_bargains ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.ak_marketing_groupbuys ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 4. 创建权限策略 (按 merchant_id 隔离)
|
||||
-- 砍价策略
|
||||
CREATE POLICY "Merchants can manage their own bargains"
|
||||
ON public.ak_marketing_bargains FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 团购策略
|
||||
CREATE POLICY "Merchants can manage their own groupbuys"
|
||||
ON public.ak_marketing_groupbuys FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许所有认证用户查看(用于移动端展示)
|
||||
CREATE POLICY "Anyone can view active marketing activities"
|
||||
ON public.ak_marketing_bargains FOR SELECT
|
||||
TO authenticated
|
||||
USING (status = true);
|
||||
|
||||
CREATE POLICY "Anyone can view active groupbuys"
|
||||
ON public.ak_marketing_groupbuys FOR SELECT
|
||||
TO authenticated
|
||||
USING (status = true);
|
||||
|
||||
-- 5. 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_bargains_merchant ON public.ak_marketing_bargains(merchant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_groupbuys_merchant ON public.ak_marketing_groupbuys(merchant_id);
|
||||
41
docs/sql/10_schema/marketing/ak_live_products_v1.sql
Normal file
41
docs/sql/10_schema/marketing/ak_live_products_v1.sql
Normal file
@@ -0,0 +1,41 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 直播商品管理表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_live_products_v1.sql
|
||||
-- 说明:管理直播活动关联的商品,支持直播价设置与审核状态,按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_live_products (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
product_id UUID NOT NULL REFERENCES public.ml_products(id) ON DELETE CASCADE,
|
||||
|
||||
live_price DECIMAL(12,2) NOT NULL DEFAULT 0, -- 直播专属价
|
||||
stock INTEGER DEFAULT 0, -- 直播可用库存
|
||||
|
||||
audit_status INTEGER DEFAULT 1, -- 审核状态: 1待审核, 2审核通过, 3审核驳回
|
||||
is_show BOOLEAN DEFAULT true, -- 是否在直播间显示
|
||||
|
||||
sort_order INTEGER DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 启用 RLS
|
||||
ALTER TABLE public.ak_marketing_live_products ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 权限策略:商家仅能管理自己的直播商品
|
||||
CREATE POLICY "Merchants can manage their own live products"
|
||||
ON public.ak_marketing_live_products FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许查看审核通过的商品
|
||||
CREATE POLICY "Anyone can view approved live products"
|
||||
ON public.ak_marketing_live_products FOR SELECT
|
||||
TO authenticated
|
||||
USING (audit_status = 2 AND is_show = true);
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_live_products_merchant ON public.ak_marketing_live_products(merchant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_live_products_product ON public.ak_marketing_live_products(product_id);
|
||||
93
docs/sql/10_schema/marketing/ak_lottery_live_v1.sql
Normal file
93
docs/sql/10_schema/marketing/ak_lottery_live_v1.sql
Normal file
@@ -0,0 +1,93 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 抽奖与直播管理表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_lottery_live_v1.sql
|
||||
-- 说明:管理抽奖活动、奖品、主播及直播间,按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
-- 1. 抽奖活动表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_lotteries (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
name TEXT NOT NULL, -- 活动名称
|
||||
type INTEGER DEFAULT 1, -- 活动类型: 1积分抽奖, 2订单评价, 3订单支付
|
||||
|
||||
start_time TIMESTAMPTZ NOT NULL, -- 开始时间
|
||||
end_time TIMESTAMPTZ NOT NULL, -- 结束时间
|
||||
|
||||
is_open BOOLEAN DEFAULT true, -- 是否开启
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 2. 抽奖奖品表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_lottery_prizes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
lottery_id UUID NOT NULL REFERENCES public.ak_marketing_lotteries(id) ON DELETE CASCADE,
|
||||
|
||||
name TEXT NOT NULL, -- 奖品名称
|
||||
prize_type TEXT NOT NULL, -- 奖品类型: points, balance, coupon, physical
|
||||
amount DECIMAL(12,2) DEFAULT 0, -- 奖励面值/数量
|
||||
stock INTEGER DEFAULT 0, -- 奖品库存
|
||||
probability DECIMAL(5,2) DEFAULT 0, -- 中奖概率 (0-100)
|
||||
|
||||
sort_order INTEGER DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 3. 直播主播表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_live_anchors (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
nickname TEXT NOT NULL, -- 主播昵称
|
||||
wechat TEXT, -- 微信号
|
||||
phone TEXT, -- 联系电话
|
||||
avatar_url TEXT, -- 头像
|
||||
|
||||
status BOOLEAN DEFAULT true, -- 状态
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 4. 直播间管理表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_live_rooms (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
anchor_id UUID REFERENCES public.ak_marketing_live_anchors(id) ON DELETE SET NULL,
|
||||
|
||||
name TEXT NOT NULL, -- 直播间名称
|
||||
background_url TEXT, -- 背景图
|
||||
share_img_url TEXT, -- 分享图
|
||||
|
||||
start_time TIMESTAMPTZ NOT NULL, -- 开始时间
|
||||
end_time TIMESTAMPTZ NOT NULL, -- 计划结束时间
|
||||
|
||||
sort INTEGER DEFAULT 0, -- 排序
|
||||
type TEXT DEFAULT 'phone', -- 类型: phone手机直播等
|
||||
|
||||
like_enabled BOOLEAN DEFAULT true, -- 开启点赞
|
||||
sale_enabled BOOLEAN DEFAULT true, -- 开启卖货
|
||||
comment_enabled BOOLEAN DEFAULT true, -- 开启评论
|
||||
|
||||
is_show BOOLEAN DEFAULT true, -- 是否显示
|
||||
live_status INTEGER DEFAULT 1, -- 1未开始, 2直播中, 3暂停, 4已结束
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 5. 启用 RLS
|
||||
ALTER TABLE public.ak_marketing_lotteries ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.ak_marketing_lottery_prizes ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.ak_marketing_live_anchors ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.ak_marketing_live_rooms ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 6. 创建权限策略 (按 merchant_id 隔离)
|
||||
CREATE POLICY "Merchants manage their own lotteries" ON public.ak_marketing_lotteries FOR ALL TO authenticated USING (merchant_id = auth.uid()) WITH CHECK (merchant_id = auth.uid());
|
||||
CREATE POLICY "Merchants manage their own anchors" ON public.ak_marketing_live_anchors FOR ALL TO authenticated USING (merchant_id = auth.uid()) WITH CHECK (merchant_id = auth.uid());
|
||||
CREATE POLICY "Merchants manage their own rooms" ON public.ak_marketing_live_rooms FOR ALL TO authenticated USING (merchant_id = auth.uid()) WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许查看
|
||||
CREATE POLICY "Users can view lotteries" ON public.ak_marketing_lotteries FOR SELECT TO authenticated USING (is_open = true);
|
||||
CREATE POLICY "Users can view active rooms" ON public.ak_marketing_live_rooms FOR SELECT TO authenticated USING (is_show = true);
|
||||
@@ -0,0 +1,39 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 打卡/签到增强配置表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_marketing_checkin_configs_v1.sql
|
||||
-- 说明:管理打卡开关、模式、提醒及基础奖励(积分/经验),按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_checkin_configs (
|
||||
id TEXT PRIMARY KEY DEFAULT 'checkin_config',
|
||||
merchant_id UUID NOT NULL UNIQUE REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
is_open BOOLEAN DEFAULT true, -- 签到开关
|
||||
mode TEXT DEFAULT 'none', -- 签到模式: none(无限制), week(周循环), month(月循环)
|
||||
notice_enabled BOOLEAN DEFAULT false, -- 签到提醒开关
|
||||
|
||||
integral_reward INTEGER DEFAULT 10, -- 每日签到赠送积分
|
||||
exp_reward INTEGER DEFAULT 1, -- 每日签到赠送经验
|
||||
|
||||
updated_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_by UUID REFERENCES auth.users(id)
|
||||
);
|
||||
|
||||
-- 启用 RLS
|
||||
ALTER TABLE public.ak_marketing_checkin_configs ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 权限策略:商家仅能管理自己的打卡配置
|
||||
CREATE POLICY "Merchants manage their own checkin configs"
|
||||
ON public.ak_marketing_checkin_configs FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许所有认证用户查看(用于前台展示)
|
||||
CREATE POLICY "Anyone can view checkin config"
|
||||
ON public.ak_marketing_checkin_configs FOR SELECT
|
||||
TO authenticated
|
||||
USING (true);
|
||||
|
||||
-- 插入初始化数据(为每个管理员/商家初始化一条)
|
||||
-- 实际应在商家创建时触发,此处先预留
|
||||
@@ -0,0 +1,35 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 新人礼配置表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_marketing_newcomer_config_v1.sql
|
||||
-- 说明:管理新用户注册后的奖励(余额、积分、优惠券),按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_newcomer_config (
|
||||
id TEXT PRIMARY KEY DEFAULT 'newcomer_config',
|
||||
merchant_id UUID NOT NULL UNIQUE REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
balance_reward DECIMAL(12,2) DEFAULT 0.00, -- 赠送余额
|
||||
integral_reward INTEGER DEFAULT 0, -- 赠送积分
|
||||
|
||||
-- 赠送优惠券 (JSONB 格式): [{ "id": "coupon_uuid", "name": "显示名称", "desc": "发放描述" }]
|
||||
coupons_json JSONB DEFAULT '[]'::jsonb,
|
||||
|
||||
updated_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_by UUID REFERENCES auth.users(id)
|
||||
);
|
||||
|
||||
-- 启用 RLS
|
||||
ALTER TABLE public.ak_marketing_newcomer_config ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 权限策略:商家仅能管理自己的新人礼配置
|
||||
CREATE POLICY "Merchants manage their own newcomer configs"
|
||||
ON public.ak_marketing_newcomer_config FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许查看配置(用于移动端展示)
|
||||
CREATE POLICY "Anyone can view newcomer config"
|
||||
ON public.ak_marketing_newcomer_config FOR SELECT
|
||||
TO authenticated
|
||||
USING (true);
|
||||
36
docs/sql/10_schema/marketing/ak_marketing_signin_logs_v1.sql
Normal file
36
docs/sql/10_schema/marketing/ak_marketing_signin_logs_v1.sql
Normal file
@@ -0,0 +1,36 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 签到记录表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_marketing_signin_logs_v1.sql
|
||||
-- 说明:记录用户每日签到的详细流水,按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_signin_logs (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
uid UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
points INTEGER NOT NULL DEFAULT 0, -- 本次签到获得的积分
|
||||
is_continuous_reward BOOLEAN DEFAULT false, -- 是否包含连续签到额外奖励
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 启用 RLS
|
||||
ALTER TABLE public.ak_marketing_signin_logs ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 权限策略:商家仅能管理/查看自己的签到记录
|
||||
CREATE POLICY "Merchants manage their own signin logs"
|
||||
ON public.ak_marketing_signin_logs FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许用户查看自己的签到记录
|
||||
CREATE POLICY "Users view own signin logs"
|
||||
ON public.ak_marketing_signin_logs FOR SELECT
|
||||
TO authenticated
|
||||
USING (uid = auth.uid());
|
||||
|
||||
-- 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_signin_logs_merchant ON public.ak_marketing_signin_logs(merchant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_signin_logs_uid ON public.ak_marketing_signin_logs(uid, created_at DESC);
|
||||
71
docs/sql/10_schema/marketing/ak_member_management_v1.sql
Normal file
71
docs/sql/10_schema/marketing/ak_member_management_v1.sql
Normal file
@@ -0,0 +1,71 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 付费会员管理相关表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_member_management_v1.sql
|
||||
-- 说明:管理会员卡类型、权益内容及基础配置,按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
-- 1. 会员卡类型表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_member_types (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
name TEXT NOT NULL, -- 会员名 (如: 月卡, 年卡)
|
||||
duration_days INTEGER DEFAULT 30, -- 有效期(天),0表示永久
|
||||
price DECIMAL(12,2) NOT NULL DEFAULT 0, -- 原价
|
||||
discount_price DECIMAL(12,2) NOT NULL DEFAULT 0, -- 优惠价/实际支付价
|
||||
|
||||
is_open BOOLEAN DEFAULT true, -- 是否开启
|
||||
sort_order INTEGER DEFAULT 0, -- 排序
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 2. 会员权益表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_member_rights (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
name TEXT NOT NULL, -- 权益名称
|
||||
description TEXT, -- 权益简介
|
||||
icon_url TEXT, -- 权益图标
|
||||
|
||||
is_show BOOLEAN DEFAULT true, -- 是否展示
|
||||
sort_order INTEGER DEFAULT 0, -- 排序
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 3. 会员基础配置表 (每个商家一条记录)
|
||||
CREATE TABLE IF NOT EXISTS public.ak_marketing_member_config (
|
||||
id TEXT PRIMARY KEY DEFAULT 'member_config',
|
||||
merchant_id UUID NOT NULL UNIQUE REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
is_enabled BOOLEAN DEFAULT true, -- 是否开启付费会员功能
|
||||
bg_img_url TEXT, -- 会员期内背景图
|
||||
expire_bg_img_url TEXT, -- 会员到期背景图
|
||||
rules_description TEXT, -- 会员规则说明文本
|
||||
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 4. 启用 RLS
|
||||
ALTER TABLE public.ak_marketing_member_types ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.ak_marketing_member_rights ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.ak_marketing_member_config ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 5. 创建权限策略 (按 merchant_id 隔离)
|
||||
-- 商家管理自己的数据
|
||||
CREATE POLICY "Merchants manage their own member types" ON public.ak_marketing_member_types FOR ALL TO authenticated USING (merchant_id = auth.uid()) WITH CHECK (merchant_id = auth.uid());
|
||||
CREATE POLICY "Merchants manage their own member rights" ON public.ak_marketing_member_rights FOR ALL TO authenticated USING (merchant_id = auth.uid()) WITH CHECK (merchant_id = auth.uid());
|
||||
CREATE POLICY "Merchants manage their own member config" ON public.ak_marketing_member_config FOR ALL TO authenticated USING (merchant_id = auth.uid()) WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许所有认证用户查看 (移动端展示)
|
||||
CREATE POLICY "Users can view active member types" ON public.ak_marketing_member_types FOR SELECT TO authenticated USING (is_open = true);
|
||||
CREATE POLICY "Users can view active member rights" ON public.ak_marketing_member_rights FOR SELECT TO authenticated USING (is_show = true);
|
||||
CREATE POLICY "Users can view member config" ON public.ak_marketing_member_config FOR SELECT TO authenticated USING (true);
|
||||
|
||||
-- 6. 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_member_types_merchant ON public.ak_marketing_member_types(merchant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_member_rights_merchant ON public.ak_marketing_member_rights(merchant_id);
|
||||
48
docs/sql/10_schema/marketing/ak_recharge_management_v1.sql
Normal file
48
docs/sql/10_schema/marketing/ak_recharge_management_v1.sql
Normal file
@@ -0,0 +1,48 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 充值配置与额度模板表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_recharge_management_v1.sql
|
||||
-- 说明:管理用户充值开关、最低金额及预设额度,按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
-- 1. 充值基础配置表 (每个商家一条记录)
|
||||
CREATE TABLE IF NOT EXISTS public.ak_recharge_configs (
|
||||
id TEXT PRIMARY KEY DEFAULT 'recharge_config',
|
||||
merchant_id UUID NOT NULL UNIQUE REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
balance_enabled BOOLEAN DEFAULT true, -- 余额功能是否启用
|
||||
recharge_notice TEXT, -- 充值注意事项说明
|
||||
mp_recharge_enabled BOOLEAN DEFAULT false, -- 小程序充值开关
|
||||
min_recharge_amount DECIMAL(12,2) DEFAULT 0.01, -- 最低充值金额
|
||||
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 2. 充值额度模板表
|
||||
CREATE TABLE IF NOT EXISTS public.ak_recharge_quotas (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
price DECIMAL(12,2) NOT NULL DEFAULT 0, -- 售价(实际充值金额)
|
||||
bonus_price DECIMAL(12,2) NOT NULL DEFAULT 0, -- 赠送金额
|
||||
|
||||
is_open BOOLEAN DEFAULT true, -- 是否可用
|
||||
sort_order INTEGER DEFAULT 0, -- 排序
|
||||
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
-- 3. 启用 RLS
|
||||
ALTER TABLE public.ak_recharge_configs ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.ak_recharge_quotas ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 4. 创建权限策略 (按 merchant_id 隔离)
|
||||
CREATE POLICY "Merchants manage their own recharge configs" ON public.ak_recharge_configs FOR ALL TO authenticated USING (merchant_id = auth.uid()) WITH CHECK (merchant_id = auth.uid());
|
||||
CREATE POLICY "Merchants manage their own recharge quotas" ON public.ak_recharge_quotas FOR ALL TO authenticated USING (merchant_id = auth.uid()) WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许所有认证用户查看
|
||||
CREATE POLICY "Users can view recharge configs" ON public.ak_recharge_configs FOR SELECT TO authenticated USING (true);
|
||||
CREATE POLICY "Users can view active recharge quotas" ON public.ak_recharge_quotas FOR SELECT TO authenticated USING (is_open = true);
|
||||
|
||||
-- 5. 索引
|
||||
CREATE INDEX IF NOT EXISTS idx_recharge_quotas_merchant ON public.ak_recharge_quotas(merchant_id);
|
||||
42
docs/sql/10_schema/marketing/ak_signin_configs_v1.sql
Normal file
42
docs/sql/10_schema/marketing/ak_signin_configs_v1.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
-- =====================================================================================
|
||||
-- Schema: 签到规则配置表
|
||||
-- 位置:docs/sql/10_schema/marketing/ak_signin_configs_v1.sql
|
||||
-- 说明:记录每日签到积分、连续签到奖励及规则说明,按商家隔离。
|
||||
-- =====================================================================================
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.ak_signin_configs (
|
||||
id TEXT PRIMARY KEY DEFAULT 'signin_config', -- 每个商家一个配置记录
|
||||
merchant_id UUID NOT NULL REFERENCES public.ak_users(id) ON DELETE CASCADE,
|
||||
|
||||
is_enabled BOOLEAN DEFAULT true, -- 签到功能是否启用
|
||||
daily_points INTEGER DEFAULT 10, -- 每日签到固定奖励积分
|
||||
|
||||
-- 连续签到奖励 (JSONB 格式): [{ "day": 3, "points": 20 }, { "day": 7, "points": 50 }]
|
||||
continuous_rewards JSONB DEFAULT '[]'::jsonb,
|
||||
|
||||
rules_description TEXT DEFAULT '1.每日签到可获得积分奖励;\n2.连续签到满足天数可获得额外阶梯奖励;\n3.签到中断将重新从第一天开始计算。',
|
||||
|
||||
updated_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_by UUID REFERENCES auth.users(id),
|
||||
|
||||
-- 约束:同一个商家只有一个签到配置记录
|
||||
UNIQUE(merchant_id)
|
||||
);
|
||||
|
||||
-- 启用 RLS
|
||||
ALTER TABLE public.ak_signin_configs ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- 权限策略:商家仅能管理自己的签到配置
|
||||
CREATE POLICY "Merchants can manage their own signin configs"
|
||||
ON public.ak_signin_configs
|
||||
FOR ALL
|
||||
TO authenticated
|
||||
USING (merchant_id = auth.uid())
|
||||
WITH CHECK (merchant_id = auth.uid());
|
||||
|
||||
-- 允许所有认证用户查看配置(用于移动端签到展示)
|
||||
CREATE POLICY "Authenticated users can view signin configs"
|
||||
ON public.ak_signin_configs
|
||||
FOR SELECT
|
||||
TO authenticated
|
||||
USING (true);
|
||||
Reference in New Issue
Block a user