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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions