const express = require('express'); const { db } = require('../database'); const router = express.Router(); router.get('/', (req, res) => { const userId = req.user.userId; db.all( 'SELECT date, status, updated_at FROM calendar_marks WHERE user_id = ?', [userId], (err, rows) => { if (err) { return res.status(500).json({ success: false, error: '获取数据失败' }); } const markedDates = {}; rows.forEach((row) => { markedDates[row.date] = { status: row.status, updatedAt: row.updated_at }; }); res.json({ success: true, markedDates }); } ); }); router.post('/', (req, res) => { const userId = req.user.userId; const { markedDates } = req.body || {}; if (!markedDates || typeof markedDates !== 'object') { return res.status(400).json({ success: false, error: '无效的数据格式' }); } // Helper function to get current timestamp in ISO format (UTC) const getLocalTimestamp = () => { return new Date().toISOString(); }; const dbOperations = Object.entries(markedDates).map(([date, status]) => { return new Promise((resolve, reject) => { // First check if this date exists and if status has changed db.get( 'SELECT status FROM calendar_marks WHERE user_id = ? AND date = ?', [userId, date], (err, row) => { if (err) { return reject(err); } // Only update timestamp if status changed or it's a new entry const statusChanged = !row || row.status !== status; if (statusChanged) { // Status changed - update with new timestamp const currentTimestamp = getLocalTimestamp(); db.run( `INSERT INTO calendar_marks (user_id, date, status, updated_at) VALUES (?, ?, ?, ?) ON CONFLICT(user_id, date) DO UPDATE SET status = excluded.status, updated_at = excluded.updated_at`, [userId, date, status, currentTimestamp], (err) => { if (err) reject(err); else resolve(); } ); } else { // Status unchanged - keep existing timestamp db.run( `INSERT INTO calendar_marks (user_id, date, status, updated_at) VALUES (?, ?, ?, (SELECT updated_at FROM calendar_marks WHERE user_id = ? AND date = ?)) ON CONFLICT(user_id, date) DO UPDATE SET status = excluded.status`, [userId, date, status, userId, date], (err) => { if (err) reject(err); else resolve(); } ); } } ); }); }); const dates = Object.keys(markedDates); if (dates.length > 0) { const placeholders = dates.map(() => '?').join(','); dbOperations.push( new Promise((resolve, reject) => { db.run( `DELETE FROM calendar_marks WHERE user_id = ? AND date NOT IN (${placeholders})`, [userId, ...dates], (err) => { if (err) reject(err); else resolve(); } ); }) ); } else { dbOperations.push( new Promise((resolve, reject) => { db.run( 'DELETE FROM calendar_marks WHERE user_id = ?', [userId], (err) => { if (err) reject(err); else resolve(); } ); }) ); } Promise.all(dbOperations) .then(() => { res.json({ success: true, message: '数据保存成功' }); }) .catch((err) => { console.error('保存数据失败:', err); res.status(500).json({ success: false, error: '保存数据失败' }); }); }); module.exports = router;