仓库源文站点原文


title: Portable OJ 二期工程技术方案 date: 2022-02-17 20:38:29 math: true mermaid: true

hide: true

新增权限

权限 名称 功能
VIEW_ALL_CONTEST 查看所有比赛 能够无视约束查看所有比赛,但是不可以提交
CREATE_AND_EDIT_CONTEST 创建和更新比赛内容权利 能够创建和编辑自己的比赛,此权限不影响合作者编辑题目
EDIT_NOT_OWNER_CONTEST 更新其他人拥有的比赛内容权利 能够创建和编辑别人的比赛,此权限不影响合作者编辑题目

新增模块

比赛模块

比赛属性

访问权限 名称 描述
PUBLIC 公开的 允许任何人进入查看此比赛并进行
PASSWORD 需要密码的 在输入密码后授权允许在当前浏览器上进入
PRIVATE 邀请制的 仅允许指定的部分用户参加
访问权限 普通用户 有密码或者在邀请列表内的 出题人/合作者 VAC 的 ENOC 的
PUBLIC 可以查看/提交 可以查看/提交 可以查看/提交/编辑 可以查看/提交 可以查看/提交/编辑
PASSWORD 可以查看/提交 可以查看/提交/编辑 可以查看/提交 可以查看/提交/编辑
PRIVATE 可以查看/提交 可以查看/编辑 可以查看 可以查看/编辑

比赛功能

更新模块

问题模块

新增属性

更新逻辑

新增功能

提交模块

新增枚举

SolutionType 下新增 TEST_CONTEST 属性,表示比赛拥有者/共同出题人在比赛中的提交

存储变更

比赛模块

MySQL

create table contest
(
    id          bigint auto_increment comment '比赛 id',
    data_id     varchar(32)  null comment '比赛数据 id',
    owner       bigint       null comment '比赛拥有者',
    title       varchar(255) null comment '比赛标题',
    start_time  datetime     null comment '比赛开始时间',
    duration    int          null comment '比赛持续时间(分钟)',
    access_type varchar(64)  null comment '比赛的访问权限类型',
    primary key (`id`),
    UNIQUE KEY uk_title(`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mp4 COLLATION=utf8mb4_general_ci COMMENT '比赛信息';

Mongo

public abstract class BasicContestData {

    /**
     * 题目列表
     */
    private List<Long> problemList;

    /**
     * 允许此类访问权限的题目
     */
    private Set<ProblemAccessType> problemAccessTypeList;

    /**
     * 共同的出题人
     */
    private Set<Long> coAuthor;

    /**
     * 封榜时长
     */
    private Long freezeTime;

    /**
     * 公告
     */
    private String announcement;
}