Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
2a7c306
feat: added weekly updater
konpoku Mar 16, 2025
a1254cf
Merge branch 'eesast:master' into weekly
konpoku Mar 24, 2025
7a00b41
Implemented renew weekly failure return
konpoku Mar 24, 2025
ab84bf8
modified for lint check
konpoku Mar 24, 2025
1fae258
modified for lint check
konpoku Mar 24, 2025
23a88d1
Removed admin
konpoku Mar 25, 2025
3a9aad2
Merge branch 'eesast:master' into weekly
konpoku Apr 20, 2025
d8dfbca
temporary commit
konpoku Apr 20, 2025
39af8fc
Fixed: weekly cover error
konpoku Apr 20, 2025
71f0ee7
modified to pass the lint test
konpoku Apr 20, 2025
9ca6e7c
Merge branch 'master' into weekly
zzdhybthu Apr 20, 2025
e21046b
Merge branch 'eesast:master' into weekly
konpoku Apr 26, 2025
8f96100
fix: fixed weekly update and permission check
konpoku Apr 26, 2025
1a97de3
Merge branch 'eesast:master' into weekly
konpoku May 11, 2025
a5d4b22
feat: added log for weekly update
konpoku May 11, 2025
8e01261
updated contest team member limit
konpoku Jun 17, 2025
121cc4f
Merge branch 'master' into weekly
konpoku Jun 17, 2025
8795da0
debugged for team member limit check
konpoku Jun 17, 2025
297bc01
Merge branch 'eesast:master' into weekly
konpoku Nov 15, 2025
4006839
feat(api): add user profile update logic
konpoku Nov 15, 2025
c4a4fc4
Merge branch 'eesast:master' into weekly
konpoku Dec 11, 2025
b921ceb
added LLM backend
konpoku Dec 15, 2025
6176b38
debug: LLM route added
konpoku Dec 15, 2025
335a942
debug: fixed public key handling
konpoku Dec 15, 2025
b6cc447
Merge branch 'master' into LLM
zzdhybthu Dec 16, 2025
bb713f0
fixed several bugs in LLM api
konpoku Dec 16, 2025
4480021
Merge branch 'master' into LLM
konpoku Dec 16, 2025
9dca257
Merge branch 'eesast:master' into LLM
konpoku Dec 16, 2025
65f79b2
fixed access key usage logging issues
konpoku Dec 16, 2025
f07141a
modified contest permission check and README.md
konpoku Dec 27, 2025
637b477
Merge branch 'master' into LLM
konpoku Dec 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ EESAST 后端 API

- 用户验证
- 静态文件权限管理
- 数据库访问

**其余逻辑均使用 Hasura**
**正在进行数据库逻辑向后端迁移工作**

## API 接口

Expand All @@ -22,17 +23,19 @@ EESAST 后端 API
- node 16 / npm
- yarn
- TypeScript
- MongoDB
- Redis

### Before Dev

