104 lines
2.4 KiB
JavaScript
104 lines
2.4 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const { auth } = require('../middleware/auth');
|
|
const PlatformPreset = require('../models/PlatformPreset');
|
|
const UserEquity = require('../models/UserEquity');
|
|
const User = require('../models/User');
|
|
|
|
router.get('/', async (req, res, next) => {
|
|
try {
|
|
const presets = await PlatformPreset.find({ status: 'active' })
|
|
.sort({ isHot: -1, sortOrder: 1 })
|
|
.lean();
|
|
|
|
res.json({
|
|
success: true,
|
|
data: presets
|
|
});
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.get('/hot', async (req, res, next) => {
|
|
try {
|
|
const presets = await PlatformPreset.find({ status: 'active', isHot: true })
|
|
.sort({ sortOrder: 1 })
|
|
.lean();
|
|
|
|
res.json({
|
|
success: true,
|
|
data: presets
|
|
});
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
router.post('/import/:id', auth, async (req, res, next) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const { expireDate, price } = req.body;
|
|
|
|
const preset = await PlatformPreset.findById(id);
|
|
|
|
if (!preset) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
error: '预设平台不存在'
|
|
});
|
|
}
|
|
|
|
const user = await User.findById(req.user._id);
|
|
|
|
if (!user.isVip) {
|
|
const userEquityCount = await UserEquity.countDocuments({ owner: req.user._id });
|
|
if (userEquityCount >= user.platformLimit) {
|
|
return res.status(403).json({
|
|
success: false,
|
|
error: '非会员最多只能添加15个平台,请升级会员'
|
|
});
|
|
}
|
|
}
|
|
|
|
if (!expireDate) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: '缺少到期时间'
|
|
});
|
|
}
|
|
|
|
const equityData = {
|
|
platform: preset.platform,
|
|
type: preset.type,
|
|
expireDate,
|
|
price: parseFloat(price) || preset.price || 0,
|
|
benefits: preset.benefits.map(b => ({
|
|
name: b.name,
|
|
type: b.type,
|
|
typeLabel: b.typeLabel,
|
|
expireDate,
|
|
used: false,
|
|
usedTime: null
|
|
})),
|
|
owner: req.user._id,
|
|
status: 'active',
|
|
note: preset.description || ''
|
|
};
|
|
|
|
const equity = await UserEquity.create(equityData);
|
|
|
|
user.platformCount = await UserEquity.countDocuments({ owner: req.user._id });
|
|
await user.save();
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
data: equity
|
|
});
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|