Zhou Weidong
|
7b360ddccd
|
feat(content): 新增运营分类与剧单分类管理
|
2026-10-22 22:17:58 +08:00 |
|
Zhou Weidong
|
5552caa6c1
|
fix(media): 修正转码任务认领与媒资 id 校验
|
2026-10-22 15:27:51 +08:00 |
|
Zhou Weidong
|
5ef5dd8eaf
|
fix(media): 修正转码媒资 id 解析与存量分集补登记
|
2026-10-22 14:59:16 +08:00 |
|
Zhou Weidong
|
7d563f2cd6
|
fix(media): 补齐分集转码绑定与产物回填
|
2026-10-22 12:03:58 +08:00 |
|
Zhou Weidong
|
0143fa036c
|
feat(admin): 剧集列表接口支持分页
|
2026-10-21 23:09:30 +08:00 |
|
Vicky
|
9adf8c5630
|
fix(content): 短剧保存时始终同步分集价格
|
2026-10-21 22:48:09 +08:00 |
|
Vicky
|
8bb7f63c62
|
test(content): 覆盖免费集数未变但分集漂移的修复场景
|
2026-10-21 22:48:09 +08:00 |
|
Zhou Weidong
|
4c4b53cd69
|
fix(content): 短剧保存免费集数时同步分集免费状态
|
2026-10-21 22:34:21 +08:00 |
|
Zhou Weidong
|
d7f226659c
|
test(content): 覆盖短剧免费集数同步分集价格
|
2026-10-21 22:34:21 +08:00 |
|
Zhou Weidong
|
c9b8ec6805
|
fix(content): 短剧编辑未传字段不再覆盖存量数据
|
2026-10-21 18:52:11 +08:00 |
|
Zhou Weidong
|
8f35160b56
|
feat(app): 推荐流支持分类过滤
|
2026-10-21 18:23:57 +08:00 |
|
Zhou Weidong
|
4c614a5ece
|
feat(content): 短剧类型与内容类型支持多选
|
2026-10-21 17:01:12 +08:00 |
|
Zhou Weidong
|
c6f729fb27
|
feat(interaction): 点赞与评论按集统计
|
2026-10-21 15:56:26 +08:00 |
|
Zhou Weidong
|
1052b97306
|
feat(content): 新增内容类型与首页分类 feed
|
2026-10-21 15:40:19 +08:00 |
|
Zhou Weidong
|
65e8fbfc70
|
fix(interaction): 收藏计数同步维护并新增评论数接口
|
2026-10-21 11:33:59 +08:00 |
|
Zhou Weidong
|
256821b824
|
feat(content): 列表卡片与后台返回收藏点赞评论数
|
2026-10-21 11:14:18 +08:00 |
|
Zhou Weidong
|
212834d59d
|
fix(backend): 修复上传转码与短剧发布链路(multipart 上限、转码防重、剧集发布、schema 字段)
|
2026-10-19 18:38:48 +08:00 |
|
Vicky
|
5ce6de1e3b
|
Merge remote-tracking branch 'origin/main'
|
2026-10-16 10:51:15 +08:00 |
|
Vicky
|
37c9a141d3
|
feat: S0 主键改雪花(DDL 去 identity + 实体 ASSIGN_ID + 雪花配置)
为什么:自增主键把 ID 分配锁在单库序列上,分库分表时无法横向扩展。趁线上业务数据
近零(只有系统种子表有量)先改,代价最低。
- sql/schema.sql、sql/schema-phase1.sql、sql/partition-maintenance.sql:61 处
GENERATED BY DEFAULT AS IDENTITY 去掉,主键改 BIGINT 无默认值
- 52 个实体 @TableId IdType.AUTO -> IdType.ASSIGN_ID;两个入口 id-type: assign_id,
并加 global-config.sequence.worker-id/datacenter-id(单机固定值,多实例需按实例分配)
- 新增 sql/migrate-s0-snowflake.sql:存量库幂等迁移,走 DROP IDENTITY 保留数据,不重建表
- 实测:三份建表脚本在新库连跑两遍幂等;线上 57 张表 identity 归零;
watch_history/playback_ticket/order_event 的主键与唯一索引仍含分区键
|
2026-10-16 09:00:38 +08:00 |
|
Zhou Weidong
|
35be37c193
|
style: 全量补充作者标识 // Author: fruit.com.cn
|
2026-10-16 00:01:53 +08:00 |
|
Vicky
|
8b8ebf944f
|
feat: 07 创作者中心批 3(分片上传挂载 + 分集收费与试看)
为什么:创作者传完片子得把产物挂到分集上才能播,而这条链路之前有两个洞:
uploadId 是"凭证",谁拿到都能往别人的会话里塞分片 / 合并;产物挂载也没有归属校验,
拿到别人的 assetId 就能把自己的剧指向别人的素材。定价这边则缺创作者入口与试看秒数配置。
- 上传复用现有 /admin/media/upload/{init,chunk,complete},不重写;新增 GET /admin/media/upload/{uploadId}
做断点续传回显(receivedChunks/totalChunks/percent/status,完成后带 url)
- 上传会话归属校验:chunk / complete / 进度查询都要求会话发起人,别人拿到 uploadId 也操作不了(403)
- 新增 attach 接口:产物必须① 是本次登录的人上传的(media_asset.create_by)② bizType=EPISODE 且状态 ready/uploaded
③ 分集属于自己这部剧且作品可编辑;挂载时把产物时长补到分集上
- 收费配置复用 PriceService:新增创作者侧 GET/PUT /admin/creator-center/dramas/{id}/prices;
PriceSaveReqVO/PriceRespVO 补 previewSeconds(落在已有的 drama_episode.preview_seconds,不新造一套)
- 定价沿用"可编辑状态"口径:draft/offline 可改,已上线要先申请下线;dramaId 以路径为准,别人的 episodeId 被忽略
- 权限点 creator-center:upload / creator-center:price:update;创作者角色同时获得 cover:upload / episode:upload(复用上传接口)
实测:未登录请求付费集返回 {"accessType":"COIN_REQUIRED","unlockCoin":50,"previewSeconds":15},
免费集直接拿到签名播放地址 —— 创作者改的价格确实走到了 C 端付费判定。
|
2026-10-15 14:12:10 +08:00 |
|
Vicky
|
255bcbf02b
|
feat: 07 创作者中心批 2(内容编辑 / 分集 / 提交审核)
为什么:批 1 只给了创作者"看"的能力(工作台、审核进度、通知),内容还是得后台代建。
批 2 补上"改":创作者自己建草稿、编分集、提交审核,后台只管审。落地过程中发现三个必须一起修的问题:
1. 【会卡死创作者】后台驳回提交时不动短剧状态,剧会永远停在 reviewing,
而批 2 里 reviewing 是只读 —— 创作者既改不了也提不了。现在驳回与撤回都会把剧退回 draft。
2. 【上线了却放不出来】C 端只播 status=published 的分集,但没有任何地方在剧上线时把分集带上线。
审核通过 PUBLISH 时,仍处于草稿的分集一并上线。
3. 【编辑会误删字段】底层 apply() 对 null 会写空串/默认值:只想改封面的一次调用会把标题、时长、
排序一起清掉(自测时两集排序都变成 1 才发现)。creator 侧改成"未传字段沿用现值"。
- 新增 CreatorContentService + /admin/creator-center 的 10 个写接口与 2 个读接口,
一律不接收 creatorId,归属走 requireMyDrama,改别人的作品/分集统一 403
- 状态闸:只有 draft / offline 可直接编辑;reviewing / approved / published 只读并给出下一步动作
- 提交矩阵:draft→CREATE(首次)/UPDATE/PUBLISH,offline→UPDATE/PUBLISH,reviewing/approved→PUBLISH,published→OFFLINE;
同剧同时只允许一条在审提交;撤回后作品退回草稿,支持撤回重提
- 权限点 creator-center:drama:edit(创作者角色 + 超管),docs/api-phase1.md 2.10 补批 2 接口与规则表
- 分集收费与试看秒数本批不碰(批 3 的收费配置页负责),新增分集默认免费,避免误定价
|
2026-10-15 13:58:45 +08:00 |
|
Vicky
|
ea875c3e2b
|
feat: 07 创作者中心批 1(账号绑定 + 我的作品 / 审核进度 / 通知)
为什么:创作者要在 Web 端(做进后台管理)看到自己的作品与审核进度,但 creator 模块
此前只有「后台审核视角」的服务,创作者本人没有任何入口;更要紧的是,全项目没有任何
地方把「后台账号」和「创作者主体」关联起来 —— 缺这层映射,横向越权就只能靠每个接口
自觉加 where 过滤,迟早会漏。所以批 1 先把归属判定的地基打好,再给工作台接口。
- creator 增加 admin_user_id(幂等 ALTER + 部分唯一索引,0 = 未绑定,多条 0 不冲突)
- 新增角色 creator 与权限点 creator-center:view(创作者角色 + 超管各授权一条),菜单等页面做好再挂
- 新增 CreatorCenterService:requireCurrentCreator() 是归属判定的唯一入口,requireMyDrama() 供后续批次复用
- 新增 /admin/creator-center 四个接口(profile / dramas/page / dramas/{id} / notices),
一律不接收 creatorId,查询强制 where creator_id = 当前创作者,访问他人作品统一 403
- 通知不新建表:由入驻审核结果 + 内容提交审核结果派生(ops_notice 无产出方,等有公告功能再接)
- 顺手接通 drama.trailer_url:DDL 与实体早就有,但保存 VO / 响应 VO 都没带,预告片存不进也读不出
- ContentSubmissionService 补 typeText + TYPE_* 常量(通知文案与批 2 的提交都要用)
|
2026-10-15 13:45:32 +08:00 |
|
Vicky
|
1fb8427f28
|
feat: 08 创作者与内容审核落地(入驻审核 / 内容提交审核 / 定时发布 / 分集定价)
为什么:
1) 内容是创作者供的,必须有一条可管控的供给链路:创作者入驻要审、内容提交要审、
审核通过才能真正上架 —— 否则平台无法对内容和主体负责。
2) 审核不能绕过状态机。内容提交审核通过后,是顺着短剧状态机
SUBMIT → APPROVE → PUBLISH 推上去,而不是直接写 status 字段,
这样审核记录与操作日志都不会缺环。
3) 定时发布(publish_at 到点自动上线)同样走状态机,并且做成幂等任务:
重复执行不会把已上线的剧再推一次。
4) 定价落在 is_free / unlock_coin 上,与权益表解耦:改价立即影响播放与下载判定,
但已购用户的权益不受影响,不会因为改价把用户买过的东西收回去。
5) 补齐 PM 草稿未做的部分:5 个权限点 + 3 条后台菜单(含前端组件路径)+ 超管授权(幂等),
以及后台定价页需要的价格读取接口 GET /admin/prices。
|
2026-10-15 12:51:40 +08:00 |
|
Vicky
|
af1dc48494
|
feat: 06 互动与内容治理落地(评论 / 点赞 / 举报 / 敏感词 / 审核留证)
为什么:
1) 产品侧要先把内容治理闭环跑通才能谈上线:评论可发布、可翻页、可删除,
违规内容能在后台被审核与驳回,举报要有工单可追溯。本提交把这套补齐。
2) 审核不能只靠人肉:敏感词按 BLOCK/REPLACE/REVIEW 三档处置,
机审通过即发布(可配置为 PRE_REVIEW 全部先审后发),人审与机审的结论
都写进 content_audit_record,争议时可回答"当时凭什么放行/驳回"。
3) 举报处理必须与处置打通:结论成立会联动驳回被举报评论,并可选同时封禁被举报用户,
避免"工单处理完了但违规内容还挂着"。
4) 顺带修复一个真实缺陷:user_favorite / content_like 上有唯一索引,而全局配置会把
deleteById 改写成逻辑删除,导致取消收藏/点赞后旧的 deleted 行仍占位,
再次收藏或点赞直接撞唯一索引报错。关系类数据没有留证价值,改为显式物理删除,
并补了"取消后再来一次"的回归自测。
|
2026-10-15 12:03:32 +08:00 |
|
Vicky
|
b3179fc836
|
refactor: 后端标识统一为 FruitShorts,并落地 05 离线下载
为什么:
1) 产品已定名 FruitShorts,但后端仍是 reelshort 系列标识 —— Java 包 com.reelshort、
模块名与 jar 名 reelshort-*、spring.application.name、配置前缀 reelshort.*,
这些会出现在启动日志、命令行和 IDE 里,与产品名不一致。本次整体替换为 fruitshorts,
数据库连接名上一轮已改名,保持不变。
2) 第一阶段下一批第 1 步(05 离线下载)要求把下载授权(设备绑定/有效期/吊销)、
下载任务与断点续传、配额与过期清理、仅 Wi-Fi 规则做成完整接口,本提交一并落地。
3) 顺带修复:schema-phase1.sql 里 playback_ticket / order_event 仍按普通表定义唯一索引,
表分区化之后重跑脚本必定报错(分区表的唯一索引必须包含分区键)。改为在本脚本里就
按分区表定义,并验证脚本可重复执行。
|
2026-10-15 11:44:26 +08:00 |
|