feat(closed-loop): complete end-to-end closed loops across miniapp, backend, and admin
这个提交包含在:
@@ -1330,9 +1330,10 @@ app.post('/api/reports', async (req: Request, res: Response) => {
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/api/reports', async (_req: Request, res: Response) => {
|
||||
app.get('/api/reports', async (req: Request, res: Response) => {
|
||||
try {
|
||||
const list = await repo.getReports();
|
||||
const reporterId = req.query.reporterId ? Number(req.query.reporterId) : undefined;
|
||||
const list = await repo.getReports(reporterId);
|
||||
res.json({ code: 20000, data: list });
|
||||
} catch (err: any) {
|
||||
res.status(500).json({ code: 50000, message: err.message });
|
||||
@@ -2154,6 +2155,23 @@ app.get('/api/distribution/records', async (req: Request, res: Response) => {
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/api/distribution/bind', async (req: Request, res: Response) => {
|
||||
try {
|
||||
const { userId, inviteCode } = req.body || {};
|
||||
if (!inviteCode || !String(inviteCode).trim()) {
|
||||
return res.status(400).json({ code: 40000, message: '邀请码不能为空' });
|
||||
}
|
||||
const result = await repo.bindInviteCode(Number(userId || 1001), String(inviteCode).trim());
|
||||
res.json({
|
||||
code: 20000,
|
||||
data: result,
|
||||
message: result.message || '邀请码绑定成功'
|
||||
});
|
||||
} catch (err: any) {
|
||||
res.status(400).json({ code: 40000, message: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
// 8. 启动服务器并初始化数据库
|
||||
async function bootstrap() {
|
||||
try {
|
||||
|
||||
在新工单中引用
屏蔽一个用户