需要在测试端安装和启动Redis
具体见[Redis安装文档](https://redis.io/docs/latest/operate/oss_and_stack/install/archive/install-redis/)

### 工具

- VSCode 扩展

- Prettier
- ESLint

- MongoDB Compass Community

- Postman

### 脚本
Expand Down
208 changes: 96 additions & 112 deletions src/routes/team.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ router.post("/member_limit", authenticate(), async (req, res) => {
});

// used in codepage.tsx
router.post("/add_team_code", authenticate(["student"]), async (req, res) => {
router.post("/add_team_code", authenticate(), async (req, res) => {
try {
const {
team_id,
Expand Down Expand Up @@ -71,7 +71,7 @@ router.post("/add_team_code", authenticate(["student"]), async (req, res) => {
});

// used in joinpage.tsx
router.post("/add_team_player", authenticate(["student"]), async (req, res) => {
router.post("/add_team_player", authenticate(), async (req, res) => {
try {
const { team_id, player } = req.body;
if (!team_id || !player) {
Expand Down Expand Up @@ -132,7 +132,7 @@ router.post("/add_team", authenticate(["student"]), async (req, res) => {
}
});

router.post("/add_team_member", authenticate(["student"]), async (req, res) => {
router.post("/add_team_member", authenticate(), async (req, res) => {
try {
const team_id = req.body.team_id;
const user_uuid = req.body.user_uuid;
Expand Down Expand Up @@ -161,69 +161,61 @@ router.post("/add_team_member", authenticate(["student"]), async (req, res) => {
});

// used in codepage.tsx
router.post(
"/update_team_code_name",
authenticate(["student"]),
async (req, res) => {
try {
const { code_id, code_name } = req.body;
if (!code_id || !code_name) {
return res
.status(400)
.json({ error: "400 Bad Request: Missing required parameters" });
}
const update_team_code_name = await ContHasFunc.update_team_code_name(
code_id,
code_name,
);
res.status(200).json({
code_id: update_team_code_name.code_id,
message: "Code Name Updated Successfully",
});
} catch (err: any) {
res.status(500).json({
error: "500 Internal Server Error",
message: err.message,
stack: process.env.NODE_ENV === "development" ? err.stack : undefined,
});
router.post("/update_team_code_name", authenticate([]), async (req, res) => {
try {
const { code_id, code_name } = req.body;
if (!code_id || !code_name) {
return res
.status(400)
.json({ error: "400 Bad Request: Missing required parameters" });
}
},
);
const update_team_code_name = await ContHasFunc.update_team_code_name(
code_id,
code_name,
);
res.status(200).json({
code_id: update_team_code_name.code_id,
message: "Code Name Updated Successfully",
});
} catch (err: any) {
res.status(500).json({
error: "500 Internal Server Error",
message: err.message,
stack: process.env.NODE_ENV === "development" ? err.stack : undefined,
});
}
});

// used in codepage.tsx
router.post(
"/update_team_player",
authenticate(["student"]),
async (req, res) => {
try {
const { team_id, player, code_id, role } = req.body;
if (!team_id || !player || !code_id || !role) {
return res
.status(400)
.json({ error: "400 Bad Request: Missing required parameters" });
}
const update_team_player = await ContHasFunc.update_team_player(
team_id,
player,
code_id,
role,
);
res.status(200).json({
player: update_team_player.player,
message: "Player Updated Successfully",
});
} catch (err: any) {
res.status(500).json({
error: "500 Internal Server Error",
message: err.message,
stack: process.env.NODE_ENV === "development" ? err.stack : undefined,
});
router.post("/update_team_player", authenticate(), async (req, res) => {
try {
const { team_id, player, code_id, role } = req.body;
if (!team_id || !player || !code_id || !role) {
return res
.status(400)
.json({ error: "400 Bad Request: Missing required parameters" });
}
},
);
const update_team_player = await ContHasFunc.update_team_player(
team_id,
player,
code_id,
role,
);
res.status(200).json({
player: update_team_player.player,
message: "Player Updated Successfully",
});
} catch (err: any) {
res.status(500).json({
error: "500 Internal Server Error",
message: err.message,
stack: process.env.NODE_ENV === "development" ? err.stack : undefined,
});
}
});

// used in managepage.tsx
router.post("/update_team", authenticate(["student"]), async (req, res) => {
router.post("/update_team", authenticate(), async (req, res) => {
try {
const { team_id, ...update_Fields } = req.body;
if (!team_id) {
Expand All @@ -247,35 +239,31 @@ router.post("/update_team", authenticate(["student"]), async (req, res) => {

//used in codepage.tsx

router.post(
"/delete_team_code",
authenticate(["student"]),
async (req, res) => {
try {
const { code_id } = req.body;
if (!code_id) {
return res
.status(400)
.send("400 Bad Request: Missing required parameters");
}
const delete_team_code = await ContHasFunc.delete_team_code(code_id);
res.status(200).json({
code_id: delete_team_code,
message: "Code Deleted Successfully",
});
} catch (err: any) {
res.status(500).json({
error: "500 Internal Server Error",
message: err.message,
stack: process.env.NODE_ENV === "development" ? err.stack : undefined,
});
router.post("/delete_team_code", authenticate(), async (req, res) => {
try {
const { code_id } = req.body;
if (!code_id) {
return res
.status(400)
.send("400 Bad Request: Missing required parameters");
}
},
);
const delete_team_code = await ContHasFunc.delete_team_code(code_id);
res.status(200).json({
code_id: delete_team_code,
message: "Code Deleted Successfully",
});
} catch (err: any) {
res.status(500).json({
error: "500 Internal Server Error",
message: err.message,
stack: process.env.NODE_ENV === "development" ? err.stack : undefined,
});
}
});

// used in managepage.tsx

router.post("/delete_team", authenticate(["student"]), async (req, res) => {
router.post("/delete_team", authenticate(), async (req, res) => {
try {
const { team_id } = req.body;
if (!team_id) {
Expand All @@ -297,33 +285,29 @@ router.post("/delete_team", authenticate(["student"]), async (req, res) => {
});

// used in managepage.tsx
router.post(
"/delete_team_member",
authenticate(["student"]),
async (req, res) => {
try {
const { user_uuid, team_id } = req.body;
if (!user_uuid || !team_id) {
return res
.status(400)
.send("400 Bad Request: Missing required parameters");
}
const delete_team_member = await ContHasFunc.delete_team_member(
user_uuid,
team_id,
);
res.status(200).json({
team_id: delete_team_member,
message: "Team Member Deleted Successfully",
});
} catch (err: any) {
res.status(500).json({
error: "500 Internal Server Error",
message: err.message,
stack: process.env.NODE_ENV === "development" ? err.stack : undefined,
});
router.post("/delete_team_member", authenticate(), async (req, res) => {
try {
const { user_uuid, team_id } = req.body;
if (!user_uuid || !team_id) {
return res
.status(400)
.send("400 Bad Request: Missing required parameters");
}
},
);
const delete_team_member = await ContHasFunc.delete_team_member(
user_uuid,
team_id,
);
res.status(200).json({
team_id: delete_team_member,
message: "Team Member Deleted Successfully",
});
} catch (err: any) {
res.status(500).json({
error: "500 Internal Server Error",
message: err.message,
stack: process.env.NODE_ENV === "development" ? err.stack : undefined,
});
}
});

export default router;
Loading