/** * 成功案例控制器 * 基于high.html的最新数据结构 (三轨道弹幕系统) */ const db = require('../../config/database'); /** * 获取成功案例列表 (按轨道分组) * GET /api/success-stories * 支持可选的track_type筛选 */ exports.getList = async (req, res) => { try { const trackType = req.query.track_type; // 构建查询条件 let whereClause = 'WHERE is_active = 1'; const params = []; if (trackType && ['fast', 'slow', 'medium'].includes(trackType)) { whereClause += ' AND track_type = ?'; params.push(trackType); } const [stories] = await db.query( `SELECT id, name, job, company, salary, avatar_color, track_type FROM success_stories ${whereClause} ORDER BY display_order ASC, id ASC`, params ); // 按轨道分组 const grouped = { fast: stories.filter(s => s.track_type === 'fast'), slow: stories.filter(s => s.track_type === 'slow'), medium: stories.filter(s => s.track_type === 'medium') }; return res.json({ success: true, data: grouped }); } catch (error) { console.error('获取成功案例失败:', error); return res.status(500).json({ success: false, message: '获取成功案例失败', error: error.message }); } }; /** * 创建成功案例 (管理员) * POST /api/success-stories */ exports.create = async (req, res) => { try { const { name, job, company, salary, avatar_color, track_type, display_order } = req.body; // 验证必填字段 if (!name || !job || !company || !salary) { return res.status(400).json({ success: false, message: '缺少必填字段 (name, job, company, salary)' }); } // 验证track_type if (track_type && !['fast', 'slow', 'medium'].includes(track_type)) { return res.status(400).json({ success: false, message: 'track_type 必须是 fast, slow 或 medium' }); } const [result] = await db.query( `INSERT INTO success_stories (name, job, company, salary, avatar_color, track_type, display_order) VALUES (?, ?, ?, ?, ?, ?, ?)`, [ name, job, company, salary, avatar_color || '#2563eb', track_type || 'fast', display_order || 0 ] ); return res.status(201).json({ success: true, message: '成功案例创建成功', data: { id: result.insertId } }); } catch (error) { console.error('创建成功案例失败:', error); return res.status(500).json({ success: false, message: '创建成功案例失败', error: error.message }); } }; /** * 更新成功案例 (管理员) * PUT /api/success-stories/:id */ exports.update = async (req, res) => { try { const { id } = req.params; const updateData = req.body; // 检查案例是否存在 const [existing] = await db.query( 'SELECT id FROM success_stories WHERE id = ?', [id] ); if (existing.length === 0) { return res.status(404).json({ success: false, message: '成功案例不存在' }); } const updates = []; const params = []; const allowedFields = ['name', 'job', 'company', 'salary', 'avatar_color', 'track_type', 'display_order', 'is_active']; for (const field of allowedFields) { if (updateData[field] !== undefined) { // 验证track_type if (field === 'track_type' && !['fast', 'slow', 'medium'].includes(updateData[field])) { return res.status(400).json({ success: false, message: 'track_type 必须是 fast, slow 或 medium' }); } updates.push(`${field} = ?`); params.push(updateData[field]); } } if (updates.length === 0) { return res.status(400).json({ success: false, message: '没有要更新的字段' }); } params.push(id); await db.query( `UPDATE success_stories SET ${updates.join(', ')} WHERE id = ?`, params ); return res.json({ success: true, message: '成功案例更新成功' }); } catch (error) { console.error('更新成功案例失败:', error); return res.status(500).json({ success: false, message: '更新成功案例失败', error: error.message }); } }; /** * 删除成功案例 (软删除) * DELETE /api/success-stories/:id */ exports.delete = async (req, res) => { try { const { id } = req.params; const [result] = await db.query( 'UPDATE success_stories SET is_active = 0 WHERE id = ?', [id] ); if (result.affectedRows === 0) { return res.status(404).json({ success: false, message: '成功案例不存在' }); } return res.json({ success: true, message: '成功案例删除成功' }); } catch (error) { console.error('删除成功案例失败:', error); return res.status(500).json({ success: false, message: '删除成功案例失败', error: error.message }); } };