Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 10 additions & 0 deletions backend/hw.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
**①速度更快:**
Yarn 采用并行安装机制,能同时下载多个依赖包,且会缓存已下载的包,重复安装时无需重新下载,大幅提升安装速度。而早期 npm采用串行安装,速度较慢,虽然后续 npm 版本优化了性能,但 Yarn 仍在部分场景下保持优势。
**②确定性安装:**
Yarn 会生成 yarn.lock 文件,精确记录每个依赖的版本、下载源和校验信息,确保不同环境下安装的依赖完全一致,避免因版本差异导致的 “在我这能运行” 问题。npm 虽然后来也引入了 package-lock.json,但 Yarn 更早实现且早期稳定性更优。
**③更丰富的功能:**
Yarn 支持离线模式(yarn install --offline),可直接使用缓存安装依赖,适合网络环境差的场景。
提供 yarn workspaces 功能,更便捷地管理多包项目(monorepo),而 npm 的 workspaces 支持相对滞后。
支持 yarn audit 等安全检查命令,更早集成依赖漏洞扫描功能。
**④更好的错误处理和日志:**
Yarn 的错误提示更清晰,安装过程中的日志输出更简洁,便于开发者定位问题。
22 changes: 22 additions & 0 deletions backend/src/file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,26 @@ router.get("/download", authenticate, (req, res) => {
}
});

router.post("/delete", authenticate, (req, res) => {
const { room, filename } = req.body;

if (!room || !filename) {
return res.status(422).send("422 Unprocessable Entity: Missing room or filename");
}

const filePath = path.resolve(baseDir, room, filename);

try {
if (fs.existsSync(filePath)) {
fs.unlinkSync(filePath); // 删除文件
return res.status(200).send("File deleted successfully");
} else {
return res.status(404).send("404 Not Found: File does not exist");
}
} catch (err) {
console.error(err);
return res.sendStatus(500);
}
});

export default router;
19 changes: 19 additions & 0 deletions backend/src/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,23 @@ router.post("/register", async (req, res) => {
}
});

router.get("/delete", authenticate, async (req, res) => {
try {
// 从 JWT 中获取当前用户 UUID(假设 authenticate 中间件已将解析后的 payload 挂载到 req.user)
const userId = req.user.uuid;

// 调用 Hasura SDK 删除用户
const result = await graphql.delete_user_by_pk({ uuid: userId });

if (!result.delete_user_by_pk) {
return res.status(404).send("404 Not Found: User not found");
}

return res.status(200).send("User deleted successfully");
} catch (err) {
console.error(err);
return res.sendStatus(500);
}
});

export default router;