Skip to content

允许上传后的谱面编辑 Metadata #24

Description

@anqtal

允许上传后的谱面编辑 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 在读取谱面信息时:

  1. 优先使用数据库中的 override metadata。
  2. 如果不存在 override,则使用谱面原始 maidata.txt 中的 metadata。

这样可以:

  • 保持谱面 hash 不变。
  • 保留排行榜、评论等历史数据。
  • 允许修正上传错误的 Metadata。

支持编辑的字段

  • 标题
  • 曲师
  • 谱师
  • 难度
  • 音频预览
  • 其他不影响谱面内容的 metadata

影响范围

需要修改:

Net

  • 谱面管理页面增加编辑入口。
  • 增加 Metadata 编辑界面。
  • 保存 override 数据到数据库。
  • API 返回谱面信息时合并 override。

Play

  • 加载谱面 Metadata 时支持 override。
  • 保证 override 数据不会影响谱面校验和 hash。

预期效果

用户可以在上传谱面后修正 Metadata 错误,而无需重新上传谱面。

同时:

  • 保留排行榜数据。
  • 保留评论数据。
  • 保持谱面 ID/hash 稳定。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions