fix(withdraw): resolve remote 404 route, db reason column patch and avatar tmp path fallback
这个提交包含在:
@@ -1863,6 +1863,96 @@ app.post('/api/posts/:id/apply', async (req: Request, res: Response) => {
|
||||
}
|
||||
});
|
||||
|
||||
// 7.8 陪玩收藏管理接口 (收藏/取消收藏/列表/状态探测)
|
||||
app.get('/api/favorites', async (req: Request, res: Response) => {
|
||||
try {
|
||||
const userId = Number(req.query.userId || 1001);
|
||||
const list = await repo.getFavorites(userId);
|
||||
res.json({
|
||||
code: 20000,
|
||||
data: list,
|
||||
message: '获取收藏列表成功'
|
||||
});
|
||||
} catch (err: any) {
|
||||
res.status(500).json({ code: 50000, message: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/api/favorites/check', async (req: Request, res: Response) => {
|
||||
try {
|
||||
const userId = Number(req.query.userId || 1001);
|
||||
const expertId = Number(req.query.expertId);
|
||||
const isFav = await repo.isFavorite(userId, expertId);
|
||||
res.json({
|
||||
code: 20000,
|
||||
data: { isFavorite: isFav }
|
||||
});
|
||||
} catch (err: any) {
|
||||
res.status(500).json({ code: 50000, message: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/api/favorites', async (req: Request, res: Response) => {
|
||||
try {
|
||||
const { userId, expertId } = req.body;
|
||||
if (!expertId) {
|
||||
return res.status(400).json({ code: 40000, message: 'expertId 不能为空' });
|
||||
}
|
||||
const result = await repo.addFavorite(Number(userId || 1001), Number(expertId));
|
||||
res.json({
|
||||
code: 20000,
|
||||
data: result,
|
||||
message: result.message
|
||||
});
|
||||
} catch (err: any) {
|
||||
res.status(500).json({ code: 50000, message: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.delete('/api/favorites/:expertId', async (req: Request, res: Response) => {
|
||||
try {
|
||||
const userId = Number(req.query.userId || 1001);
|
||||
const expertId = Number(req.params.expertId);
|
||||
const result = await repo.removeFavorite(userId, expertId);
|
||||
res.json({
|
||||
code: 20000,
|
||||
data: result,
|
||||
message: result.message
|
||||
});
|
||||
} catch (err: any) {
|
||||
res.status(500).json({ code: 50000, message: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
// 7.9 分销团队与返佣订单流水接口
|
||||
app.get('/api/distribution/team', async (req: Request, res: Response) => {
|
||||
try {
|
||||
const userId = Number(req.query.userId || 1001);
|
||||
const teamData = await repo.getDistributionTeam(userId);
|
||||
res.json({
|
||||
code: 20000,
|
||||
data: teamData,
|
||||
message: '获取团队列表成功'
|
||||
});
|
||||
} catch (err: any) {
|
||||
res.status(500).json({ code: 50000, message: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/api/distribution/records', async (req: Request, res: Response) => {
|
||||
try {
|
||||
const userId = Number(req.query.userId || 1001);
|
||||
const records = await repo.getDistributionRecords(userId);
|
||||
res.json({
|
||||
code: 20000,
|
||||
data: records,
|
||||
message: '获取返佣明细成功'
|
||||
});
|
||||
} catch (err: any) {
|
||||
res.status(500).json({ code: 50000, message: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
// 8. 启动服务器并初始化数据库
|
||||
async function bootstrap() {
|
||||
try {
|
||||
|
||||
在新工单中引用
屏蔽一个用户