moodController.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import pool from '../config/db.js';
  2. // @desc 记录今日心情
  3. // @route POST /api/moods
  4. // @access Private
  5. const recordMood = async (req, res) => {
  6. try {
  7. const { mood_value } = req.body;
  8. const userId = req.user.id;
  9. const today = new Date().toISOString().split('T')[0]; // 当前日期
  10. // 验证心情值
  11. if (mood_value < 1 || mood_value > 5) {
  12. return res.status(400).json({ message: '无效的心情值,必须在1-5之间' });
  13. }
  14. // 检查今天是否已记录心情
  15. const [existingMoods] = await pool.query(
  16. 'SELECT * FROM moods WHERE user_id = ? AND date = ?',
  17. [userId, today]
  18. );
  19. if (existingMoods.length > 0) {
  20. // 更新今日心情
  21. await pool.query(
  22. 'UPDATE moods SET mood_value = ? WHERE user_id = ? AND date = ?',
  23. [mood_value, userId, today]
  24. );
  25. const [updatedMood] = await pool.query(
  26. 'SELECT * FROM moods WHERE user_id = ? AND date = ?',
  27. [userId, today]
  28. );
  29. return res.json(updatedMood[0]);
  30. }
  31. // 记录新的心情
  32. const [result] = await pool.query(
  33. 'INSERT INTO moods (user_id, date, mood_value) VALUES (?, ?, ?)',
  34. [userId, today, mood_value]
  35. );
  36. if (result.insertId) {
  37. const [newMood] = await pool.query('SELECT * FROM moods WHERE id = ?', [result.insertId]);
  38. res.status(201).json(newMood[0]);
  39. } else {
  40. res.status(400).json({ message: '无效的心情数据' });
  41. }
  42. } catch (error) {
  43. console.error(error);
  44. res.status(500).json({ message: '服务器错误' });
  45. }
  46. };
  47. // @desc 获取最近30天的心情记录
  48. // @route GET /api/moods
  49. // @access Private
  50. const getMoodHistory = async (req, res) => {
  51. try {
  52. const userId = req.user.id;
  53. // 计算30天前的日期
  54. const thirtyDaysAgo = new Date();
  55. thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
  56. const thirtyDaysAgoStr = thirtyDaysAgo.toISOString().split('T')[0];
  57. // 获取最近30天的心情记录
  58. const [moods] = await pool.query(
  59. 'SELECT * FROM moods WHERE user_id = ? AND date >= ? ORDER BY date',
  60. [userId, thirtyDaysAgoStr]
  61. );
  62. res.json(moods);
  63. } catch (error) {
  64. console.error(error);
  65. res.status(500).json({ message: '服务器错误' });
  66. }
  67. };
  68. export { recordMood, getMoodHistory };