-- ============================================================
-- iShare 数据库设计 v2.0（修订版）
-- 修订时间: 2026-02-17
-- 修订说明: 修复原版缺陷，补充完整业务字段和新增表
-- 数据库: pigxx_app
-- ============================================================

USE pigxx_app;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ============================================================
-- 一、App 基础表（沿用原版，仅 app_user 追加字段）
-- ============================================================

-- app_user 追加字段（ALTER，不重建表）
ALTER TABLE `app_user`
  ADD COLUMN IF NOT EXISTS `invite_code` varchar(16) UNIQUE COMMENT '用户专属邀请码（注册时生成）' AFTER `email`,
  ADD COLUMN IF NOT EXISTS `inviter_id`  bigint DEFAULT NULL COMMENT '邀请人用户ID' AFTER `invite_code`;


-- ============================================================
-- 二、iShare 核心业务表（修订版，8 张原表 + 新增 6 张）
-- ============================================================

-- ------------------------------------------------------------
-- 2.1 as_platform_type — 平台类型
-- 修订: 加 status、del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_platform_type`;
CREATE TABLE `as_platform_type` (
  `id`            bigint      NOT NULL                        COMMENT '主键',
  `name`          varchar(64) NOT NULL                        COMMENT '类型名称（视频/音乐/AI等）',
  `platform_type` int         NOT NULL DEFAULT 0              COMMENT '类型编号（用于分类筛选），0=全部',
  `sort_order`    int         NOT NULL DEFAULT 0              COMMENT '排序权重（升序）',
  `status`        tinyint     NOT NULL DEFAULT 1              COMMENT '状态: 0=禁用, 1=启用',
  `del_flag`      char(1)     NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time`   datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`   datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_platform_type` (`platform_type`),
  KEY `idx_sort` (`sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台类型表';

-- ------------------------------------------------------------
-- 2.2 as_platform — 流媒体平台
-- 修订: 加 description、status、del_flag、create_time/update_time
--       sort_order 从 varchar 改为 int
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_platform`;
CREATE TABLE `as_platform` (
  `id`            bigint       NOT NULL                        COMMENT '主键',
  `platform_name` varchar(128) NOT NULL                        COMMENT '平台名称',
  `platform_type` int          NOT NULL DEFAULT 0              COMMENT '平台类型（关联 as_platform_type.platform_type）',
  `icon`          varchar(512) DEFAULT NULL                    COMMENT '应用图标 URL',
  `description`   varchar(512) DEFAULT NULL                    COMMENT '平台简介',
  `company`       varchar(128) DEFAULT NULL                    COMMENT '所属公司',
  `website`       varchar(256) DEFAULT NULL                    COMMENT '平台官网',
  `sort_order`    int          NOT NULL DEFAULT 0              COMMENT '排序权重（升序）',
  `status`        tinyint      NOT NULL DEFAULT 1              COMMENT '状态: 0=禁用, 1=启用',
  `del_flag`      char(1)      NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time`   datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`   datetime     DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_platform_type` (`platform_type`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流媒体平台表';

-- ------------------------------------------------------------
-- 2.3 as_sub_plan — 订阅计划
-- 修订: platform_id varchar→bigint, capacity varchar→int
--       加 status、del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_plan`;
CREATE TABLE `as_sub_plan` (
  `id`          bigint       NOT NULL                        COMMENT '计划ID',
  `name`        varchar(128) NOT NULL                        COMMENT '计划名称（标准版/高级版等）',
  `platform_id` bigint       NOT NULL                        COMMENT '所属平台ID（→ as_platform.id）',
  `capacity`    int          NOT NULL DEFAULT 1              COMMENT '席位容量（该计划最多可共享人数）',
  `remark`      varchar(256) DEFAULT NULL                    COMMENT '备注',
  `sort_order`  int          NOT NULL DEFAULT 0              COMMENT '排序权重（升序）',
  `status`      tinyint      NOT NULL DEFAULT 1              COMMENT '状态: 0=禁用, 1=启用',
  `del_flag`    char(1)      NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime     DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_platform_id` (`platform_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订阅计划表';

-- ------------------------------------------------------------
-- 2.4 as_sub_payroll — 付费方案
-- 修订: sub_plans(Long,注释混乱) → sub_plan_id(bigint,明确1:1)
--       加 duration_months、original_price、is_active
--       del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_payroll`;
CREATE TABLE `as_sub_payroll` (
  `id`             bigint        NOT NULL                        COMMENT '主键',
  `sub_plan_id`    bigint        NOT NULL                        COMMENT '所属订阅计划ID（→ as_sub_plan.id）',
  `platform_id`    bigint        NOT NULL                        COMMENT '平台ID（冗余，便于查询）',
  `payroll`        tinyint       NOT NULL                        COMMENT '付费周期: 1=月付, 2=季付, 3=年付',
  `duration_months` int          NOT NULL                        COMMENT '实际月数: 1/3/12（与 payroll 对应）',
  `price`          decimal(10,2) NOT NULL                        COMMENT '售价',
  `original_price` decimal(10,2) DEFAULT NULL                    COMMENT '划线价（原价，用于展示折扣）',
  `currency`       varchar(8)    NOT NULL DEFAULT 'CNY'          COMMENT '货币单位（CNY/USD等）',
  `region`         varchar(64)   DEFAULT NULL                    COMMENT '适用地区',
  `is_active`      tinyint       NOT NULL DEFAULT 1              COMMENT '是否上架: 0=下架, 1=上架',
  `del_flag`       char(1)       NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time`    datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`    datetime      DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_sub_plan_id` (`sub_plan_id`),
  KEY `idx_platform_id` (`platform_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='付费方案表';

-- ------------------------------------------------------------
-- 2.5 as_sub_product — 订阅产品（合租商品）
-- 修订: Tags→tags(命名修复), 加 platform_id、status、cover_image
--       product_type/sub_type 从 Long 改为 tinyint
--       加 total_capacity、del_flag、create_by/update_by
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_product`;
CREATE TABLE `as_sub_product` (
  `id`             bigint        NOT NULL                        COMMENT '主键',
  `title`          varchar(256)  NOT NULL                        COMMENT '产品标题',
  `description`    varchar(1024) DEFAULT NULL                    COMMENT '产品描述',
  `cover_image`    varchar(512)  DEFAULT NULL                    COMMENT '封面图 URL',
  `tags`           varchar(256)  DEFAULT NULL                    COMMENT '标签（逗号分隔）',
  `platform_id`    bigint        NOT NULL                        COMMENT '所属平台ID（→ as_platform.id，冗余加速查询）',
  `sub_plan_ids`   varchar(256)  DEFAULT NULL                    COMMENT '关联订阅计划ID列表（逗号分隔）',
  `product_type`   tinyint       NOT NULL DEFAULT 1              COMMENT '产品类型: 1=自营, 2=个人',
  `sub_type`       tinyint       NOT NULL DEFAULT 1              COMMENT '订阅类型: 1=单品, 2=多品组合',
  `total_capacity` int           NOT NULL DEFAULT 1              COMMENT '总席位数（该商品可供多少人购买）',
  `amount`         decimal(10,2) DEFAULT NULL                    COMMENT '基准价格（月）',
  `star`           decimal(3,1)  DEFAULT 0.0                     COMMENT '综合评分（0.0-5.0，由评价聚合更新）',
  `status`         tinyint       NOT NULL DEFAULT 0              COMMENT '状态: 0=草稿, 1=上架, 2=下架, 3=售完',
  `user_id`        bigint        DEFAULT NULL                    COMMENT '发布者用户ID（→ app_user.user_id）',
  `del_flag`       char(1)       NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_by`      varchar(64)   DEFAULT NULL                    COMMENT '创建人',
  `update_by`      varchar(64)   DEFAULT NULL                    COMMENT '修改人',
  `create_time`    datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`    datetime      DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_platform_id` (`platform_id`),
  KEY `idx_status` (`status`),
  KEY `idx_product_type` (`product_type`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订阅产品表（合租商品）';

-- ------------------------------------------------------------
-- 2.6 as_sub_account — 流媒体平台账号凭据
-- 修订: user_id/sub_plan_id/sub_payroll_id/platform_id int→bigint
--       passwd_salt int→varchar(64,存hex/base64)
--       加 encrypt_type、status、del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_account`;
CREATE TABLE `as_sub_account` (
  `id`             bigint       NOT NULL                        COMMENT '主键',
  `product_id`     bigint       DEFAULT NULL                    COMMENT '关联产品ID（→ as_sub_product.id）',
  `sub_plan_id`    bigint       DEFAULT NULL                    COMMENT '订阅计划ID（→ as_sub_plan.id）',
  `sub_payroll_id` bigint       DEFAULT NULL                    COMMENT '付费方案ID（→ as_sub_payroll.id）',
  `platform_id`    bigint       NOT NULL                        COMMENT '平台ID（→ as_platform.id）',
  `user_id`        bigint       NOT NULL                        COMMENT '账号持有者用户ID（主用户，→ app_user.user_id）',
  `account_name`   varchar(256) NOT NULL                        COMMENT '平台登录用户名/邮箱',
  `account_passwd` varchar(512) NOT NULL                        COMMENT '平台登录密码（加密存储）',
  `passwd_salt`    varchar(64)  NOT NULL                        COMMENT '加密盐值（Base64/Hex，16字节随机）',
  `encrypt_type`   tinyint      NOT NULL DEFAULT 1              COMMENT '加密算法: 1=AES-256-GCM',
  `region`         varchar(64)  DEFAULT NULL                    COMMENT '账号所在地区',
  `share_type`     tinyint      DEFAULT NULL                    COMMENT '分享类型',
  `account_type`   tinyint      DEFAULT NULL                    COMMENT '账号类型（主账号/子账号等）',
  `renew_date`     datetime     DEFAULT NULL                    COMMENT '账号在平台的下次续费日',
  `status`         tinyint      NOT NULL DEFAULT 0              COMMENT '账号状态: 0=正常, 1=已失效, 2=异常/被封',
  `del_flag`       char(1)      NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time`    datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`    datetime     DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_product_id`  (`product_id`),
  KEY `idx_platform_id` (`platform_id`),
  KEY `idx_user_id`     (`user_id`),
  KEY `idx_status`      (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流媒体平台账号凭据表';

-- ------------------------------------------------------------
-- 2.7 as_user_sub — 合租槽（共享池）
-- 语义修订: 代表"一个合租位池"，不代表个人订阅
-- 修订: remark int→varchar, plan_id/user_id/main_account int→bigint
--       加 product_id、status、expire_time、del_flag、create_time/update_time
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_user_sub`;
CREATE TABLE `as_user_sub` (
  `id`               bigint       NOT NULL                        COMMENT '主键',
  `product_id`       bigint       NOT NULL                        COMMENT '关联产品ID（→ as_sub_product.id）',
  `plan_id`          bigint       NOT NULL                        COMMENT '订阅计划ID（→ as_sub_plan.id）',
  `platform_id`      bigint       NOT NULL                        COMMENT '平台ID（冗余，加速查询）',
  `host_user_id`     bigint       NOT NULL                        COMMENT '车主用户ID（提供账号的一方，→ app_user.user_id）',
  `account_id`       bigint       DEFAULT NULL                    COMMENT '关联平台账号ID（→ as_sub_account.id）',
  `capacity`         int          NOT NULL                        COMMENT '总席位数（来自 as_sub_plan.capacity）',
  `capacity_loaded`  int          NOT NULL DEFAULT 0              COMMENT '已占用席位数',
  `region`           varchar(64)  DEFAULT NULL                    COMMENT '地区',
  `status`           tinyint      NOT NULL DEFAULT 0              COMMENT '状态: 0=可加入, 1=已满, 2=已到期, 3=已关闭',
  `expire_time`      datetime     DEFAULT NULL                    COMMENT '该合租槽到期时间（来自最晚成员到期时间）',
  `remark`           varchar(512) DEFAULT NULL                    COMMENT '备注（车主说明）',
  `del_flag`         char(1)      NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time`      datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`      datetime     DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_product_id`   (`product_id`),
  KEY `idx_plan_id`      (`plan_id`),
  KEY `idx_host_user_id` (`host_user_id`),
  KEY `idx_status`       (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合租槽表（共享席位池）';

-- ------------------------------------------------------------
-- 2.8 as_sub_product_comment — 产品评价
-- 修订: 加 del_flag、is_anonymous、reply_id（支持追评）
--       star 字段加注释明确 1-5 范围
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `as_sub_product_comment`;
CREATE TABLE `as_sub_product_comment` (
  `id`           bigint        NOT NULL                        COMMENT '主键',
  `product_id`   bigint        NOT NULL                        COMMENT '关联产品ID（→ as_sub_product.id）',
  `user_id`      bigint        NOT NULL                        COMMENT '评价用户ID（→ app_user.user_id）',
  `order_id`     bigint        DEFAULT NULL                    COMMENT '关联订单ID（校验是否已购买）',
  `star`         tinyint       NOT NULL                        COMMENT '评分 1-5（服务端校验范围）',
  `comment`      varchar(1024) DEFAULT NULL                    COMMENT '评价内容',
  `is_anonymous` tinyint       NOT NULL DEFAULT 0              COMMENT '是否匿名: 0=公开, 1=匿名',
  `reply_id`     bigint        DEFAULT NULL                    COMMENT '回复的评价ID（追评/商家回复，NULL=原始评价）',
  `del_flag`     char(1)       NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time`  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`  datetime      DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_product_id` (`product_id`),
  KEY `idx_user_id`    (`user_id`),
  KEY `idx_reply_id`   (`reply_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品评价表';


-- ============================================================
-- 三、新增表（原版缺失的核心业务表）
-- ============================================================

-- ------------------------------------------------------------
-- 3.1 as_user_sub_member — 个人订阅记录（原版最大缺失）
-- 语义: 某用户购买加入了某合租槽，追踪个人维度
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_user_sub_member` (
  `id`          bigint   NOT NULL                        COMMENT '主键',
  `sub_id`      bigint   NOT NULL                        COMMENT '关联合租槽ID（→ as_user_sub.id）',
  `user_id`     bigint   NOT NULL                        COMMENT '订阅用户ID（→ app_user.user_id）',
  `order_id`    bigint   NOT NULL                        COMMENT '关联订单ID（→ as_order.id）',
  `payroll_id`  bigint   NOT NULL                        COMMENT '购买的付费方案ID（→ as_sub_payroll.id）',
  `status`      tinyint  NOT NULL DEFAULT 0              COMMENT '状态: 0=待激活, 1=使用中, 2=已到期, 3=已退订',
  `start_time`  datetime NOT NULL                        COMMENT '订阅开始时间',
  `expire_time` datetime NOT NULL                        COMMENT '订阅到期时间',
  `del_flag`    char(1)  NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_sub_user` (`sub_id`, `user_id`),
  KEY `idx_user_id`    (`user_id`),
  KEY `idx_order_id`   (`order_id`),
  KEY `idx_status`     (`status`),
  KEY `idx_expire`     (`expire_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='个人订阅记录表';

-- ------------------------------------------------------------
-- 3.2 as_order — 订单表
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_order` (
  `id`              bigint        NOT NULL                        COMMENT '主键',
  `order_no`        varchar(32)   NOT NULL                        COMMENT '订单号（业务唯一，格式: AS+时间戳+随机）',
  `user_id`         bigint        NOT NULL                        COMMENT '购买用户ID（→ app_user.user_id）',
  `product_id`      bigint        NOT NULL                        COMMENT '商品ID（→ as_sub_product.id）',
  `payroll_id`      bigint        NOT NULL                        COMMENT '付费方案ID（→ as_sub_payroll.id）',
  `original_amount` decimal(10,2) NOT NULL                        COMMENT '原价（快照，防止价格变动）',
  `discount_amount` decimal(10,2) NOT NULL DEFAULT 0.00           COMMENT '优惠金额',
  `amount`          decimal(10,2) NOT NULL                        COMMENT '实付金额',
  `pay_type`        tinyint       DEFAULT NULL                    COMMENT '支付方式: 1=余额, 2=支付宝, 3=微信支付',
  `pay_no`          varchar(64)   DEFAULT NULL                    COMMENT '第三方支付单号',
  `status`          tinyint       NOT NULL DEFAULT 0              COMMENT '状态: 0=待支付, 1=已支付, 2=已完成, 3=已退款, 4=已取消',
  `member_id`       bigint        DEFAULT NULL                    COMMENT '关联个人订阅记录ID（→ as_user_sub_member.id，支付成功后填充）',
  `remark`          varchar(256)  DEFAULT NULL                    COMMENT '备注',
  `expire_time`     datetime      NOT NULL                        COMMENT '订单过期时间（未支付自动取消，默认 +15min）',
  `pay_time`        datetime      DEFAULT NULL                    COMMENT '实际支付时间',
  `del_flag`        char(1)       NOT NULL DEFAULT '0'            COMMENT '删除标志: 0=正常, 1=已删除',
  `create_time`     datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`     datetime      DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_order_no` (`order_no`),
  KEY `idx_user_id`    (`user_id`),
  KEY `idx_product_id` (`product_id`),
  KEY `idx_status`     (`status`),
  KEY `idx_expire`     (`expire_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';

-- ------------------------------------------------------------
-- 3.3 as_wallet — 用户钱包
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_wallet` (
  `id`            bigint        NOT NULL                        COMMENT '主键',
  `user_id`       bigint        NOT NULL                        COMMENT '用户ID（→ app_user.user_id，一人一钱包）',
  `balance`       decimal(10,2) NOT NULL DEFAULT 0.00           COMMENT '可用余额',
  `frozen_amount` decimal(10,2) NOT NULL DEFAULT 0.00           COMMENT '冻结金额（退款/提现处理中）',
  `total_income`  decimal(10,2) NOT NULL DEFAULT 0.00           COMMENT '累计收入',
  `total_expense` decimal(10,2) NOT NULL DEFAULT 0.00           COMMENT '累计支出',
  `version`       int           NOT NULL DEFAULT 0              COMMENT '乐观锁版本号（防并发余额错误）',
  `create_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time`   datetime      DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户钱包表';

-- ------------------------------------------------------------
-- 3.4 as_wallet_log — 钱包流水
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_wallet_log` (
  `id`            bigint        NOT NULL                        COMMENT '主键',
  `user_id`       bigint        NOT NULL                        COMMENT '用户ID（→ app_user.user_id）',
  `amount`        decimal(10,2) NOT NULL                        COMMENT '变动金额（正=收入, 负=支出）',
  `type`          tinyint       NOT NULL                        COMMENT '类型: 1=充值, 2=消费, 3=退款, 4=邀请返现, 5=提现',
  `order_id`      bigint        DEFAULT NULL                    COMMENT '关联订单ID（→ as_order.id，可空）',
  `balance_after` decimal(10,2) NOT NULL                        COMMENT '操作后余额（快照，便于对账）',
  `remark`        varchar(256)  DEFAULT NULL                    COMMENT '说明（如：订阅 Netflix 高级版 3 个月）',
  `create_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id`  (`user_id`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_type`     (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='钱包流水表';

-- ------------------------------------------------------------
-- 3.5 as_invite — 邀请关系
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_invite` (
  `id`            bigint        NOT NULL                        COMMENT '主键',
  `inviter_id`    bigint        NOT NULL                        COMMENT '邀请人用户ID（→ app_user.user_id）',
  `invitee_id`    bigint        NOT NULL                        COMMENT '被邀请人用户ID（→ app_user.user_id）',
  `invite_code`   varchar(16)   NOT NULL                        COMMENT '使用的邀请码',
  `reward_amount` decimal(10,2) DEFAULT NULL                    COMMENT '返现金额（首次购买后确定）',
  `reward_status` tinyint       NOT NULL DEFAULT 0              COMMENT '返现状态: 0=待发放, 1=已发放, 2=已失效',
  `reward_time`   datetime      DEFAULT NULL                    COMMENT '返现发放时间',
  `create_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间（注册时间）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_invitee` (`invitee_id`),
  KEY `idx_inviter_id`  (`inviter_id`),
  KEY `idx_invite_code` (`invite_code`),
  KEY `idx_reward_status` (`reward_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请关系表';

-- ------------------------------------------------------------
-- 3.6 as_notification — 系统通知
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `as_notification` (
  `id`          bigint        NOT NULL                        COMMENT '主键',
  `user_id`     bigint        NOT NULL                        COMMENT '目标用户ID（→ app_user.user_id，0=全体广播）',
  `title`       varchar(128)  NOT NULL                        COMMENT '通知标题',
  `content`     varchar(1024) NOT NULL                        COMMENT '通知内容',
  `type`        tinyint       NOT NULL                        COMMENT '类型: 1=续费提醒, 2=订单通知, 3=系统公告, 4=邀请奖励',
  `ref_id`      bigint        DEFAULT NULL                    COMMENT '关联业务ID（订单ID/订阅ID等，按 type 解析）',
  `is_read`     tinyint       NOT NULL DEFAULT 0              COMMENT '是否已读: 0=未读, 1=已读',
  `create_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id`   (`user_id`),
  KEY `idx_is_read`   (`is_read`),
  KEY `idx_type`      (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统通知表';


SET FOREIGN_KEY_CHECKS = 1;
