-- ============================================================
-- 应用订阅表
-- 用于记录用户在应用市场购买/订阅的应用
-- ============================================================

CREATE TABLE IF NOT EXISTS `app_subscription` (
  `id`                  BIGINT       PRIMARY KEY AUTO_INCREMENT,
  `subscription_no`     VARCHAR(64)  NOT NULL COMMENT '订阅编号（业务唯一）',
  `user_id`             BIGINT       NOT NULL COMMENT '购买用户ID',
  `product_id`          BIGINT       NOT NULL COMMENT '应用产品ID',
  `tenant_id`           BIGINT       DEFAULT NULL COMMENT '租户ID',

  -- 订阅状态
  `status`              VARCHAR(20)  NOT NULL DEFAULT 'pending' COMMENT 'pending-待支付, active-生效中, expired-已过期, cancelled-已取消',

  -- 价格信息
  `price_type`          VARCHAR(20)  NOT NULL COMMENT 'free-免费, one_time-一次性, subscription-订阅',
  `original_price`      DECIMAL(10,2) DEFAULT 0 COMMENT '原价（单位：元）',
  `pay_price`           DECIMAL(10,2) DEFAULT 0 COMMENT '实付金额（单位：元）',
  `pay_type`            TINYINT      DEFAULT 0 COMMENT '支付方式: 0-余额, 1-微信, 2-支付宝, 12-免费',
  `pay_status`          TINYINT      DEFAULT 0 COMMENT '0-未支付, 1-已支付',
  `pay_time`            DATETIME     DEFAULT NULL COMMENT '支付时间',
  `transaction_id`      VARCHAR(128) DEFAULT NULL COMMENT '第三方交易号',

  -- 订阅周期
  `subscription_period` VARCHAR(10)  DEFAULT NULL COMMENT 'month-按月, year-按年',
  `start_time`          DATETIME     DEFAULT NULL COMMENT '生效时间',
  `expire_time`         DATETIME     DEFAULT NULL COMMENT '到期时间（订阅型）',
  `auto_renew`          TINYINT      DEFAULT 0 COMMENT '是否自动续费 0-否 1-是',

  -- 应用实例信息（购买后分配）
  `instance_domain`     VARCHAR(255) DEFAULT NULL COMMENT '分配的域名',
  `instance_admin_url`  VARCHAR(500) DEFAULT NULL COMMENT '实例管理后台URL',
  `instance_config`     TEXT         DEFAULT NULL COMMENT '实例配置（JSON）',

  -- 关联支付订单号（复用统一支付）
  `order_no`            VARCHAR(64)  DEFAULT NULL COMMENT '关联的支付订单号',
  `order_id`            BIGINT       DEFAULT NULL COMMENT '关联的支付订单ID',

  -- 通用字段
  `remark`              VARCHAR(500) DEFAULT NULL,
  `deleted`             TINYINT      DEFAULT 0,
  `sort_number`         INT          DEFAULT 0,
  `create_time`         DATETIME     DEFAULT CURRENT_TIMESTAMP,
  `update_time`         DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  INDEX `idx_user_id` (`user_id`),
  INDEX `idx_product_id` (`product_id`),
  INDEX `idx_subscription_no` (`subscription_no`),
  INDEX `idx_status` (`status`),
  INDEX `idx_tenant_id` (`tenant_id`),
  UNIQUE KEY `uk_user_product_active` (`user_id`, `product_id`, `deleted`) COMMENT '同一用户对同一应用只能有一个有效订阅'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用订阅表';
