Files
OJ2/apps/api/src/db/meta/0006_snapshot.json
T
xuyueandClaude Opus 5 cf1eea0810
Deploy / deploy (push) Has been cancelled
fix(比赛): 学生管理员开卷、导出只剩十行、排行榜翻页错位等四处
## 学生管理员在比赛进行中能看所有人的代码

canViewSubmission 里 isAdminRole(user) 是无条件放行的捷径,而 ADMIN_ROLES 含
Student Admin —— 同时 contest.ts 的排行榜又把这个角色算作参赛者。既在榜上、
又能读别人的提交,就是开卷。比赛未结束(未开始 + 进行中)时不再吃这条捷径。

旧后端这里写的是 `not user.is_regular_user()`,学生管理员同样放行,所以这条是
相对旧栈**收紧**的一处,不是修回归。只掐角色捷径,不掐 problem.createdById ——
那是这道题的作者本人,他早就知道答案,挡他没有意义。老师和超管不受影响,他们不参赛。

实跑(造了一场进行中、一场已结束的比赛,各一条别人的提交):学生管理员在进行中的
比赛里列表 showLink=false、详情 404,比赛结束后恢复 200;超管两种状态都是 200;
学生管理员读**自己**比赛中的提交仍然 200,没有把他自己的记录一起挡掉。

同族的 flowchart.ts canView 有同样的角色捷径,但流程图提交入库时从不写 contest_id
(永远是 null),那条路上不存在「比赛中的别人的提交」,不用跟着改。

## 获奖名单导出,参赛超过 250 人时只导出十个人

rank.vue 用 `limit: total.value || 10000` 想一次拉全量,但 queryInteger 对超出
上限的值是**静默回落到默认的 10**,不是截断到 250。于是 300 人的比赛导出 10 行,
而一二三等奖的分档仍按真实总人数算 —— 老师拿到一份十个人、等级全错的名单,还不报错。
改成按 250 一页循环拉,两个出口都留:拿不满一页说明到底了,比对 total 是防着最后
一页正好整除。班级赛(≤250)碰不到这个坑,全校赛会。

实跑:造 20 条排名,limit=300 后端确实只返回 10 行,limit=250 返回 20,
新逻辑拉回 20。

## 排行榜翻页没有全序

只按 acceptedNumber desc, totalTime asc 排,同分同罚时行序不稳定,而这条列表是
limit/offset 翻页的 —— 同一个人可能在第 2 页出现两次,另一个人从此消失。末尾补
asc(id) 兜全序,id 不参与名次,只保证同分的人每次按同一顺序排。

实跑:20 个同 AC 数同罚时的选手,每页 5 条翻 4 页,共 20 行去重后仍是 20 人,
连翻两轮顺序完全一致。

## acm-helper 两个接口对 visible 的口径不一致

GET 要求 visible = true,PUT 不要求。比赛结束后收起来,核查页就打不开了,
而标记接口还能用。赛后核查恰恰常发生在比赛已经收起来之后,按 PUT 的口径放开。

## 删掉 contest_announcement

旧 Django 栈有「比赛公告」,OJ2 从头到尾没搬:没有路由、没有契约、没有前端页面,
表建在那里纯粹是 introspect 0000 时一起拉进来的。确认不需要,连表带 schema 定义
一起删。

删除前核实:没有任何表外键指向它,序列由本表 owned 会随 DROP TABLE 一并消失,
生产快照(db_backup_2026_08_07)里只有 1 行 —— 2022 年 4 月挂在 contest 1 上的
一条测试公告。迁移不写 CASCADE,同 0002:真有别的东西引用了,宁可报错也别被悄悄
级联掉。

**上生产要显式放行**:migrate.ts 的破坏性闸会拦下 DROP TABLE,得
`OJ2_ALLOW_DESTRUCTIVE=1 docker/deploy.sh`,并按它说的先备份。本机已实跑:
不带环境变量确实被拦,带上之后表和序列都没了,重跑是「没有待执行的迁移」,
db:generate 报 No schema changes(snapshot 与 schema.ts 对齐,不给下一条迁移留假 diff)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013rpSKCNpVcMhTFhw21YiL7
2026-09-02 20:38:04 -06:00

3932 lines
103 KiB
JSON

