基于 Seedream 4.0 模型的多图融合应用开发实战(下)
资料来源:火山引擎-开发者社区
本文作者:茉卷,TRAE 开发者用户
背景
之前我们分享过 基于 Seedream 4.0 模型的多图融合应用开发实战 一文,基于该项目的代码,本文继续展示项目集成数据库和订阅功能的实际开发过程和经验要点总结。过程包含:
使用 TRAE SOLO 模式设计 MVP 开发计划
使用 Supabase 实现用户注册登录功能
使用 Stripe (沙盒)实现订阅系统
在 TRAE 中,Supabase 和 Stripe 都可以轻松集成**(需到对应的网站注册)** 。
项目提示词 + 系统设计
我们先构建一个项目提示词,让 TRAE 先给出第一个设计。
请先阅读文档,该文档详细介绍了 DEMO 项目的概况。基于此 DEMO,您需要构建一个符合国际最佳实践的多图融合与自动审核的创意图像生成网站。
具体要求如下:
技术架构:
采用 Supabase 实现后台数据库系统
设计完整的用户邮箱认证登录系统
开发配套的后台管理系统
支付系统:
集成 Stripe 沙盒环境
展示可订阅的服务套餐
实现沙盒环境订阅功能
确保设计可无缝切换至正式支付环境
订阅方案:
免费用户:每日 5 次图像融合生成机会
Pro 订阅用户:每日 10 次图像融合生成机会
UI 设计标准:
遵循交互设计最佳实践
界面简洁美观
达到国际一流水平
确保良好的用户体验
请确保所有功能模块的设计与实现均符合行业最高标准。
1.SOLO 初步生成技术文档
设计方案看上去不错,但是能不能用于生产,还有待检查。
2.关键参数处理机制确认
这里我们可以让 AI 检查该方案,找出安全隐患。
方案确实存在安全风险,这里需要研究 AI 的改进方案。
3.架构方案重构与优化
挑战: 新架构虽然在安全性和完整性方面有显著提升,但复杂度也相应增加,偏离了最小可行产品(MVP)的初衷。
上下滑动查看完整内容
基于生产环境的最佳实践,重新设计并优化整个系统部署方案。方案需采用生产版本标准,包含以下核心要素:
系统架构设计
采用高可用分布式架构
实现服务无状态化
设计完善的容灾机制
部署策略
实施蓝绿部署或滚动更新
配置自动化 CI/CD 流水线
建立多环境隔离机制(开发/测试/预发/生产)
安全规范
实施最小权限原则
配置完善的监控告警系统
实现数据加密传输与存储
性能优化
进行容量规划与压力测试
配置自动扩缩容策略
优化资源利用率
运维保障
建立完善的日志收集系统
设计标准化运维流程
制定详细的应急预案
请确保方案符合行业标准的生产环境要求,并提供详细的实施步骤和技术选型建议。
新的架构
4.再次评估新方案
经过详细评估,新架构方案在当前资源条件下的符合度较低,需要进一步调整以适应实际开发能力。
5.MVP 开发计划制定
让 TRAE 制定 5 人团队 产出 MVP 软件计划。
上下滑动查看完整内容
制定一个基于 5 人团队每周标准工作 40 小时的软件生产版本实现计划,目标是交付一个最小可行产品(MVP)。计划需包含以下详细内容:
版本目标与功能范围
明确定义 MVP 的核心功能需求和技术指标
划定版本边界和优先级排序的功能清单
确定交付标准和验收条件
每周任务分配与里程碑
将开发周期划分为每周一个迭代周期
为每个迭代设定可交付的阶段性成果
制定详细的周任务分解表(含开发/测试/文档任务)
人员分工与职责划分
明确 5 名成员的角色(如开发/测试/文档)
分配具体模块的开发负责人
制定交叉评审和协同工作机制
代码提交与版本控制流程
建立 Git 分支管理策略(feature/bugfix/release 分支)
制定每日代码提交规范和代码审查流程
设置版本 tag 标记规则
质量保证与测试安排
制定单元测试覆盖率要求(建议≥80%)
安排每周集成测试和冒烟测试时间点
规划用户验收测试(UAT)方案
风险预估与应对方案
识别技术/进度/人员方面的主要风险
为每个风险制定缓解措施和应急方案
建立风险监控和上报机制
计划需确保:
每人每周工作量控制在 40 小时以内
开发/测试/文档任务均衡分配
关键路径任务优先保障资源
预留 10-15%缓冲时间应对突发情况
开发目标: 交付最小可行产品(MVP)。
上下滑动查看完整内容
AI 多图融合创作平台 - MVP 开发实施计划 ## 1. 版本目标与功能范围 ### 1.1 MVP 核心功能需求 核心价值主张: 为用户提供基于 AI 的多图融合创作服务,支持图片上传、智能融合和结果下载。
核心功能清单:
用户注册与登录系统
图片上传与预览功能
AI 多图融合处理(基于火山引擎 SeeDream4)
融合结果展示与下载
基础用户配额管理
简单的用户界面和交互体验
1.2 技术指标要求
1.3 功能优先级排序 P0 - 必须实现(核心功能):
用户注册/登录
图片上传功能
AI 图片融合处理
结果展示和下载
P1 - 重要功能:
用户配额管理
基础错误处理
响应式设计
P2 - 可选功能(MVP 后考虑):
用户历史记录
高级参数配置
社交分享功能
1.4 交付标准和验收条件 功能验收标准:
所有 P0 功能 100%完成并通过测试
P1 功能至少 80%完成
单元测试覆盖率 ≥ 80%
集成测试通过率 ≥ 95%
用户验收测试通过率 ≥ 90%
技术验收标准:
代码审查通过率 100%
无严重安全漏洞
性能指标达到要求
部署文档完整
2. 每周任务分配与里程碑 ### 2.1 开发周期规划(8 周迭代) #### 第 1 周:项目启动与基础架构 里程碑: 完成项目初始化和基础架构搭建
完整的开发环境
基础项目结构
CI/CD 流水线
数据库表结构
第 2 周:用户认证系统 里程碑: 完成用户注册、登录功能
用户注册/登录功能
用户会话管理
认证相关测试用例
第 3 周:图片上传功能 里程碑: 完成图片上传和预览功能
图片上传界面
文件存储功能
图片格式验证
上传进度显示
第 4 周:AI 融合核心功能 里程碑: 完成 AI 图片融合处理功能
AI 图片融合功能
处理状态显示
错误处理机制
第 5 周:结果展示与下载 里程碑: 完成融合结果展示和下载功能
融合结果展示界面
图片下载功能
结果历史记录
第 6 周:用户配额管理 里程碑: 完成基础配额管理系统
用户配额管理系统
配额使用统计
配额不足处理
第 7 周:集成测试与优化 里程碑: 完成系统集成测试和性能优化
完整的端到端测试
性能优化报告
部署就绪的系统
第 8 周:用户验收测试与发布准备 里程碑: 完成 UAT 测试和生产发布准备
MVP 产品发布版本
完整的用户文档
生产环境部署
2.2 每周工作量分配 工作量控制原则:
每人每周 40 小时标准工作时间
预留 10%缓冲时间(4 小时)
实际安排 36 小时具体任务
关键路径任务优先分配资源
3. 人员分工与职责划分 ### 3.1 团队角色定义 #### 角色 1:前端负责人(Frontend Lead) 主要职责:
前端架构设计和技术选型
核心页面和组件开发
前端代码审查和质量把控
与后端 API 接口对接
技能要求:
React/TypeScript 专家级
3 年以上前端开发经验
熟悉现代前端工程化
角色 2:后端负责人(Backend Lead) 主要职责:
后端架构设计和数据库设计
核心 API 开发和第三方服务集成
后端代码审查和性能优化
生产环境部署和运维支持
技能要求:
Node.js/Supabase 专家级
3 年以上后端开发经验
熟悉云服务和 API 集成
角色 3:前端开发者(Frontend Developer) 主要职责:
UI 组件开发和页面实现
用户交互逻辑实现
前端单元测试编写
协助前端负责人完成开发任务
技能要求:
React/JavaScript 熟练
1-2 年前端开发经验
良好的 UI/UX 理解能力
角色 4:测试负责人(QA Lead) 主要职责:
测试策略制定和测试计划执行
自动化测试框架搭建
集成测试和端到端测试
质量把控和缺陷管理
技能要求:
2 年以上测试经验
熟悉自动化测试工具
具备基础开发能力
角色 5:文档负责人(Documentation Lead) 主要职责:
技术文档编写和维护
API 文档和用户手册
项目管理和进度跟踪
跨团队沟通协调
技能要求:
优秀的文档编写能力
项目管理经验
技术背景和沟通能力
3.2 模块开发负责人分配
3.3 协同工作机制 每日站会(Daily Standup):
时间:每天上午 9:30,15 分钟
参与:全体团队成员
内容:昨日完成、今日计划、遇到问题
代码审查机制:
所有代码必须经过至少 1 人审查
核心功能代码需要 2 人审查
审查重点:代码质量、安全性、性能
技术分享会:
时间:每周五下午,1 小时
内容:技术难点分享、最佳实践讨论
轮流主讲,促进知识共享
4. 代码提交与版本控制流程 ### 4.1 Git 分支管理策略 分支结构:
main (生产分支)
├── develop (开发主分支)
│ ├── feature/user-auth (功能分支)
│ ├── feature/image-upload (功能分支)
│ └── feature/ai-fusion (功能分支)
├── release/v1.0.0 (发布分支)
└── hotfix/critical-bug (热修复分支)
分支规则:
main
: 生产环境代码,只接受来自 release 和 hotfix 的合并develop
: 开发主分支,集成所有功能分支feature/*
: 功能开发分支,从 develop 分出,完成后合并回 developrelease/*
: 发布准备分支,从 develop 分出,测试通过后合并到 mainhotfix/*
: 紧急修复分支,从 main 分出,修复后合并到 main 和 develop
4.2 代码提交规范 提交信息格式:
():
类型定义: - feat
: 新功能 - fix
: Bug 修复 - docs
: 文档更新 - style
: 代码格式调整 - refactor
: 代码重构 - test
: 测试相关 - chore
: 构建过程或辅助工具变动 提交示例: feat(auth): add user registration functionality - Implement user registration form - Add email validation - Integrate with Supabase Auth Closes #123 ### 4.3 代码审查流程 Pull Request 流程: 1. 创建功能分支并完成开发 2. 提交 PR 到 develop 分支 3. 自动化测试执行 4. 指定审查人员进行代码审查 5. 审查通过后合并到 develop 6. 删除功能分支 审查检查清单: - [ ] 代码符合项目编码规范 - [ ] 功能实现符合需求 - [ ] 包含必要的单元测试 - [ ] 没有明显的性能问题 - [ ] 没有安全漏洞 - [ ] 文档已更新 ### 4.4 版本标记规则 版本号格式: v..
标记规则: - 每个 sprint 结束创建 release 标记 - 生产发布创建正式版本标记 - 热修复创建 patch 版本标记 **标记示例:**bash # Sprint 版本 git tag -a v1.0.0-sprint1 -m "Sprint 1 release" # 正式版本 git tag -a v1.0.0 -m "MVP release" # 修复版本 git tag -a v1.0.1 -m "Critical bug fix" ## 5. 质量保证与测试安排 ### 5.1 测试策略 测试金字塔: E2E Tests (10%) ────────────── Integration Tests (20%) ──────────────────────── Unit Tests (70%) ### 5.2 单元测试要求 覆盖率目标: ≥80% 测试框架: - 前端:Jest + React Testing Library - 后端:Jest + Supertest 测试重点: - 核心业务逻辑函数 - 工具函数和帮助方法 - React 组件的关键交互 - API 接口的输入输出 **测试示例:**typescript // 前端组件测试 describe('ImageUpload Component', () => { test('should upload image successfully', async () => { // 测试逻辑 });
test('should show error for invalid file type', () => {
// 测试逻辑
});
});
// 后端 API 测试
describe('Auth API', () => {
test('POST /api/auth/login should return token', async () => {
// 测试逻辑
});
});
5.3 集成测试安排 测试时间点:
每周三:模块集成测试
每周五:端到端集成测试
Sprint 结束:完整回归测试
测试内容:
API 接口集成测试
前后端数据流测试
第三方服务集成测试
数据库操作测试
5.4 端到端测试 测试工具: Playwright
测试场景:
用户注册登录流程
完整的图片融合流程
错误处理和边界条件
跨浏览器兼容性
测试执行:
每日自动执行冒烟测试
每周执行完整 E2E 测试套件
发布前执行全面回归测试
5.5 用户验收测试(UAT) 测试阶段: 第 8 周
测试参与者:
产品经理
设计师
内部用户代表
测试内容:
功能完整性验证
用户体验评估
性能表现测试
兼容性确认
验收标准:
所有 P0 功能正常工作
用户满意度 ≥ 4.0/5.0
关键用户路径无阻塞问题
6. 风险预估与应对方案 ### 6.1 技术风险 #### 风险 1:第三方 API 集成问题 风险描述: 火山引擎 SeeDream4 API 集成可能遇到技术难题或服务不稳定
影响程度: 高
发生概率: 中等
缓解措施:
提前进行 API 调研和原型验证
准备备用的 AI 服务方案
与火山引擎技术支持建立联系
应急方案:
使用模拟数据完成前端开发
考虑其他 AI 图像处理服务
延后 AI 功能,优先完成基础功能
风险 2:性能瓶颈 风险描述: 图片处理和存储可能导致性能问题
影响程度: 中等
发生概率: 中等
缓解措施:
早期进行性能测试
实施图片压缩和优化
使用 CDN 加速图片访问
应急方案:
限制图片大小和数量
实施队列处理机制
升级服务器配置
6.2 进度风险 #### 风险 3:开发进度延迟 风险描述: 某些功能开发复杂度超出预期,导致进度延迟
影响程度: 高
发生概率: 中等
缓解措施:
每周进行进度评估和调整
预留 15%缓冲时间
优先保证 P0 功能完成
应急方案:
调整功能范围,推迟 P1 功能
增加工作时间或人员支持
重新评估和调整里程碑
风险 4:测试时间不足 风险描述: 开发延期导致测试时间压缩,影响质量
影响程度: 中等
发生概率: 中等
缓解措施:
开发过程中同步进行测试
自动化测试减少手工测试时间
提前准备测试用例和数据
应急方案:
延长测试周期,推迟发布
重点测试核心功能
发布后持续修复问题
6.3 人员风险 #### 风险 5:关键人员离职或请假 风险描述: 核心开发人员离职或长期请假影响项目进度
影响程度: 高
发生概率: 低
缓解措施:
建立知识共享机制
交叉培训和备份人员
完善的文档和代码注释
应急方案:
快速招聘替代人员
重新分配任务和职责
寻求外部技术支持
风险 6:团队协作问题 风险描述: 团队成员之间沟通不畅或技术分歧
影响程度: 中等
发生概率: 低
缓解措施:
建立清晰的沟通机制
定期团队建设活动
技术决策透明化
应急方案:
项目经理介入协调
技术专家仲裁决策
必要时调整团队结构
6.4 风险监控机制 风险监控指标:
每周进度完成率
代码质量指标(测试覆盖率、代码审查通过率)
团队士气和满意度
技术债务积累情况
风险上报机制:
日常风险:团队内部讨论解决
中等风险:项目经理协调处理
高风险:上报管理层,制定应对策略
风险评估频率:
每日站会:快速风险识别
每周回顾:风险状态更新
Sprint 结束:全面风险评估
7. 项目保障措施 ### 7.1 工作量控制 工作时间管理:
严格控制每人每周 40 小时工作时间
避免长期加班影响团队效率
合理安排任务优先级
任务分配原则:
根据个人能力和经验分配任务
确保开发/测试/文档任务均衡
关键路径任务优先分配资源
7.2 质量保证 代码质量:
强制代码审查流程
自动化代码质量检查
定期技术债务清理
测试质量:
测试用例覆盖所有核心功能
自动化测试减少人工错误
持续集成确保代码质量
7.3 沟通协调 定期会议:
每日站会:15 分钟,同步进度和问题
每周回顾:1 小时,总结和计划
Sprint 演示:2 小时,展示成果
文档管理:
及时更新技术文档
维护项目知识库
记录重要决策和变更
7.4 应急预案 进度延迟应对:
重新评估任务优先级
调整功能范围
增加资源投入
延长项目周期
质量问题应对:
立即停止相关开发
分析问题根本原因
制定修复计划
加强相关测试
人员问题应对:
快速重新分配任务
寻找临时支援
调整项目计划
必要时延期交付
8. 成功标准和验收 ### 8.1 项目成功标准 功能完成度:
P0 功能 100%完成
P1 功能 80%以上完成
所有功能通过验收测试
质量标准:
单元测试覆盖率 ≥ 80%
集成测试通过率 ≥ 95%
用户验收测试通过率 ≥ 90%
无严重安全漏洞
性能标准:
页面加载时间 < 3 秒
图片上传时间 < 10 秒
支持 100 并发用户
99%可用性
8.2 最终交付物 软件产品:
MVP 版本的完整应用
生产环境部署包
数据库初始化脚本
文档资料:
用户操作手册
技术文档和 API 文档
部署和运维指南
测试报告
项目资料:
项目总结报告
经验教训文档
后续迭代建议
项目预计总工时: 1600 小时(5 人 × 8 周 × 40 小时)
实际安排工时: 1440 小时(预留 10%缓冲时间)
项目周期: 8 周
团队规模: 5 人
预期交付: AI 多图融合创作平台 MVP 版本
实际开发过程与问题解决
第一版核心功能清单:
用户注册与登录系统
图片上传与预览功能
AI 多图融合处理(基于火山引擎 SeeDream4)
基础用户配额管理
简单的用户界面和交互体验
第一版只有登录和创作页面。
1.用户注册功能检查
用户注册后,数据库中就会出现用户的数据表。
注意:注册成功后,supa base 会给邮箱发送一封邮件,只有点击邮件中的链接(Confirm your mail),2.1 图中的 “Last sign in at” 值才会出现具体的登录时间(才能通过邮箱和密码登录成功)
2.登录访问权限问题
在如下图的界面中,输入注册的邮箱和密码后(登录系统),出现 406 访问拒绝
fetch.ts:15 GET https://zouvkpyjgbnwbxplvfck.supabase.co/rest/v1/users?select=*&id=eq.c6ad03a3-15be-400a-9ade-e9eshdebafd2 406 (Not Acceptable)
查看 supabase 数据库中有用户数据,但是请求数据失败。
把数据库截图交给模型,让 TRAE 理解现状,给出分析。
TRAE 找到问题原因,并修改代码。主要是因为 Supabase 客户端 的初始化里少写一些参数。
上下滑动查看完整内容
HTTP 406 错误主要由以下原因引起:
认证头信息缺失 :Supabase 客户端未正确传递认证令牌
会话状态异常 :用户会话过期或无效
RLS 策略配置错误 :Row Level Security 策略过于严格
权限配置问题 :数据库角色权限设置不正确
// 创建优化的 Supabase 客户端
exportconst supabase = createClient<Database>(
SUPABASE_CONFIG.url,
SUPABASE_CONFIG.anonKey,
{
auth: {
// 自动刷新令牌 autoRefreshToken: true,
// 持久化会话 persistSession: true,
// 检测 URL 中的会话 detectSessionInUrl: true,
// 确保会话存储在 localStorage 中 storage: typeof window !== 'undefined' ? window.localStorage : undefined,
// 设置会话刷新的阈值(在过期前 60 秒刷新) refreshThreshold: 60,
// 会话刷新间隔 refreshInterval: 30 * 60 * 1000, // 30 分钟 // 流程类型 flowType: 'pkce'
},
realtime: {
params: {
eventsPerSecond: 10
}
},
// 全局配置,确保所有请求都包含正确的头信息 global: {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Prefer': 'return=representation',
// 确保 API 密钥始终存在 'apikey': SUPABASE_CONFIG.anonKey
}
},
// 数据库配置 db: {
schema: 'public'
}
}
)
...
修改代码后,登录正常。
3.用户界面优化
去掉不必要的三方登录按钮(谷歌、twiter)
点击 “选择元素”,找到需要去掉的按钮并 添加到对话,在输入框中输入提示词。
TRAE 自动修改并完成。
在融合生图页面添加用户信息显示
提示词只要求增加了用户信息。但 TRAE 竟然自主规划了下拉菜单,支持登出,明确保持风格一致,还要进行一个自动测试。
TRAE 自动修改并完成。
4.多图融合功能调试
出现多图融合错误,把问题直接交给 TRAE,让 AI 分析。
TRAE 生成了一个错误分析文档:
TRAE 分析结论主要是 API Key 配置缺失导致融合功能失败。
这个错误的主要原因是 API Key 配置问题。通过配置有效的 SeeDream API Key,可以解决大部分网络请求失败的问题。同时,建议添加更完善的错误处理和配置验证机制,以提高系统的稳定性和可维护性。
检查环境配置文件(。env),确实是由于关键参数没有配置,出错时代码:
正确配置火山引擎关键参数。
图片上传与预览功能与融合生图功能完成。
意外发现
本来预期 AI 会按照已有方案执行:即图片先上传文件服务器,再获得 URL,通过 URL 的方式调用 SeeDream4。
意外的惊喜是 TRAE 使用了 直接上传图片 Base64 数据 到服务器的方式实现 (SeeDream4 支持 文件 URL 和 Base64 数据 的方式),这样就省去了文件上传对象存储的成本,爆赞👍
TRAE 能够自主使用最优设计是因为在项目开始阶段,它分析了已有代码。
5.功能完善与优化
“下载图片” 和 “重新生成” 按钮没反应
用之前的方法,把按钮发送给 TRAE,让它分析。
下载图片按钮有反应了,但是下载失败,跨域请求问题,TRAE 修复。
图片下载、重新生成 功能修改完成。
融合生图页面 切换出去再切换回来时,总是在刷新,打断生图任务
用 TRAE 提出需要解决的问题:
TRAE 自动修改并解决。
6.用户配额显示功能
需要实现用户配额的实时显示,确保数据库中的配额信息正确同步到前端界面。确认需求,让 TRAE 解决。
数据库中确认数据无误。
7.订阅系统完善
让 TRAE 确认 订阅功能,发现部分实现缺失,关键表不存在:
✅ user_quotas 表存在
❌ user_subscriptions 表缺失
❌ subscription_plans 表缺失
数据库中并没有 user_subscriptions 和 subscription_plans 表。
提出具体改进意见,让 TRAE 完善。
TRAE 生成了详细的订阅系统完善方案。
上下滑动查看完整内容
订阅系统完善计划文档
1. 项目概述
本文档旨在为 AI 多图融合创作平台的订阅系统提供完整的完善计划,包括数据库结构设计、UI 组件开发、Stripe 支付集成和订阅管理界面的实现。通过系统性的改进,为用户提供完整的订阅服务体验。
2. 数据库结构设计
2.1 subscription_plans 表设计
表名: subscription_plans
| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------| | id | UUID | PRIMARY KEY, DEFAULT gen_random_uuid() | 计划唯一标识 |
| name | VARCHAR(100) | NOT NULL | 计划名称(如:基础版、专业版、企业版) |
| description | TEXT | | 计划详细描述 |
| price | DECIMAL(10,2) | NOT NULL | 价格(月费) |
| currency | VARCHAR(3) | DEFAULT 'USD' | 货币代码 |
| billing_period | VARCHAR(20) | DEFAULT 'monthly' | 计费周期(monthly/yearly) |
| daily_limit | INTEGER | NOT NULL | 每日图片生成限制 |
| monthly_limit | INTEGER | NOT NULL | 每月图片生成限制 |
| features | JSONB | | 功能特性列表 |
| stripe_price_id | VARCHAR(255) | | Stripe 价格 ID |
| is_active | BOOLEAN | DEFAULT true | 是否启用 |
| sort_order | INTEGER | DEFAULT 0 | 排序顺序 |
| created_at | TIMESTAMP WITH TIME ZONE | DEFAULT NOW() | 创建时间 |
| updated_at | TIMESTAMP WITH TIME ZONE | DEFAULT NOW() | 更新时间 |
2.2 user_subscriptions 表设计
表名: user_subscriptions
| 字段名 | 数据类型 | 约束 | 描述 |
|--------|----------|------|------| | id | UUID | PRIMARY KEY, DEFAULT gen_random_uuid() | 订阅记录唯一标识 |
| user_id | UUID | NOT NULL, REFERENCES users(id) | 用户 ID |
| plan_id | UUID | NOT NULL, REFERENCES subscription_plans(id) | 订阅计划 ID |
| stripe_subscription_id | VARCHAR(255) | UNIQUE | Stripe 订阅 ID |
| stripe_customer_id | VARCHAR(255) | | Stripe 客户 ID |
| status | VARCHAR(20) | NOT NULL | 订阅状态(active/canceled/past_due/unpaid) |
| current_period_start | TIMESTAMP WITH TIME ZONE | NOT NULL | 当前周期开始时间 |
| current_period_end | TIMESTAMP WITH TIME ZONE | NOT NULL | 当前周期结束时间 |
| cancel_at_period_end | BOOLEAN | DEFAULT false | 是否在周期结束时取消 |
| canceled_at | TIMESTAMP WITH TIME ZONE | | 取消时间 |
| trial_start | TIMESTAMP WITH TIME ZONE | | 试用开始时间 |
| trial_end | TIMESTAMP WITH TIME ZONE | | 试用结束时间 |
| created_at | TIMESTAMP WITH TIME ZONE | DEFAULT NOW() | 创建时间 |
| updated_at | TIMESTAMP WITH TIME ZONE | DEFAULT NOW() | 更新时间 |
评论