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. 安装模块

cd ~/repos/showcase && ~/repos/sage/py3/bin/pip install .

2. 注册模块加载

编辑 ~/repos/sage/app/sage.py

from showcase.init import load_showcase
# 在 init() 函数中添加:
load_showcase()

3. 添加到 build.sh

编辑 ~/repos/sage/build.sh,在安装循环中添加 showcase

for m in appbase rbac ... showcase

4. wwwroot 软链接

cd ~/repos/sage/wwwroot
ln -sf ~/repos/showcase/wwwroot showcase

5. RBAC 权限

cd ~/repos/sage && ./py3/bin/python ~/repos/showcase/scripts/load_path.py

6. 菜单入口

编辑 ~/repos/sage/wwwroot/global_menu.ui,在 items 数组中添加:

,{"name":"showcase","label":"展示平台","icon":"fa fa-photo-film","url":"{{entire_url('/showcase/index.ui')}}","target":"app.sage_main_content"}

7. 建表

cd ~/repos/showcase
~/repos/sage/py3/bin/json2ddl mysql models/ > mysql.ddl.sql
# 然后在 MySQL 中执行 mysql.ddl.sql

8. 生成 CRUD 界面

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使用预加载全局函数
Description
No description provided
Readme 51 KiB
Languages
Python 65.1%
JavaScript 20.5%
CSS 13.9%
Shell 0.5%