53 lines
2.8 KiB
Markdown
53 lines
2.8 KiB
Markdown
<!-- 文件说明:数据库模型文档,描述订阅实例表结构与 CRUD 接口设计 -->
|
||
# 数据库模型(Yoone Subscriptions)
|
||
|
||
本插件新增一个独立的数据库模型目录 `includes/models/`,用于管理用户订阅实例的持久化数据。当前实现增加了基础表结构与 CRUD 接口,方便未来接入续订、暂停、取消等业务。
|
||
|
||
## 表结构
|
||
|
||
表名:`{wp_prefix}yoone_subscriptions`
|
||
|
||
字段:
|
||
- `id` bigint(20) unsigned 主键,自增
|
||
- `user_id` bigint(20) unsigned 用户ID(WP用户)
|
||
- `product_id` bigint(20) unsigned 产品ID(WooCommerce 产品)
|
||
- `period` varchar(10) 订阅周期:`month` 或 `year`
|
||
- `qty` int(11) unsigned 订阅数量(每周期数量)
|
||
- `price_per_cycle` decimal(18,8) 每周期价格(不含周期系数;年周期计算会乘以 12)
|
||
- `status` varchar(20) 订阅状态(如 `active`、`paused`、`canceled`,当前未做枚举限制)
|
||
- `start_date` datetime 订阅开始时间
|
||
- `next_renewal_date` datetime 下次续订时间(可空)
|
||
- `created_at` datetime 创建时间
|
||
- `updated_at` datetime 更新时间
|
||
|
||
索引:
|
||
- `user_id`
|
||
- `product_id`
|
||
- `status`
|
||
|
||
安装:在插件激活时调用安装逻辑创建/升级表结构(使用 `dbDelta`)。
|
||
|
||
## 目录与类
|
||
|
||
- 目录:`wp-content/plugins/yoone-subscriptions/includes/models/`
|
||
- 类:`Yoone_Subscriptions_DB`(文件:`class-yoone-subscriptions-db.php`)
|
||
|
||
主要方法:
|
||
- `Yoone_Subscriptions_DB::install()` 创建/升级表结构
|
||
- `Yoone_Subscriptions_DB::create(array $data)` 插入订阅实例,返回插入ID
|
||
- `Yoone_Subscriptions_DB::update(int $id, array $data)` 更新订阅实例
|
||
- `Yoone_Subscriptions_DB::get(int $id)` 获取单条订阅实例
|
||
- `Yoone_Subscriptions_DB::get_by_user(int $user_id, array $args = [])` 获取某用户的订阅实例列表
|
||
|
||
## 与现有逻辑的关系
|
||
|
||
目前产品的订阅计划配置(是否启用、周期、默认数量、每周期价格、是否允许一次性购买)仍存储在产品 `postmeta` 中,见 `Yoone_Subscriptions::get_config()`。
|
||
|
||
新增数据库模型仅作为“用户订阅实例”的数据持久层,暂未在前端流程中自动写入。待未来接入续订与周期性扣费时,可在下单或激活订阅时创建实例,并结合定时任务(`wp_cron`)或队列进行续订处理。
|
||
|
||
## 下一步建议
|
||
|
||
- 在结账成功(`woocommerce_checkout_order_processed` 或 `woocommerce_order_status_changed`)时,根据订单行项目写入订阅实例。
|
||
- 增加状态枚举与状态迁移方法(active→paused→canceled),以及日志记录。
|
||
- 增加管理后台页面展示用户订阅列表(可筛选用户、产品、状态),支持手动操作。
|
||
- 结合支付网关对接续订扣费逻辑,写入 `next_renewal_date` 并在到期前触发续订流程。 |