Initial backend code
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const { auth } = require('../middleware/auth');
|
||||
const Equity = require('../models/Equity');
|
||||
|
||||
router.get('/', auth, async (req, res, next) => {
|
||||
try {
|
||||
const {
|
||||
page = 1,
|
||||
limit = 10,
|
||||
status,
|
||||
platform,
|
||||
type,
|
||||
sortBy = 'createdAt',
|
||||
order = 'desc'
|
||||
} = req.query;
|
||||
|
||||
const query = { owner: req.user._id };
|
||||
|
||||
if (status) query.status = status;
|
||||
if (platform) query.platform = platform;
|
||||
if (type) query.type = type;
|
||||
|
||||
const sortOrder = order === 'asc' ? 1 : -1;
|
||||
const skip = (parseInt(page) - 1) * parseInt(limit);
|
||||
|
||||
const [equities, total] = await Promise.all([
|
||||
Equity.find(query)
|
||||
.sort({ [sortBy]: sortOrder })
|
||||
.skip(skip)
|
||||
.limit(parseInt(limit))
|
||||
.lean(),
|
||||
Equity.countDocuments(query)
|
||||
]);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: {
|
||||
list: equities,
|
||||
pagination: {
|
||||
page: parseInt(page),
|
||||
limit: parseInt(limit),
|
||||
total,
|
||||
pages: Math.ceil(total / parseInt(limit))
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/:id', auth, async (req, res, next) => {
|
||||
try {
|
||||
const equity = await Equity.findOne({
|
||||
_id: req.params.id,
|
||||
owner: req.user._id
|
||||
});
|
||||
|
||||
if (!equity) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
error: '权益不存在'
|
||||
});
|
||||
}
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: equity
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/', auth, async (req, res, next) => {
|
||||
try {
|
||||
const {
|
||||
title,
|
||||
description,
|
||||
type,
|
||||
platform,
|
||||
value,
|
||||
unit,
|
||||
validStart,
|
||||
validEnd,
|
||||
images,
|
||||
tags,
|
||||
isTransferable,
|
||||
transferPrice,
|
||||
metadata
|
||||
} = req.body;
|
||||
|
||||
if (!title || !type || !platform || !validStart || !validEnd) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error: '缺少必填字段'
|
||||
});
|
||||
}
|
||||
|
||||
const equity = await Equity.create({
|
||||
title,
|
||||
description,
|
||||
type,
|
||||
platform,
|
||||
value,
|
||||
unit,
|
||||
validStart: new Date(validStart),
|
||||
validEnd: new Date(validEnd),
|
||||
owner: req.user._id,
|
||||
images,
|
||||
tags,
|
||||
isTransferable,
|
||||
transferPrice,
|
||||
metadata
|
||||
});
|
||||
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
data: equity
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
router.put('/:id', auth, async (req, res, next) => {
|
||||
try {
|
||||
const equity = await Equity.findOneAndUpdate(
|
||||
{ _id: req.params.id, owner: req.user._id },
|
||||
{ ...req.body, updatedAt: new Date() },
|
||||
{ new: true, runValidators: true }
|
||||
);
|
||||
|
||||
if (!equity) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
error: '权益不存在或无权限修改'
|
||||
});
|
||||
}
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: equity
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
router.delete('/:id', auth, async (req, res, next) => {
|
||||
try {
|
||||
const equity = await Equity.findOneAndDelete({
|
||||
_id: req.params.id,
|
||||
owner: req.user._id
|
||||
});
|
||||
|
||||
if (!equity) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
error: '权益不存在或无权限删除'
|
||||
});
|
||||
}
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: '权益已删除'
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/platforms/summary', auth, async (req, res, next) => {
|
||||
try {
|
||||
const summary = await Equity.aggregate([
|
||||
{ $match: { owner: req.user._id } },
|
||||
{
|
||||
$group: {
|
||||
_id: '$platform',
|
||||
count: { $sum: 1 },
|
||||
totalValue: { $sum: '$value' }
|
||||
}
|
||||
},
|
||||
{ $sort: { count: -1 } }
|
||||
]);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: summary
|
||||
});
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user