showcase/README.md

143 lines
5.2 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.

# Showcase — 产品展示平台
Sage 平台的内容展示模块,支持多种媒体类型发布、社交互动和 KTV 付费下载。
## 功能概览
### 展示平台
- **5 种媒体类型**音乐、MTV、短视频、长视频、KTV
- **Feed 流**:按类型筛选、分页浏览、卡片瀑布流布局
- **社交互动**点赞toggle 防刷)、评论(支持嵌套回复)、浏览计数
- **作品详情**:完整信息展示、点赞状态、购买状态
### KTV 付费下载
- 付费作品购买下载(模拟支付)
- 购买记录管理(防重复购买)
- 下载计数统计
## 数据表4 张)
| 表名 | 说明 | 关键字段 |
|------|------|----------|
| `showcase_posts` | 作品主表 (24 字段) | media_type, content_url, price, like_count, view_count |
| `showcase_comments` | 评论表 (12 字段) | parent_id (嵌套回复), reply_count |
| `showcase_likes` | 点赞表 (4 字段) | UNIQUE(post_id, user_id) 防刷 |
| `showcase_downloads` | KTV 下载记录 (8 字段) | payment_status, UNIQUE(post_id, user_id) |
所有表使用 `sage` 数据库。
## API 端点11 个)
| 端点 | 方法 | 说明 |
|------|------|------|
| `showcase_feed.dspy` | GET | Feed 列表(分页 + media_type 筛选) |
| `showcase_post_detail.dspy` | GET | 作品详情(含点赞/购买状态,自动 +view_count |
| `showcase_post_create.dspy` | POST | 创建作品(自动填充 author_id |
| `showcase_post_update.dspy` | POST | 更新作品 |
| `showcase_post_delete.dspy` | POST | 删除作品 |
| `showcase_comment_create.dspy` | POST | 创建评论/回复(自动更新 comment_count 和 reply_count |
| `showcase_comment_update.dspy` | POST | 更新评论 |
| `showcase_comment_delete.dspy` | POST | 删除评论 |
| `showcase_comments_list.dspy` | GET | 获取某作品全部评论 |
| `showcase_like_toggle.dspy` | POST | 切换点赞(返回 liked: true/false |
| `showcase_download_purchase.dspy` | POST | KTV 购买下载(检查重复购买) |
## CRUD 管理界面3 个)
| CRUD 别名 | 表 | 功能 |
|-----------|------|------|
| `showcase_posts_list` | showcase_posts | 作品管理(搜索:标题/类型/状态) |
| `showcase_comments_list` | showcase_comments | 评论管理 |
| `showcase_downloads_list` | showcase_downloads | 下载记录管理 |
通过 `xls2crud` 自动生成,运行时由 `build.sh` 产出。
## 目录结构
```
showcase/
├── showcase/ # Python 包
│ ├── __init__.py # 导出所有函数
│ └── init.py # ServerEnv 注册 + 业务逻辑
├── models/ # 数据表定义 (JSON)
│ ├── showcase_posts.json
│ ├── showcase_comments.json
│ ├── showcase_likes.json
│ └── showcase_downloads.json
├── json/ # CRUD 定义 (JSON)
│ ├── showcase_posts_list.json
│ ├── showcase_comments_list.json
│ └── showcase_downloads_list.json
├── wwwroot/
│ ├── index.ui # Feed 主页(卡片流 + 类型筛选)
│ ├── detail.ui # 作品详情页
│ ├── showcase.css # 样式
│ ├── showcase.js # 前端逻辑feed 加载/卡片渲染)
│ └── api/ # 11 个 dspy 端点
├── init/
│ └── data.json # 初始化数据media_type 编码)
├── scripts/
│ └── load_path.py # RBAC 权限注册
├── pyproject.toml
└── README.md
```
## Sage 集成步骤
### 1. 安装模块
```bash
cd ~/repos/showcase && ~/repos/sage/py3/bin/pip install .
```
### 2. 注册模块加载
编辑 `~/repos/sage/app/sage.py`
```python
from showcase.init import load_showcase
# 在 init() 函数中添加:
load_showcase()
```
### 3. 添加到 build.sh
编辑 `~/repos/sage/build.sh`,在安装循环中添加 `showcase`
```bash
for m in appbase rbac ... showcase
```
### 4. wwwroot 软链接
```bash
cd ~/repos/sage/wwwroot
ln -sf ~/repos/showcase/wwwroot showcase
```
### 5. RBAC 权限
```bash
cd ~/repos/sage && ./py3/bin/python ~/repos/showcase/scripts/load_path.py
```
### 6. 菜单入口
编辑 `~/repos/sage/wwwroot/global_menu.ui`,在 items 数组中添加:
```json
,{"name":"showcase","label":"展示平台","icon":"fa fa-photo-film","url":"{{entire_url('/showcase/index.ui')}}","target":"app.sage_main_content"}
```
### 7. 建表
```bash
cd ~/repos/showcase
~/repos/sage/py3/bin/json2ddl mysql models/ > mysql.ddl.sql
# 然后在 MySQL 中执行 mysql.ddl.sql
```
### 8. 生成 CRUD 界面
```bash
cd ~/repos/showcase
~/repos/sage/py3/bin/xls2crud -m models -o wwwroot showcase json/*.json
```
## 技术要点
- **点赞防刷**`showcase_likes` 表有 `UNIQUE(post_id, user_id)` 唯一索引
- **计数冗余**`like_count`/`comment_count`/`view_count` 冗余存储在 posts 表,避免 Feed 流 COUNT 查询
- **嵌套评论**`parent_id` 指向同表 id支持无限层级回复
- **付费隔离**KTV 作品设置 `price > 0`,购买后 `is_purchased=True` 才返回 content_url
- **dspy 规范**:零 import、零 print、零 uuid使用预加载全局函数