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 },
|
{ 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;
|
let totalCards = 0;
|
||||||
for (const config of cardConfigs) {
|
for (const config of cardConfigs) {
|
||||||
const cards = [];
|
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) => {
|
app.get('/api/avatars', (req, res) => {
|
||||||
res.json({ success: true, data: [] });
|
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