diff --git a/assets/database.mmd b/assets/database.mmd new file mode 100644 index 0000000..79d5b76 --- /dev/null +++ b/assets/database.mmd @@ -0,0 +1,117 @@ +--- +config: + theme: redux-color +--- +erDiagram + PENDING_USER { + int id PK + string email UK + string password_hash + string handle_candidate + datetime requested_at + datetime expires_at + } + EMAIL_VERIFICATION_TOKEN { + int id PK + int pending_user_id FK + string token UK + datetime sent_at + datetime expires_at + datetime consumed_at + } + USER { + int id PK + string email UK + string handle UK + string password_hash + datetime email_confirmed_at + datetime created_at + } + PENDING_USER ||--o{ EMAIL_VERIFICATION_TOKEN : "" + PROBLEM { + int id PK + string code + string title + datetime created_at + } + STATEMENT { + int id PK + int problem_id FK + string language + text content_md + } + SOLUTION { + int id PK + int problem_id FK + enum role + string path + } + TEST_GROUP { + int id PK + int problem_id FK + string name + int ordinal + int points + } + TEST { + int id PK + int group_id FK + string in_file_path + string ans_file_path + } + RESOURCE_FILE { + int id PK + int problem_id FK + enum kind "checker/validator/generator" + string path + } + TAG { + int id PK + int problem_id FK + string name + } + PROBLEM_AUTHOR { + int problem_id FK + int user_id FK + } + USER ||--o{ PROBLEM_AUTHOR : "" + PROBLEM ||--o{ PROBLEM_AUTHOR : "" + PROBLEM ||--o{ STATEMENT : "" + PROBLEM ||--o{ SOLUTION : "" + PROBLEM ||--o{ TEST_GROUP : "" + TEST_GROUP ||--o{ TEST : "" + PROBLEM ||--o{ RESOURCE_FILE : "" + PROBLEM ||--o{ TAG : "" + CONTEST { + int id PK + string code + string title + datetime start_time + datetime end_time + } + CONTEST_PROBLEM { + int contest_id FK + int problem_id FK + char alias "A/B/C…" + int ordinal + int points_override + } + CONTEST_AUTHOR { + int contest_id FK + int user_id FK + } + USER ||--o{ CONTEST_AUTHOR : "" + CONTEST ||--o{ CONTEST_AUTHOR : "" + CONTEST ||--o{ CONTEST_PROBLEM : "" + PROBLEM ||--o{ CONTEST_PROBLEM : "" + PACKAGE { + int id PK + enum type "problem/contest" + int problem_id FK + int contest_id FK + string version + datetime built_at + string storage_path + } + PROBLEM ||--o{ PACKAGE : "" + CONTEST ||--o{ PACKAGE : "" diff --git a/assets/database.png b/assets/database.png new file mode 100644 index 0000000..efa1420 Binary files /dev/null and b/assets/database.png differ