{
"id": "e53192e9-03ab-4a61-97fe-7826ef93594b",
"prevId": "ad4c5b81-4294-42aa-98b8-5fe633df2f05",
"version": "7",
"dialect": "postgresql",
"tables": {
"public.achievement": {
"name": "achievement",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "achievement_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"icon": {
"name": "icon",
"type": "text",
"primaryKey": false,
"notNull": true
},
"rarity": {
"name": "rarity",
"type": "text",
"primaryKey": false,
"notNull": true
},
"hidden": {
"name": "hidden",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"metric": {
"name": "metric",
"type": "text",
"primaryKey": false,
"notNull": true
},
"operator": {
"name": "operator",
"type": "text",
"primaryKey": false,
"notNull": true
},
"threshold": {
"name": "threshold",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"visible": {
"name": "visible",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"unlock_count": {
"name": "unlock_count",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"order": {
"name": "order",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.acm_contest_rank": {
"name": "acm_contest_rank",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"submission_number": {
"name": "submission_number",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"accepted_number": {
"name": "accepted_number",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"total_time": {
"name": "total_time",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"submission_info": {
"name": "submission_info",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"contest_id": {
"name": "contest_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"acm_contest_rank_contest_id_21030ccd": {
"name": "acm_contest_rank_contest_id_21030ccd",
"columns": [
{
"expression": "contest_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"acm_contest_rank_user_id_40391ab2": {
"name": "acm_contest_rank_user_id_40391ab2",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"acm_rank_contest_user_idx": {
"name": "acm_rank_contest_user_idx",
"columns": [
{
"expression": "contest_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"acm_rank_order_idx": {
"name": "acm_rank_order_idx",
"columns": [
{
"expression": "contest_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "accepted_number",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "total_time",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"acm_contest_rank_contest_id_21030ccd_fk_contest_id": {
"name": "acm_contest_rank_contest_id_21030ccd_fk_contest_id",
"tableFrom": "acm_contest_rank",
"tableTo": "contest",
"columnsFrom": [
"contest_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"acm_contest_rank_user_id_40391ab2_fk_user_id": {
"name": "acm_contest_rank_user_id_40391ab2_fk_user_id",
"tableFrom": "acm_contest_rank",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"unique_acm_rank_user_contest": {
"name": "unique_acm_rank_user_contest",
"nullsNotDistinct": false,
"columns": [
"contest_id",
"user_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.ai_analysis": {
"name": "ai_analysis",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "ai_analysis_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"provider": {
"name": "provider",
"type": "text",
"primaryKey": false,
"notNull": true
},
"data": {
"name": "data",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"system_prompt": {
"name": "system_prompt",
"type": "text",
"primaryKey": false,
"notNull": true
},
"user_prompt": {
"name": "user_prompt",
"type": "text",
"primaryKey": false,
"notNull": true
},
"analysis": {
"name": "analysis",
"type": "text",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"model": {
"name": "model",
"type": "text",
"primaryKey": false,
"notNull": true
},
"is_pinned": {
"name": "is_pinned",
"type": "boolean",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"ai_analysis_user_id_3aa23011": {
"name": "ai_analysis_user_id_3aa23011",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"ai_analysis_user_id_3aa23011_fk_user_id": {
"name": "ai_analysis_user_id_3aa23011_fk_user_id",
"tableFrom": "ai_analysis",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.announcement": {
"name": "announcement",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"last_update_time": {
"name": "last_update_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"visible": {
"name": "visible",
"type": "boolean",
"primaryKey": false,
"notNull": true
},
"created_by_id": {
"name": "created_by_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"tag": {
"name": "tag",
"type": "text",
"primaryKey": false,
"notNull": true
},
"top": {
"name": "top",
"type": "boolean",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"announcement_created_by_id_359ccf50": {
"name": "announcement_created_by_id_359ccf50",
"columns": [
{
"expression": "created_by_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"announcement_list_idx": {
"name": "announcement_list_idx",
"columns": [
{
"expression": "visible",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "top",
"isExpression": false,
"asc": false,
"nulls": "first"
},
{
"expression": "create_time",
"isExpression": false,
"asc": false,
"nulls": "first"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"announcement_created_by_id_359ccf50_fk_user_id": {
"name": "announcement_created_by_id_359ccf50_fk_user_id",
"tableFrom": "announcement",
"tableTo": "user",
"columnsFrom": [
"created_by_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.contest": {
"name": "contest",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"password": {
"name": "password",
"type": "text",
"primaryKey": false,
"notNull": false
},
"start_time": {
"name": "start_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"end_time": {
"name": "end_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"last_update_time": {
"name": "last_update_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"visible": {
"name": "visible",
"type": "boolean",
"primaryKey": false,
"notNull": true
},
"created_by_id": {
"name": "created_by_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"allowed_ip_ranges": {
"name": "allowed_ip_ranges",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"tag": {
"name": "tag",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"contest_created_by_id_a763ca7e": {
"name": "contest_created_by_id_a763ca7e",
"columns": [
{
"expression": "created_by_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"contest_created_by_id_a763ca7e_fk_user_id": {
"name": "contest_created_by_id_a763ca7e_fk_user_id",
"tableFrom": "contest",
"tableTo": "user",
"columnsFrom": [
"created_by_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.exercise": {
"name": "exercise",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "exercise_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "2147483647",
"cache": "1",
"cycle": false
}
},
"type": {
"name": "type",
"type": "varchar(16)",
"primaryKey": false,
"notNull": true
},
"data": {
"name": "data",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"order": {
"name": "order",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"tutorial_id": {
"name": "tutorial_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"exercise_tutorial_id_6fd04055": {
"name": "exercise_tutorial_id_6fd04055",
"columns": [
{
"expression": "tutorial_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"exercise_tutorial_id_6fd04055_fk_tutorial_id": {
"name": "exercise_tutorial_id_6fd04055_fk_tutorial_id",
"tableFrom": "exercise",
"tableTo": "tutorial",
"columnsFrom": [
"tutorial_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.exercise_attempt": {
"name": "exercise_attempt",
"schema": "",
"columns": {
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"exercise_id": {
"name": "exercise_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"attempts": {
"name": "attempts",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"wrong_attempts": {
"name": "wrong_attempts",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"solved": {
"name": "solved",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"attempts_to_solve": {
"name": "attempts_to_solve",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"last_wrong_answer": {
"name": "last_wrong_answer",
"type": "text",
"primaryKey": false,
"notNull": false
},
"first_attempt_at": {
"name": "first_attempt_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"last_attempt_at": {
"name": "last_attempt_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"solved_at": {
"name": "solved_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"exercise_attempt_exercise_id_idx": {
"name": "exercise_attempt_exercise_id_idx",
"columns": [
{
"expression": "exercise_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"exercise_attempt_user_id_fk_user_id": {
"name": "exercise_attempt_user_id_fk_user_id",
"tableFrom": "exercise_attempt",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"exercise_attempt_exercise_id_fk_exercise_id": {
"name": "exercise_attempt_exercise_id_fk_exercise_id",
"tableFrom": "exercise_attempt",
"tableTo": "exercise",
"columnsFrom": [
"exercise_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"exercise_attempt_pkey": {
"name": "exercise_attempt_pkey",
"columns": [
"user_id",
"exercise_id"
]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.flowchart_submission": {
"name": "flowchart_submission",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"mermaid_code": {
"name": "mermaid_code",
"type": "text",
"primaryKey": false,
"notNull": true
},
"flowchart_data": {
"name": "flowchart_data",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"ai_score": {
"name": "ai_score",
"type": "double precision",
"primaryKey": false,
"notNull": false
},
"ai_grade": {
"name": "ai_grade",
"type": "varchar(10)",
"primaryKey": false,
"notNull": false
},
"ai_feedback": {
"name": "ai_feedback",
"type": "text",
"primaryKey": false,
"notNull": false
},
"ai_suggestions": {
"name": "ai_suggestions",
"type": "text",
"primaryKey": false,
"notNull": false
},
"ai_criteria_details": {
"name": "ai_criteria_details",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"ai_provider": {
"name": "ai_provider",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true
},
"ai_model": {
"name": "ai_model",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true
},
"processing_time": {
"name": "processing_time",
"type": "double precision",
"primaryKey": false,
"notNull": false
},
"evaluation_time": {
"name": "evaluation_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"problem_id": {
"name": "problem_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"flowchart_problem_time_idx": {
"name": "flowchart_problem_time_idx",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "create_time",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"flowchart_status_idx": {
"name": "flowchart_status_idx",
"columns": [
{
"expression": "status",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"flowchart_submission_id_0dbfc4f9_like": {
"name": "flowchart_submission_id_0dbfc4f9_like",
"columns": [
{
"expression": "id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "text_pattern_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"flowchart_submission_problem_id_8551edbf": {
"name": "flowchart_submission_problem_id_8551edbf",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"flowchart_submission_user_id_225c83e8": {
"name": "flowchart_submission_user_id_225c83e8",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"flowchart_user_time_idx": {
"name": "flowchart_user_time_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "create_time",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"flowchart_submission_problem_id_8551edbf_fk_problem_id": {
"name": "flowchart_submission_problem_id_8551edbf_fk_problem_id",
"tableFrom": "flowchart_submission",
"tableTo": "problem",
"columnsFrom": [
"problem_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"flowchart_submission_user_id_225c83e8_fk_user_id": {
"name": "flowchart_submission_user_id_225c83e8_fk_user_id",
"tableFrom": "flowchart_submission",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.judge_server": {
"name": "judge_server",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"hostname": {
"name": "hostname",
"type": "text",
"primaryKey": false,
"notNull": true
},
"ip": {
"name": "ip",
"type": "text",
"primaryKey": false,
"notNull": false
},
"judger_version": {
"name": "judger_version",
"type": "text",
"primaryKey": false,
"notNull": true
},
"cpu_core": {
"name": "cpu_core",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"memory_usage": {
"name": "memory_usage",
"type": "double precision",
"primaryKey": false,
"notNull": true
},
"cpu_usage": {
"name": "cpu_usage",
"type": "double precision",
"primaryKey": false,
"notNull": true
},
"last_heartbeat": {
"name": "last_heartbeat",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"task_number": {
"name": "task_number",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"service_url": {
"name": "service_url",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_disabled": {
"name": "is_disabled",
"type": "boolean",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.message": {
"name": "message",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "message_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "2147483647",
"cache": "1",
"cycle": false
}
},
"message": {
"name": "message",
"type": "text",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"recipient_id": {
"name": "recipient_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"sender_id": {
"name": "sender_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"submission_id": {
"name": "submission_id",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"message_recipient_id_2aa5dd76": {
"name": "message_recipient_id_2aa5dd76",
"columns": [
{
"expression": "recipient_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"message_recipient_time_idx": {
"name": "message_recipient_time_idx",
"columns": [
{
"expression": "recipient_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "timestamptz_ops"
},
{
"expression": "create_time",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"message_sender_id_a2a2e825": {
"name": "message_sender_id_a2a2e825",
"columns": [
{
"expression": "sender_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"message_submission_id_2fdf8a47": {
"name": "message_submission_id_2fdf8a47",
"columns": [
{
"expression": "submission_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "text_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"message_submission_id_2fdf8a47_like": {
"name": "message_submission_id_2fdf8a47_like",
"columns": [
{
"expression": "submission_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "text_pattern_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"message_recipient_id_2aa5dd76_fk_user_id": {
"name": "message_recipient_id_2aa5dd76_fk_user_id",
"tableFrom": "message",
"tableTo": "user",
"columnsFrom": [
"recipient_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"message_sender_id_a2a2e825_fk_user_id": {
"name": "message_sender_id_a2a2e825_fk_user_id",
"tableFrom": "message",
"tableTo": "user",
"columnsFrom": [
"sender_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"message_submission_id_2fdf8a47_fk_submission_id": {
"name": "message_submission_id_2fdf8a47_fk_submission_id",
"tableFrom": "message",
"tableTo": "submission",
"columnsFrom": [
"submission_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.options_sysoptions": {
"name": "options_sysoptions",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"key": {
"name": "key",
"type": "text",
"primaryKey": false,
"notNull": true
},
"value": {
"name": "value",
"type": "jsonb",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"options_sysoptions_key_key": {
"name": "options_sysoptions_key_key",
"nullsNotDistinct": false,
"columns": [
"key"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.problem": {
"name": "problem",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"input_description": {
"name": "input_description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"output_description": {
"name": "output_description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"samples": {
"name": "samples",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"test_case_id": {
"name": "test_case_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"test_case_score": {
"name": "test_case_score",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"hint": {
"name": "hint",
"type": "text",
"primaryKey": false,
"notNull": false
},
"languages": {
"name": "languages",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"template": {
"name": "template",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"last_update_time": {
"name": "last_update_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"time_limit": {
"name": "time_limit",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"memory_limit": {
"name": "memory_limit",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"visible": {
"name": "visible",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": true
},
"difficulty": {
"name": "difficulty",
"type": "text",
"primaryKey": false,
"notNull": true
},
"source": {
"name": "source",
"type": "text",
"primaryKey": false,
"notNull": false
},
"submission_number": {
"name": "submission_number",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 0
},
"accepted_number": {
"name": "accepted_number",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 0
},
"created_by_id": {
"name": "created_by_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"_id": {
"name": "_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"statistic_info": {
"name": "statistic_info",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"contest_id": {
"name": "contest_id",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"is_public": {
"name": "is_public",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"share_submission": {
"name": "share_submission",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"prompt": {
"name": "prompt",
"type": "text",
"primaryKey": false,
"notNull": false
},
"answers": {
"name": "answers",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"allow_flowchart": {
"name": "allow_flowchart",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"flowchart_data": {
"name": "flowchart_data",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"flowchart_hint": {
"name": "flowchart_hint",
"type": "text",
"primaryKey": false,
"notNull": false
},
"mermaid_code": {
"name": "mermaid_code",
"type": "text",
"primaryKey": false,
"notNull": false
},
"show_flowchart": {
"name": "show_flowchart",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"ast_rules": {
"name": "ast_rules",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"sql_config": {
"name": "sql_config",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"sql_display": {
"name": "sql_display",
"type": "jsonb",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"problem__id_919b1d80": {
"name": "problem__id_919b1d80",
"columns": [
{
"expression": "_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "text_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problem_contest_id_328e013a": {
"name": "problem_contest_id_328e013a",
"columns": [
{
"expression": "contest_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problem_contest_visible_idx": {
"name": "problem_contest_visible_idx",
"columns": [
{
"expression": "contest_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "bool_ops"
},
{
"expression": "visible",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problem_created_by_id_cb362143": {
"name": "problem_created_by_id_cb362143",
"columns": [
{
"expression": "created_by_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problem_visible_idx": {
"name": "problem_visible_idx",
"columns": [
{
"expression": "visible",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "bool_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"problem_contest_id_328e013a_fk_contest_id": {
"name": "problem_contest_id_328e013a_fk_contest_id",
"tableFrom": "problem",
"tableTo": "contest",
"columnsFrom": [
"contest_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"problem_created_by_id_cb362143_fk_user_id": {
"name": "problem_created_by_id_cb362143_fk_user_id",
"tableFrom": "problem",
"tableTo": "user",
"columnsFrom": [
"created_by_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"unique_problem_id_contest": {
"name": "unique_problem_id_contest",
"nullsNotDistinct": false,
"columns": [
"_id",
"contest_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.problem_tag": {
"name": "problem_tag",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"problem_tag_name_ci_unique": {
"name": "problem_tag_name_ci_unique",
"columns": [
{
"expression": "lower(name)",
"asc": true,
"isExpression": true,
"nulls": "last"
}
],
"isUnique": true,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.problem_tags": {
"name": "problem_tags",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"problem_id": {
"name": "problem_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"problemtag_id": {
"name": "problemtag_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"problem_tags_problem_id_866ecb8d": {
"name": "problem_tags_problem_id_866ecb8d",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problem_tags_problemtag_id_72d20571": {
"name": "problem_tags_problemtag_id_72d20571",
"columns": [
{
"expression": "problemtag_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"problem_tags_problem_id_866ecb8d_fk_problem_id": {
"name": "problem_tags_problem_id_866ecb8d_fk_problem_id",
"tableFrom": "problem_tags",
"tableTo": "problem",
"columnsFrom": [
"problem_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"problem_tags_problemtag_id_72d20571_fk_problem_tag_id": {
"name": "problem_tags_problemtag_id_72d20571_fk_problem_tag_id",
"tableFrom": "problem_tags",
"tableTo": "problem_tag",
"columnsFrom": [
"problemtag_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"problem_tags_problem_id_problemtag_id_318459d1_uniq": {
"name": "problem_tags_problem_id_problemtag_id_318459d1_uniq",
"nullsNotDistinct": false,
"columns": [
"problem_id",
"problemtag_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.problemset": {
"name": "problemset",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "problemset_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"title": {
"name": "title",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"last_update_time": {
"name": "last_update_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"visible": {
"name": "visible",
"type": "boolean",
"primaryKey": false,
"notNull": true
},
"difficulty": {
"name": "difficulty",
"type": "text",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true
},
"created_by_id": {
"name": "created_by_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"end_time": {
"name": "end_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"problemset_created_by_id_01b5197f": {
"name": "problemset_created_by_id_01b5197f",
"columns": [
{
"expression": "created_by_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"problemset_created_by_id_01b5197f_fk_user_id": {
"name": "problemset_created_by_id_01b5197f_fk_user_id",
"tableFrom": "problemset",
"tableTo": "user",
"columnsFrom": [
"created_by_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.problemset_badge": {
"name": "problemset_badge",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "problemset_badge_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"description": {
"name": "description",
"type": "text",
"primaryKey": false,
"notNull": true
},
"icon": {
"name": "icon",
"type": "text",
"primaryKey": false,
"notNull": true
},
"condition_type": {
"name": "condition_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"condition_value": {
"name": "condition_value",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"problemset_id": {
"name": "problemset_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"problemset_badge_problemset_id_6cb6c74f": {
"name": "problemset_badge_problemset_id_6cb6c74f",
"columns": [
{
"expression": "problemset_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int8_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"problemset_badge_problemset_id_6cb6c74f_fk_problemset_id": {
"name": "problemset_badge_problemset_id_6cb6c74f_fk_problemset_id",
"tableFrom": "problemset_badge",
"tableTo": "problemset",
"columnsFrom": [
"problemset_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.problemset_problem": {
"name": "problemset_problem",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "problemset_problem_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"order": {
"name": "order",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"is_required": {
"name": "is_required",
"type": "boolean",
"primaryKey": false,
"notNull": true
},
"score": {
"name": "score",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"hint": {
"name": "hint",
"type": "text",
"primaryKey": false,
"notNull": false
},
"problem_id": {
"name": "problem_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"problemset_id": {
"name": "problemset_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"problemset_problem_problem_id_fff2d686": {
"name": "problemset_problem_problem_id_fff2d686",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset_problem_problemset_id_350d17fb": {
"name": "problemset_problem_problemset_id_350d17fb",
"columns": [
{
"expression": "problemset_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int8_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"problemset_problem_problem_id_fff2d686_fk_problem_id": {
"name": "problemset_problem_problem_id_fff2d686_fk_problem_id",
"tableFrom": "problemset_problem",
"tableTo": "problem",
"columnsFrom": [
"problem_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"problemset_problem_problemset_id_350d17fb_fk_problemset_id": {
"name": "problemset_problem_problemset_id_350d17fb_fk_problemset_id",
"tableFrom": "problemset_problem",
"tableTo": "problemset",
"columnsFrom": [
"problemset_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"unique_problemset_problem": {
"name": "unique_problemset_problem",
"nullsNotDistinct": false,
"columns": [
"problem_id",
"problemset_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.problemset_progress": {
"name": "problemset_progress",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "problemset_progress_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"join_time": {
"name": "join_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"complete_time": {
"name": "complete_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"is_completed": {
"name": "is_completed",
"type": "boolean",
"primaryKey": false,
"notNull": true
},
"progress_percentage": {
"name": "progress_percentage",
"type": "double precision",
"primaryKey": false,
"notNull": true
},
"completed_problems_count": {
"name": "completed_problems_count",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"total_problems_count": {
"name": "total_problems_count",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"total_score": {
"name": "total_score",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"progress_detail": {
"name": "progress_detail",
"type": "jsonb",
"primaryKey": false,
"notNull": true
},
"problemset_id": {
"name": "problemset_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"problemset_progress_problemset_id_20a9632e": {
"name": "problemset_progress_problemset_id_20a9632e",
"columns": [
{
"expression": "problemset_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int8_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset_progress_user_id_c8041a80": {
"name": "problemset_progress_user_id_c8041a80",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"problemset_progress_problemset_id_20a9632e_fk_problemset_id": {
"name": "problemset_progress_problemset_id_20a9632e_fk_problemset_id",
"tableFrom": "problemset_progress",
"tableTo": "problemset",
"columnsFrom": [
"problemset_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"problemset_progress_user_id_c8041a80_fk_user_id": {
"name": "problemset_progress_user_id_c8041a80_fk_user_id",
"tableFrom": "problemset_progress",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"unique_problemset_progress_user": {
"name": "unique_problemset_progress_user",
"nullsNotDistinct": false,
"columns": [
"problemset_id",
"user_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.problemset_submission": {
"name": "problemset_submission",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "problemset_submission_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"problem_id": {
"name": "problem_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"problemset_id": {
"name": "problemset_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
},
"submission_id": {
"name": "submission_id",
"type": "text",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"problemset__problem_1f39fa_idx": {
"name": "problemset__problem_1f39fa_idx",
"columns": [
{
"expression": "problemset_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset__problem_22f053_idx": {
"name": "problemset__problem_22f053_idx",
"columns": [
{
"expression": "problemset_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int8_ops"
},
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int8_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset__user_id_2f1501_idx": {
"name": "problemset__user_id_2f1501_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset_submission_problem_id_5629b105": {
"name": "problemset_submission_problem_id_5629b105",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset_submission_problemset_id_85290e17": {
"name": "problemset_submission_problemset_id_85290e17",
"columns": [
{
"expression": "problemset_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int8_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset_submission_submission_id_78e2b807": {
"name": "problemset_submission_submission_id_78e2b807",
"columns": [
{
"expression": "submission_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "text_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset_submission_submission_id_78e2b807_like": {
"name": "problemset_submission_submission_id_78e2b807_like",
"columns": [
{
"expression": "submission_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "text_pattern_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"problemset_submission_user_id_915fc9c6": {
"name": "problemset_submission_user_id_915fc9c6",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"problemset_submission_problem_id_5629b105_fk_problem_id": {
"name": "problemset_submission_problem_id_5629b105_fk_problem_id",
"tableFrom": "problemset_submission",
"tableTo": "problem",
"columnsFrom": [
"problem_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"problemset_submission_problemset_id_85290e17_fk_problemset_id": {
"name": "problemset_submission_problemset_id_85290e17_fk_problemset_id",
"tableFrom": "problemset_submission",
"tableTo": "problemset",
"columnsFrom": [
"problemset_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"problemset_submission_submission_id_78e2b807_fk_submission_id": {
"name": "problemset_submission_submission_id_78e2b807_fk_submission_id",
"tableFrom": "problemset_submission",
"tableTo": "submission",
"columnsFrom": [
"submission_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"problemset_submission_user_id_915fc9c6_fk_user_id": {
"name": "problemset_submission_user_id_915fc9c6_fk_user_id",
"tableFrom": "problemset_submission",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.reaction": {
"name": "reaction",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "reaction_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "2147483647",
"cache": "1",
"cycle": false
}
},
"type": {
"name": "type",
"type": "varchar(20)",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"problem_id": {
"name": "problem_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"reaction_problem_id_a7f3b9f3": {
"name": "reaction_problem_id_a7f3b9f3",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"reaction_problem_type_idx": {
"name": "reaction_problem_type_idx",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "type",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"reaction_user_id_cfa7f469": {
"name": "reaction_user_id_cfa7f469",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"reaction_problem_id_a7f3b9f3_fk_problem_id": {
"name": "reaction_problem_id_a7f3b9f3_fk_problem_id",
"tableFrom": "reaction",
"tableTo": "problem",
"columnsFrom": [
"problem_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"reaction_user_id_cfa7f469_fk_user_id": {
"name": "reaction_user_id_cfa7f469_fk_user_id",
"tableFrom": "reaction",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"reaction_problem_user_unique": {
"name": "reaction_problem_user_unique",
"nullsNotDistinct": false,
"columns": [
"problem_id",
"user_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.submission": {
"name": "submission",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true
},
"contest_id": {
"name": "contest_id",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"problem_id": {
"name": "problem_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"code": {
"name": "code",
"type": "text",
"primaryKey": false,
"notNull": true
},
"result": {
"name": "result",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 6
},
"info": {
"name": "info",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"language": {
"name": "language",
"type": "text",
"primaryKey": false,
"notNull": true
},
"shared": {
"name": "shared",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"statistic_info": {
"name": "statistic_info",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"username": {
"name": "username",
"type": "text",
"primaryKey": false,
"notNull": true
},
"ip": {
"name": "ip",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"contest_create_time_idx": {
"name": "contest_create_time_idx",
"columns": [
{
"expression": "contest_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "create_time",
"isExpression": false,
"asc": false,
"nulls": "first"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"submission_public_create_time_id_idx": {
"name": "submission_public_create_time_id_idx",
"columns": [
{
"expression": "create_time",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"where": "\"submission\".\"contest_id\" is null",
"concurrently": false,
"method": "btree",
"with": {}
},
"problem_user_idx": {
"name": "problem_user_idx",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"submission_contest_id_775716d5": {
"name": "submission_contest_id_775716d5",
"columns": [
{
"expression": "contest_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"submission_problem_id_76847b55": {
"name": "submission_problem_id_76847b55",
"columns": [
{
"expression": "problem_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"submission_result_37e2f67a": {
"name": "submission_result_37e2f67a",
"columns": [
{
"expression": "result",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"submission_user_id_3779a8c1": {
"name": "submission_user_id_3779a8c1",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"user_create_time_idx": {
"name": "user_create_time_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "create_time",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "timestamptz_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"submission_contest_id_775716d5_fk_contest_id": {
"name": "submission_contest_id_775716d5_fk_contest_id",
"tableFrom": "submission",
"tableTo": "contest",
"columnsFrom": [
"contest_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"submission_problem_id_76847b55_fk_problem_id": {
"name": "submission_problem_id_76847b55_fk_problem_id",
"tableFrom": "submission",
"tableTo": "problem",
"columnsFrom": [
"problem_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.tutorial": {
"name": "tutorial",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "tutorial_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "2147483647",
"cache": "1",
"cycle": false
}
},
"title": {
"name": "title",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"is_public": {
"name": "is_public",
"type": "boolean",
"primaryKey": false,
"notNull": true
},
"order": {
"name": "order",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"created_by_id": {
"name": "created_by_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"code": {
"name": "code",
"type": "text",
"primaryKey": false,
"notNull": false
},
"type": {
"name": "type",
"type": "varchar(10)",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"tutorial_created_by_id_07973cab": {
"name": "tutorial_created_by_id_07973cab",
"columns": [
{
"expression": "created_by_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"tutorial_created_by_id_07973cab_fk_user_id": {
"name": "tutorial_created_by_id_07973cab_fk_user_id",
"tableFrom": "tutorial",
"tableTo": "user",
"columnsFrom": [
"created_by_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.tutorial_progress": {
"name": "tutorial_progress",
"schema": "",
"columns": {
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"tutorial_id": {
"name": "tutorial_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"view_count": {
"name": "view_count",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"total_seconds": {
"name": "total_seconds",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"first_viewed_at": {
"name": "first_viewed_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"last_viewed_at": {
"name": "last_viewed_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"tutorial_progress_tutorial_id_idx": {
"name": "tutorial_progress_tutorial_id_idx",
"columns": [
{
"expression": "tutorial_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"tutorial_progress_user_id_fk_user_id": {
"name": "tutorial_progress_user_id_fk_user_id",
"tableFrom": "tutorial_progress",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"tutorial_progress_tutorial_id_fk_tutorial_id": {
"name": "tutorial_progress_tutorial_id_fk_tutorial_id",
"tableFrom": "tutorial_progress",
"tableTo": "tutorial",
"columnsFrom": [
"tutorial_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"tutorial_progress_pkey": {
"name": "tutorial_progress_pkey",
"columns": [
"user_id",
"tutorial_id"
]
}
},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user": {
"name": "user",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"password": {
"name": "password",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true
},
"last_login": {
"name": "last_login",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"username": {
"name": "username",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": false
},
"create_time": {
"name": "create_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"admin_type": {
"name": "admin_type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"auth_token": {
"name": "auth_token",
"type": "text",
"primaryKey": false,
"notNull": false
},
"open_api": {
"name": "open_api",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"open_api_appkey": {
"name": "open_api_appkey",
"type": "text",
"primaryKey": false,
"notNull": false
},
"is_disabled": {
"name": "is_disabled",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"problem_permission": {
"name": "problem_permission",
"type": "text",
"primaryKey": false,
"notNull": true
},
"session_keys": {
"name": "session_keys",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'[]'::jsonb"
},
"raw_password": {
"name": "raw_password",
"type": "varchar(20)",
"primaryKey": false,
"notNull": false
},
"class_name": {
"name": "class_name",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"user_username_key": {
"name": "user_username_key",
"nullsNotDistinct": false,
"columns": [
"username"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user_achievement": {
"name": "user_achievement",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "user_achievement_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"unlock_time": {
"name": "unlock_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"backfilled": {
"name": "backfilled",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"notified": {
"name": "notified",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"achievement_id": {
"name": "achievement_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"user_achievement_achievement_id_29db600d": {
"name": "user_achievement_achievement_id_29db600d",
"columns": [
{
"expression": "achievement_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int8_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"user_achievement_user_id_b8ec7d6a": {
"name": "user_achievement_user_id_b8ec7d6a",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"user_achv_notified_idx": {
"name": "user_achv_notified_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "notified",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "bool_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"user_achv_time_idx": {
"name": "user_achv_time_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
},
{
"expression": "unlock_time",
"isExpression": false,
"asc": false,
"nulls": "first",
"opclass": "timestamptz_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"user_achievement_achievement_id_29db600d_fk_achievement_id": {
"name": "user_achievement_achievement_id_29db600d_fk_achievement_id",
"tableFrom": "user_achievement",
"tableTo": "achievement",
"columnsFrom": [
"achievement_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"user_achievement_user_id_b8ec7d6a_fk_user_id": {
"name": "user_achievement_user_id_b8ec7d6a_fk_user_id",
"tableFrom": "user_achievement",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"unique_user_achievement": {
"name": "unique_user_achievement",
"nullsNotDistinct": false,
"columns": [
"achievement_id",
"user_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user_badge": {
"name": "user_badge",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "user_badge_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"earned_time": {
"name": "earned_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"badge_id": {
"name": "badge_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {
"user_badge_badge_id_92a983e9": {
"name": "user_badge_badge_id_92a983e9",
"columns": [
{
"expression": "badge_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int8_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"user_badge_user_id_a286d718": {
"name": "user_badge_user_id_a286d718",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last",
"opclass": "int4_ops"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"user_badge_badge_id_92a983e9_fk_problemset_badge_id": {
"name": "user_badge_badge_id_92a983e9_fk_problemset_badge_id",
"tableFrom": "user_badge",
"tableTo": "problemset_badge",
"columnsFrom": [
"badge_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"user_badge_user_id_a286d718_fk_user_id": {
"name": "user_badge_user_id_a286d718_fk_user_id",
"tableFrom": "user_badge",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"unique_user_badge": {
"name": "unique_user_badge",
"nullsNotDistinct": false,
"columns": [
"badge_id",
"user_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user_profile": {
"name": "user_profile",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "serial",
"primaryKey": true,
"notNull": true
},
"acm_problems_status": {
"name": "acm_problems_status",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"avatar": {
"name": "avatar",
"type": "text",
"primaryKey": false,
"notNull": true
},
"blog": {
"name": "blog",
"type": "varchar(200)",
"primaryKey": false,
"notNull": false
},
"mood": {
"name": "mood",
"type": "text",
"primaryKey": false,
"notNull": false
},
"accepted_number": {
"name": "accepted_number",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"submission_number": {
"name": "submission_number",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"github": {
"name": "github",
"type": "text",
"primaryKey": false,
"notNull": false
},
"school": {
"name": "school",
"type": "text",
"primaryKey": false,
"notNull": false
},
"major": {
"name": "major",
"type": "text",
"primaryKey": false,
"notNull": false
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"real_name": {
"name": "real_name",
"type": "text",
"primaryKey": false,
"notNull": false
},
"language": {
"name": "language",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"indexes": {},
"foreignKeys": {
"user_profile_user_id_8fdce8e2_fk_user_id": {
"name": "user_profile_user_id_8fdce8e2_fk_user_id",
"tableFrom": "user_profile",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"user_profile_user_id_key": {
"name": "user_profile_user_id_key",
"nullsNotDistinct": false,
"columns": [
"user_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.user_stat": {
"name": "user_stat",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "byDefault",
"name": "user_stat_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"metrics": {
"name": "metrics",
"type": "jsonb",
"primaryKey": false,
"notNull": true,
"default": "'{}'::jsonb"
},
"update_time": {
"name": "update_time",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"user_id": {
"name": "user_id",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"indexes": {},
"foreignKeys": {
"user_stat_user_id_73337fc0_fk_user_id": {
"name": "user_stat_user_id_73337fc0_fk_user_id",
"tableFrom": "user_stat",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"user_stat_user_id_key": {
"name": "user_stat_user_id_key",
"nullsNotDistinct": false,
"columns": [
"user_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
}
},
"enums": {},
"schemas": {},
"sequences": {},
"roles": {},
"policies": {},
"views": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}