Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stuoj/stuoj
STUOJ 是汕头大学疾风算法协会的 ACM-ICPC 在线代码评测系统,基于 Go 语言和 Gin 框架开发。用户可以在平台上阅读算法题目,并可提交代码到代码沙箱进行评测,评测完成后系统将返回评测结果。
https://github.com/stuoj/stuoj
gin go golang
Last synced: 1 day ago
JSON representation
STUOJ 是汕头大学疾风算法协会的 ACM-ICPC 在线代码评测系统,基于 Go 语言和 Gin 框架开发。用户可以在平台上阅读算法题目,并可提交代码到代码沙箱进行评测,评测完成后系统将返回评测结果。
- Host: GitHub
- URL: https://github.com/stuoj/stuoj
- Owner: STUOJ
- Created: 2024-09-20T13:11:22.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2024-11-12T10:04:50.000Z (3 days ago)
- Last Synced: 2024-11-12T10:21:41.852Z (3 days ago)
- Topics: gin, go, golang
- Language: Go
- Homepage: https://github.com/STUOJ/STUOJ
- Size: 467 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# STU Online Judge System
## 项目简介
STUOJ 是汕头大学疾风算法协会的 ACM-ICPC 在线代码评测系统,基于 Go 语言和 Gin 框架开发。
用户可以在平台上阅读算法题目,并可提交代码到代码沙箱进行评测,评测完成后系统将返回评测结果。管理员可以管理用户、导入题目、修改评测点数据、管理提交记录、查询系统统计数据和修改系统设置。
## 项目仓库
- 后端仓库:[https://github.com/STUOJ/STUOJ](https://github.com/STUOJ/STUOJ)
- 前端仓库:[https://github.com/STUOJ/stuoj-web](https://github.com/STUOJ/stuoj-web)
- 数据库仓库:[https://github.com/STUOJ/stuoj-database](https://github.com/STUOJ/stuoj-database)## API 文档
- Apifox:[https://apifox.com/apidoc/shared-431b8879-dd14-41f8-a011-613050aee4f4](https://apifox.com/apidoc/shared-431b8879-dd14-41f8-a011-613050aee4f4)
## 系统架构
- 后端架构:Gin + Gorm
- 前端架构:Vue
- 数据库:MySQL
- 代码沙箱: Judge0
- 图床服务: yuki-image## 系统功能
![](https://github.com/user-attachments/assets/29b370aa-5a02-4e4d-ab37-3949c5dce19e)
### 功能简述
| 功能名称 | 请求方法 | 路由路径 | 操作者 | 功能简述 |
|------------|--------|-----------------------|----------|------------------------------------------------|
| 用户注册 | POST | /user/register | 未登录用户 | 用户输入用户名、邮箱和密码,创建账号。 |
| 用户登录 | POST | /user/login | 未登录用户 | 用户输入邮箱和密码,登录账号。 |
| 获取用户头像 | GET | /user/avatar/:id | 用户 | 用户可以获取某个用户的头像。 |
| 获取用户信息 | GET | /user/:id | 用户 | 用户可以获取某个用户的详细信息。 |
| 获取当前用户ID | GET | /user/current | 用户 | 用户可以获取当前登录用户的ID。 |
| 获取当前用户头像 | GET | /user/avatar | 用户 | 用户可以获取当前登录用户的头像。 |
| 修改用户信息 | PUT | /user/modify | 用户 | 用户可以修改自己的用户信息。 |
| 修改用户密码 | PUT | /user/password | 用户 | 用户可以修改自己的密码。 |
| 更新用户头像 | POST | /user/avatar | 用户 | 用户可以更新自己的头像。 |
| 获取题目列表 | GET | /problem | 用户 | 用户可以获取题目列表。 |
| 根据难度获取题目列表 | GET | /problem/difficulty/:id | 用户 | 用户可以根据难度获取题目列表。 |
| 根据标签获取题目列表 | GET | /problem/tag/:id | 用户 | 用户可以根据标签获取题目列表。 |
| 获取题目详情 | GET | /problem/:id | 用户 | 用户可以获取题目的详细信息。 |
| 获取标签列表 | GET | /problem/tag | 用户 | 用户可以获取标签列表。 |
| 获取编程语言列表 | GET | /judge/language | 用户 | 用户可以获取支持的编程语言列表。 |
| 提交代码 | POST | /judge/submit | 用户 | 用户可以提交代码进行评测。 |
| 获取提交记录列表 | GET | /record | 用户 | 用户可以获取提交记录列表。 |
| 获取提交记录详情 | GET | /record/:id | 用户 | 用户可以获取提交记录的详细信息。 |
| 获取用户提交记录 | GET | /record/user/:id | 用户 | 用户可以获取某个用户的提交记录。 |
| 获取题目提交记录 | GET | /record/problem/:id | 用户 | 用户可以获取某个题目的提交记录。 |
| 获取用户列表 | GET | /admin/user | 管理员 | 管理员可以获取用户列表。 |
| 获取用户详情 | GET | /admin/user/:id | 管理员 | 管理员可以获取用户的详细信息。 |
| 根据角色获取用户列表 | GET | /admin/user/role/:id | 管理员 | 管理员可以根据角色获取用户列表。 |
| 添加用户 | POST | /admin/user | 管理员 | 管理员可以添加用户。 |
| 修改用户信息 | PUT | /admin/user | 管理员 | 管理员可以修改用户信息。 |
| 删除用户 | DELETE | /admin/user/:id | 管理员 | 管理员可以删除用户。 |
| 获取题目列表 | GET | /admin/problem | 管理员 | 管理员可以获取题目列表。 |
| 根据状态获取题目列表 | GET | /admin/problem/status/:id | 管理员 | 管理员可以根据状态获取题目列表。 |
| 获取题目详情 | GET | /admin/problem/:id | 管理员 | 管理员可以获取题目的详细信息。 |
| 添加题目 | POST | /admin/problem | 管理员 | 管理员可以添加题目。 |
| 修改题目 | PUT | /admin/problem | 管理员 | 管理员可以修改题目。 |
| 删除题目 | DELETE | /admin/problem/:id | 管理员 | 管理员可以删除题目。 |
| 获取题目历史记录 | GET | /admin/problem/history/:id | 管理员 | 管理员可以获取题目的历史记录。 |
| 添加题目标签 | POST | /admin/problem/tag | 管理员 | 管理员可以给题目添加标签。 |
| 删除题目标签 | DELETE | /admin/problem/tag | 管理员 | 管理员可以删除题目的标签。 |
| 获取评测点详情 | GET | /admin/testcase/:id | 管理员 | 管理员可以获取评测点的详细信息。 |
| 添加评测点 | POST | /admin/testcase | 管理员 | 管理员可以添加评测点。 |
| 修改评测点 | PUT | /admin/testcase | 管理员 | 管理员可以修改评测点。 |
| 删除评测点 | DELETE | /admin/testcase/:id | 管理员 | 管理员可以删除评测点。 |
| 获取标签列表 | GET | /admin/tag | 管理员 | 管理员可以获取标签列表。 |
| 添加标签 | POST | /admin/tag | 管理员 | 管理员可以添加标签。 |
| 修改标签 | PUT | /admin/tag | 管理员 | 管理员可以修改标签。 |
| 删除标签 | DELETE | /admin/tag/:id | 管理员 | 管理员可以删除标签。 |
| 获取提交记录列表 | GET | /admin/record | 管理员 | 管理员可以获取提交记录列表。 |
| 获取提交记录详情 | GET | /admin/record/:id | 管理员 | 管理员可以获取提交记录的详细信息。 |
| 删除提交记录 | DELETE | /admin/record/:id | 管理员 | 管理员可以删除提交记录。 |
| 获取统计数据 | GET | /admin/statistics | 管理员 | 管理员可以获取统计数据。 |
| 修改用户角色 | PUT | /admin/user/role | 超级管理员 | 超级管理员可以修改用户角色。 |
| 获取系统设置 | GET | /admin/config | 超级管理员 | 超级管理员可以获取系统设置。 |
| 修改系统设置 | PUT | /admin/config | 超级管理员 | 超级管理员可以修改系统设置。 |### 用例图
![](https://github.com/user-attachments/assets/d5f588b9-41cb-4622-93d1-d6ff6d4d736c)
![](https://github.com/user-attachments/assets/aeb7baf2-4dce-4d81-9a0f-f564503d7d72)
![](https://github.com/user-attachments/assets/dc848d27-ff9e-4bf1-994a-7f281b4f5f6c)