114 lines
3.5 KiB
JavaScript
114 lines
3.5 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const { Activity, Photo, Sponsor, Expense, Registration } = require('../models');
|
|
const { upload, uploadFilesToMinio } = require('../middleware/upload');
|
|
|
|
// 获取活动列表
|
|
router.get('/activities', async (req, res) => {
|
|
try {
|
|
const { status } = req.query;
|
|
const where = status ? { status } : {};
|
|
const activities = await Activity.findAll({ where, order: [['startTime', 'DESC']] });
|
|
res.json(activities);
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// 获取活动详情
|
|
router.get('/activities/:id', async (req, res) => {
|
|
try {
|
|
const activity = await Activity.findByPk(req.params.id);
|
|
// 只返回已审核通过的照片
|
|
const photos = await Photo.findAll({
|
|
where: { activityId: req.params.id, status: 'approved' }
|
|
});
|
|
const sponsors = await Sponsor.findAll({ where: { activityId: req.params.id } });
|
|
const expenses = await Expense.findAll({ where: { activityId: req.params.id } });
|
|
|
|
res.json({ activity, photos, sponsors, expenses });
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// 获取活动经费(公开接口)
|
|
router.get('/activities/:id/expenses', async (req, res) => {
|
|
try {
|
|
const expenses = await Expense.findAll({ where: { activityId: req.params.id } });
|
|
res.json(expenses);
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// 用户上传照片(需要审核)
|
|
router.post('/activities/:id/photos', upload.array('photos', 10), async (req, res) => {
|
|
try {
|
|
const { uploadedBy } = req.body;
|
|
const uploaded = await uploadFilesToMinio(req.files);
|
|
const photos = uploaded.map(file => ({
|
|
activityId: req.params.id,
|
|
url: file.url,
|
|
type: /\.(mp4|mov|avi)$/i.test(file.filename) ? 'video' : 'image',
|
|
uploadedBy,
|
|
status: 'pending'
|
|
}));
|
|
const created = await Photo.bulkCreate(photos);
|
|
res.json(created);
|
|
} catch (error) {
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
// 用户验证登录
|
|
router.post('/auth/verify/:activityId', async (req, res) => {
|
|
try {
|
|
const { phone, carNumber } = req.body;
|
|
const { activityId } = req.params;
|
|
|
|
console.log('验证请求:', { phone, carNumber, activityId });
|
|
|
|
if (!phone || !carNumber) {
|
|
return res.status(400).json({ error: '请输入手机号和车牌号' });
|
|
}
|
|
|
|
const registration = await Registration.findOne({
|
|
where: {
|
|
activityId,
|
|
phone,
|
|
carNumber
|
|
}
|
|
});
|
|
|
|
console.log('查询结果:', registration ? '找到' : '未找到');
|
|
|
|
if (!registration) {
|
|
// 调试:查询该活动下该手机号的所有报名
|
|
const allRegs = await Registration.findAll({
|
|
where: { activityId, phone }
|
|
});
|
|
console.log('该手机号的所有报名:', allRegs.map(r => ({ id: r.id, carNumber: r.carNumber })));
|
|
|
|
return res.status(404).json({ error: '未找到报名信息,请检查车牌号是否正确' });
|
|
}
|
|
|
|
res.json({
|
|
registration: {
|
|
id: registration.id,
|
|
name: registration.name,
|
|
phone: registration.phone,
|
|
carNumber: registration.carNumber,
|
|
carModel: registration.carModel,
|
|
status: registration.status,
|
|
activityId: registration.activityId
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('验证错误:', error);
|
|
res.status(500).json({ error: error.message });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|