feat: add test VIP card VIP365-0000-0000-0000-0000 and admin set-vip endpoint
This commit is contained in:
@@ -59,6 +59,16 @@ async function main() {
|
||||
{ type: 'YEAR', days: 365, count: 20 },
|
||||
];
|
||||
|
||||
// 测试卡密 (固定值,方便开发验证)
|
||||
await prisma.vipCard.create({
|
||||
data: {
|
||||
cardKey: 'VIP365-0000-0000-0000-0000',
|
||||
cardType: 'YEAR',
|
||||
days: 365,
|
||||
},
|
||||
}).catch(() => {});
|
||||
console.log(`✅ 创建测试卡密: VIP365-0000-0000-0000-0000`);
|
||||
|
||||
let totalCards = 0;
|
||||
for (const config of cardConfigs) {
|
||||
const cards = [];
|
||||
|
||||
49
src/index.ts
49
src/index.ts
@@ -197,6 +197,55 @@ app.post('/api/adverts/:id/click', (req, res) => {
|
||||
// 头像列表
|
||||
app.get('/api/avatars', (req, res) => {
|
||||
res.json({ success: true, data: [] });
|
||||
|
||||
// 更新服务 (electron-updater)
|
||||
// ============================================
|
||||
|
||||
// 更新配置
|
||||
app.get('/update-config.json', (req, res) => {
|
||||
res.json({
|
||||
version: '7.0.4',
|
||||
url: '',
|
||||
notes: '',
|
||||
mandatory: false,
|
||||
});
|
||||
});
|
||||
|
||||
// latest.yml (electron-updater 标准格式)
|
||||
app.get('/latest.yml', (req, res) => {
|
||||
res.type('text/yaml');
|
||||
res.send(`version: 7.0.4
|
||||
files: []
|
||||
releaseDate: '2024-01-01T00:00:00.000Z'
|
||||
`);
|
||||
});
|
||||
|
||||
// ============================================
|
||||
// 开发工具端点 (仅 NODE_ENV=development)
|
||||
// ============================================
|
||||
app.post('/api/admin/set-vip', async (req, res) => {
|
||||
if (process.env.NODE_ENV !== 'development') {
|
||||
return res.status(403).json({ success: false, message: '仅开发环境可用' });
|
||||
}
|
||||
try {
|
||||
const { username, isVip } = req.body;
|
||||
if (!username) return res.status(400).json({ success: false, message: '缺少 username' });
|
||||
const { PrismaClient } = require('@prisma/client');
|
||||
const prisma = new PrismaClient();
|
||||
const user = await prisma.user.update({
|
||||
where: { username },
|
||||
data: {
|
||||
isVip: isVip !== false,
|
||||
vipExpireAt: isVip !== false ? new Date(Date.now() + 365 * 24 * 60 * 60 * 1000) : null,
|
||||
vipLevel: isVip !== false ? 1 : 0,
|
||||
},
|
||||
});
|
||||
await prisma.$disconnect();
|
||||
res.json({ success: true, username: user.username, isVip: user.isVip });
|
||||
} catch (e: any) {
|
||||
res.status(500).json({ success: false, message: e.message });
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ============================================
|
||||
|
||||
Reference in New Issue
Block a user