| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | SERIAL | ✅ | 自动递增 | 主键,帖子唯一标识符 |
| content | TEXT | ✅ | - | 帖子内容(黄金行情分析、交易信号等) |
| image_path | VARCHAR(500) | ❌ | NULL | 图片 URL(存储在 Supabase Storage 的图片链接) |
| author_id | UUID | ❌ | NULL | 作者 ID(关联到 Supabase Auth 用户表) |
| author_name | VARCHAR(100) | ❌ | NULL | 作者名称(冗余字段,提升查询性能) |
| status | VARCHAR(20) | ❌ | 'published' | 发布状态:draft(草稿)/ published(已发布)/ archived(已归档) |
| is_filtered | BOOLEAN | ❌ | FALSE | 是否被过滤(TRUE = 敏感内容,不公开显示) |
| filter_reason | VARCHAR(200) | ❌ | NULL | 过滤原因(如果被过滤,记录原因) |
| created_at | TIMESTAMP | ❌ | NOW() | 创建时间(帖子首次创建的时间) |
| published_at | TIMESTAMP | ❌ | NOW() | 发布时间(帖子正式发布的时间) |
| updated_at | TIMESTAMP | ❌ | NOW() | 更新时间(自动更新,通过触发器) |
| deleted_at | TIMESTAMP | ❌ | NULL | 删除时间(软删除,NULL = 未删除) |
| source | VARCHAR(50) | ❌ | 'telegram' | 来源(telegram / web / api 等) |
| feishu_notified | BOOLEAN | ❌ | FALSE | 是否已通知飞书(用于集成飞书机器人) |
| qq_notified | BOOLEAN | ❌ | FALSE | 是否已通知 QQ(用于集成 QQ 机器人) |
| view_count | INTEGER | ❌ | 0 | 浏览次数(统计帖子被查看的次数) |
| like_count | INTEGER | ❌ | 0 | 点赞数(统计帖子被点赞的次数) |
| 字段 | 说明 | 使用场景 |
|---|---|---|
| id | 主键 | 唯一标识每条帖子 |
| content | 帖子内容 | 存储黄金行情分析、交易建议等文本 |
| image_path | 图片链接 | 存储图表、截图等辅助说明图片的 URL |
示例:
{
"id": 1,
"content": "黄金突破 $2050 关键阻力位,建议关注回调买入机会。",
"image_path": "https://xxx.supabase.co/storage/v1/object/public/post-images/chart.jpg"
}| 字段 | 说明 | 使用场景 |
|---|---|---|
| author_id | 作者 ID | 关联到 Supabase Auth,标识帖子作者 |
| author_name | 作者名称 | 显示作者名字,避免每次都查询用户表 |
使用场景:
- 未来添加用户登录后,可以显示"由 XXX 发布"
- 用户可以查看自己发布的所有帖子
- 管理员可以按作者筛选帖子
当前状态:暂时为 NULL(因为还没有登录功能)
| 字段 | 说明 | 可选值 | 使用场景 |
|---|---|---|---|
| status | 发布状态 | draft / published / archived | 控制帖子是否公开显示 |
| is_filtered | 是否过滤 | TRUE / FALSE | 标记敏感内容,不公开显示 |
| filter_reason | 过滤原因 | 文本 | 记录为什么被过滤(如"包含敏感词") |
工作流程:
1. 创建帖子 → status = 'draft'(草稿)
2. 审核通过 → status = 'published'(发布)
3. 发现问题 → is_filtered = TRUE(过滤)
4. 不再需要 → status = 'archived'(归档)
前端显示规则:
- 只显示
status = 'published'且is_filtered = FALSE且deleted_at IS NULL的帖子
| 字段 | 说明 | 更新方式 |
|---|---|---|
| created_at | 创建时间 | 插入时自动设置,不再改变 |
| published_at | 发布时间 | 首次发布时设置 |
| updated_at | 更新时间 | 每次修改时自动更新(触发器) |
| deleted_at | 删除时间 | 软删除时设置为当前时间 |
软删除说明:
- 不真正删除数据,只设置
deleted_at时间戳 - 好处:可以恢复、可以审计、可以统计
- 查询时:
WHERE deleted_at IS NULL
| 字段 | 说明 | 使用场景 |
|---|---|---|
| source | 来源 | 标识帖子从哪里来(telegram / web / api) |
| feishu_notified | 飞书通知状态 | 避免重复通知飞书群 |
| qq_notified | QQ 通知状态 | 避免重复通知 QQ 群 |
使用场景:
- 从 Telegram Bot 接收消息 →
source = 'telegram' - 从网页后台发布 →
source = 'web' - 通知飞书后 →
feishu_notified = TRUE
| 字段 | 说明 | 使用场景 |
|---|---|---|
| view_count | 浏览次数 | 统计帖子热度 |
| like_count | 点赞数 | 用户互动统计 |
未来功能:
- 显示"已有 123 人查看"
- 按热度排序
- 统计最受欢迎的帖子
SELECT * FROM gold_signals
WHERE status = 'published'
AND is_filtered = FALSE
AND deleted_at IS NULL
ORDER BY created_at DESC;SELECT * FROM gold_signals
WHERE author_id = 'user-uuid-here'
AND deleted_at IS NULL
ORDER BY created_at DESC;SELECT * FROM gold_signals
WHERE status = 'draft'
AND deleted_at IS NULL;UPDATE gold_signals
SET deleted_at = NOW()
WHERE id = 123;UPDATE gold_signals
SET deleted_at = NULL
WHERE id = 123;- ✅ 可以恢复误删的数据
- ✅ 保留历史记录用于审计
- ✅ 不影响关联数据的完整性
created_at:帖子首次创建的时间(可能是草稿)published_at:帖子正式发布的时间(对外可见)- 用途:区分"创建"和"发布"两个时间点
- 避免每次查询都要 JOIN 用户表
- 提升查询性能(特别是列表页)
- 即使用户改名,历史帖子仍显示发布时的名字
如果以后需要更多功能,可以考虑增加:
| 字段 | 类型 | 说明 |
|---|---|---|
| title | VARCHAR(200) | 帖子标题(如果需要标题+内容的结构) |
| tags | TEXT[] | 标签数组(如 ['黄金', '技术分析', '做多']) |
| category | VARCHAR(50) | 分类(如 '黄金', '白银', '原油') |
| priority | INTEGER | 优先级(置顶功能) |
| comment_count | INTEGER | 评论数 |
| share_count | INTEGER | 分享次数 |
当前表结构已经为未来功能做好准备! 🎉