允许上传后的谱面编辑 Metadata
动机
目前上传谱面后,如果发现谱面的元信息(Metadata)存在错误,或者只希望调整 Metadata 而不修改实际谱面内容,必须删除原谱面并重新上传。
这种方式会带来一些问题:
- 会导致谱面关联数据丢失,例如:
- 原因是目前这些数据依赖
maidata.txt 的 hash 作为谱面的唯一标识。
- 即使谱面内容完全没有变化,仅修改 Metadata 也会被认为是一个新的谱面。
因此,需要支持在不重新上传谱面的情况下修改 Metadata,同时保持原有数据关联。
方案
在 Net 的谱面详情页面增加「编辑」功能,允许用户修改谱面的 Metadata。
编辑后的 Metadata 不直接修改原始谱面文件中的 maidata.txt,而是存储在数据库中作为 override 数据。
例如:
Original maidata.txt
|
| hash 保持不变
|
Database metadata override
|
v
最终展示/使用的 metadata
通过 Metadata Override 机制,使 Net 和 Play 在读取谱面信息时:
- 优先使用数据库中的 override metadata。
- 如果不存在 override,则使用谱面原始
maidata.txt 中的 metadata。
这样可以:
- 保持谱面 hash 不变。
- 保留排行榜、评论等历史数据。
- 允许修正上传错误的 Metadata。
支持编辑的字段
- 标题
- 曲师
- 谱师
- 难度
- 音频预览
- 其他不影响谱面内容的 metadata
影响范围
需要修改:
Net
- 谱面管理页面增加编辑入口。
- 增加 Metadata 编辑界面。
- 保存 override 数据到数据库。
- API 返回谱面信息时合并 override。
Play
- 加载谱面 Metadata 时支持 override。
- 保证 override 数据不会影响谱面校验和 hash。
预期效果
用户可以在上传谱面后修正 Metadata 错误,而无需重新上传谱面。
同时:
- 保留排行榜数据。
- 保留评论数据。
- 保持谱面 ID/hash 稳定。
允许上传后的谱面编辑 Metadata
动机
目前上传谱面后,如果发现谱面的元信息(Metadata)存在错误,或者只希望调整 Metadata 而不修改实际谱面内容,必须删除原谱面并重新上传。
这种方式会带来一些问题:
maidata.txt的 hash 作为谱面的唯一标识。因此,需要支持在不重新上传谱面的情况下修改 Metadata,同时保持原有数据关联。
方案
在 Net 的谱面详情页面增加「编辑」功能,允许用户修改谱面的 Metadata。
编辑后的 Metadata 不直接修改原始谱面文件中的
maidata.txt,而是存储在数据库中作为 override 数据。例如:
通过 Metadata Override 机制,使 Net 和 Play 在读取谱面信息时:
maidata.txt中的 metadata。这样可以:
支持编辑的字段
影响范围
需要修改:
Net
Play
预期效果
用户可以在上传谱面后修正 Metadata 错误,而无需重新上传谱面。
同时: