Files

3.7 KiB

我正在编写一个名为Ballance Atlas的项目,根据后文中的需求,给出给定问题的解决方案。

概述

问题

  • Agent 1:使用RESTful设计前端和后端用于通信的接口。你不需要知道前端和后端由何种语言编写,你不被允许编写任何代码,你只能设计接口。
  • Agent 2:假定后端使用PostgreSQL作为数据库,请设计数据库的结构(DDL),并给出可能会用到的查询语句(DML)。在设计时需要考虑如下因素:
    • 如果有能通过PostgreSQL的SQL语句完成,且不会造成大量延迟的功能,例如验证字段存在,确保两个table之间字段的相互引用正确等。可以直接通过编写SQL语句完成,不要将其交付给后端手动完成。

需求

账号系统

  • 一个标准的账号需要有以下组成部分:
    • UID:一个仅由ASCII数字,字母,下划线和dash组成的唯一标识符,用于锚定用户。注册时一旦确认,不可修改。
    • nickname:用户自定义的名称,不可重复,但用户可修改。
    • 密码:密码是必需的,且允许用户更换。
    • 邮箱:用户接收Atlas发送的邮件,例如重置密码邮件的邮箱。
  • 账户登录时,请遵循标准的账户登录保护原则,例如加盐等。
  • 支持OAuth2协议,允许用户使用本系统的账号系统登录其他网站。
  • 用户忘记密码时,遵循常见的忘记密码更换方法(使用IMAP等协议向用户发送邮件)。
  • 允许封禁用户,被封禁的用户无权登录和进行任何操作。
  • 每一个账号可具有一个或多个权限组,权限组未来是可扩展的(指可以从代码层面轻易扩展,而不是允许用户自行添加新权限)。目前有以下权限组:
    • 根:对系统所有方面拥有完全操作权限(相当于组合其他所有权限)。
    • 管理员:可以对用户进行任何操作,例如重置昵称,重置密码,强制设定邮箱,设定用户组等。
    • 记录榜维护员:负责审查记录榜,可以强制删除有问题的记录,也可以录入从外部导入的记录。
    • 地图维护员:可以无限制地上传地图。负责设定地图的上架状态,强制设置地图属性等操作。
    • 比赛举办者:允许创建比赛,登记比赛记录。
    • bmmo服主:允许bmmo以该人身份登录系统,并更新mp状态。

地图系统

  • 一张地图应当包含以下数据:

    • 地图名称:以原始语言显示的地图名称
    • 地图英语名称:该地图名称的英语翻译
    • 一张雷达图,包含难度,有趣度,可重复游玩性,美观度等。雷达图的维度在未来应当可在代码中轻易扩展。雷达图的数据来源于用户投票。每个用户只能投票一次,投票完成后可以修改自己的投票内容。
    • 红黑榜:用户可以给当前地图投票红黑票。红票表示支持,黑票表示不支持。用户只能投一票,投票后可修改。最终结果以类似steam的好评如潮,差评如潮等结果展示在界面上。
    • 一个状态,用于表示当前地图的状态。类似于osu的地图的机制。参加:https://osu.ppy.sh/wiki/zh/Beatmap/Category
  • 所有玩家天生就可以上传地图。

  • 上传地图的速率限制在每天一张。对于地图的版本更新限制在一小时一次。

  • 地图大小不得超过32MB(未来该数字可通过修改代码轻易修改)

排行榜系统

  • 所有ranked的地图都有排行榜
  • 排行榜要有sr时间和hs分数(非零整数)

比赛系统

  • 每场比赛结束后,按照上传的排名数据,使用elu算法,重新计算人员的名次。