chore: mqsrv backend
This commit is contained in:
122
src/routes/schemesAob.ts
Normal file
122
src/routes/schemesAob.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import { Router, Request, Response } from 'express';
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import { authMiddleware, optionalAuth } from '../middleware/auth';
|
||||
import { encrypt } from '../utils/encryption';
|
||||
|
||||
const router = Router();
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
// ============================================
|
||||
// 获取全面战场方案列表
|
||||
// ============================================
|
||||
router.get('/', optionalAuth, async (req: Request, res: Response) => {
|
||||
try {
|
||||
const { page = 1, limit = 20, weapon, category, sort = 'newest' } = req.query;
|
||||
|
||||
const skip = (Number(page) - 1) * Number(limit);
|
||||
|
||||
const where: any = { status: 'PUBLISHED' };
|
||||
if (weapon) where.weaponName = { contains: String(weapon) };
|
||||
if (category) where.category = String(category);
|
||||
|
||||
let orderBy: any = { createdAt: 'desc' };
|
||||
if (sort === 'popular') orderBy = { viewsCount: 'desc' };
|
||||
if (sort === 'downloads') orderBy = { downloadsCount: 'desc' };
|
||||
|
||||
const schemes = await prisma.schemeAob.findMany({
|
||||
where,
|
||||
orderBy,
|
||||
skip,
|
||||
take: Number(limit),
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
description: true,
|
||||
weaponName: true,
|
||||
category: true,
|
||||
price: true,
|
||||
viewsCount: true,
|
||||
downloadsCount: true,
|
||||
likesCount: true,
|
||||
isOfficial: true,
|
||||
createdAt: true,
|
||||
user: {
|
||||
select: { id: true, username: true, avatar: true },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
res.json({ success: true, data: schemes });
|
||||
} catch (error) {
|
||||
console.error('Get schemes_aob error:', error);
|
||||
res.status(500).json({ success: false, message: '获取失败' });
|
||||
}
|
||||
});
|
||||
|
||||
// ============================================
|
||||
// 获取单个方案详情
|
||||
// ============================================
|
||||
router.get('/:id', optionalAuth, async (req: Request, res: Response) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const scheme = await prisma.schemeAob.findUnique({
|
||||
where: { id },
|
||||
include: {
|
||||
user: { select: { id: true, username: true, avatar: true } },
|
||||
},
|
||||
});
|
||||
|
||||
if (!scheme || (scheme.status !== 'PUBLISHED' && scheme.userId !== req.user?.userId)) {
|
||||
return res.status(404).json({ success: false, message: '方案不存在' });
|
||||
}
|
||||
|
||||
await prisma.schemeAob.update({
|
||||
where: { id },
|
||||
data: { viewsCount: { increment: 1 } },
|
||||
});
|
||||
|
||||
const encryptedContent = encrypt(scheme.schemeContent);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: { ...scheme, schemeContent: encryptedContent },
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Get scheme_aob error:', error);
|
||||
res.status(500).json({ success: false, message: '获取失败' });
|
||||
}
|
||||
});
|
||||
|
||||
// ============================================
|
||||
// 创建方案
|
||||
// ============================================
|
||||
router.post('/', authMiddleware, async (req: Request, res: Response) => {
|
||||
try {
|
||||
const { title, description, weaponName, category, schemeContent, price = 0 } = req.body;
|
||||
|
||||
if (!title || !schemeContent) {
|
||||
return res.status(400).json({ success: false, message: '标题和内容不能为空' });
|
||||
}
|
||||
|
||||
const scheme = await prisma.schemeAob.create({
|
||||
data: {
|
||||
userId: req.user!.userId,
|
||||
title,
|
||||
description,
|
||||
weaponName,
|
||||
category,
|
||||
schemeContent,
|
||||
price,
|
||||
status: 'PUBLISHED',
|
||||
},
|
||||
});
|
||||
|
||||
res.json({ success: true, message: '方案创建成功', data: scheme });
|
||||
} catch (error) {
|
||||
console.error('Create scheme_aob error:', error);
|
||||
res.status(500).json({ success: false, message: '创建失败' });
|
||||
}
|
||||
});
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user