yoone-wc-subscriptions/docs/数据库模型.md

53 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 文件说明:数据库模型文档,描述订阅实例表结构与 CRUD 接口设计 -->
# 数据库模型Yoone Subscriptions
本插件新增一个独立的数据库模型目录 `includes/models/`,用于管理用户订阅实例的持久化数据。当前实现增加了基础表结构与 CRUD 接口,方便未来接入续订、暂停、取消等业务。
## 表结构
表名:`{wp_prefix}yoone_subscriptions`
字段:
- `id` bigint(20) unsigned 主键,自增
- `user_id` bigint(20) unsigned 用户IDWP用户
- `product_id` bigint(20) unsigned 产品IDWooCommerce 产品)
- `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` 并在到期前触发续订流程。