rup-project/backend/routes/schedules.js

109 lines
2.8 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { Schedule } = require('../models');
const { Op } = require('sequelize');
// GET /schedules
// Query: petId (required), year, month (optional, for monthly view)
router.get('/', async (req, res) => {
try {
const { petId, year, month } = req.query;
if (!petId) {
return res.status(400).json({ message: 'Missing petId query parameter' });
}
const whereClause = { petId };
if (year && month) {
const startDate = new Date(year, month - 1, 1);
const endDate = new Date(year, month, 0, 23, 59, 59); // Last day of month
whereClause.date = {
[Op.between]: [startDate, endDate]
};
}
const schedules = await Schedule.findAll({
where: whereClause,
order: [['date', 'ASC']],
});
res.json(schedules);
} catch (error) {
console.error('Error fetching schedules:', error);
res.status(500).json({ message: 'Server Error', error: error.toString() });
}
});
// POST /schedules
router.post('/', async (req, res) => {
try {
const {
petId, date, type, isCompleted, title, note,
repeatInterval, repeatUnit, isAlarmOn, alarmTime
} = req.body;
const newSchedule = await Schedule.create({
petId,
date: new Date(date),
type,
isCompleted: isCompleted || false,
title,
note,
repeatInterval,
repeatUnit,
isAlarmOn,
alarmTime: alarmTime ? new Date(alarmTime) : null,
});
res.status(201).json(newSchedule);
} catch (error) {
console.error('Error creating schedule:', error);
res.status(500).json({ message: 'Server Error', error: error.toString() });
}
});
// PUT /schedules/:id
router.put('/:id', async (req, res) => {
try {
const { id } = req.params;
const updateData = req.body;
const schedule = await Schedule.findByPk(id);
if (!schedule) {
return res.status(404).json({ message: 'Schedule not found' });
}
// Safety checks / parsing
if (updateData.date) updateData.date = new Date(updateData.date);
if (updateData.alarmTime) updateData.alarmTime = new Date(updateData.alarmTime);
await schedule.update(updateData);
res.json(schedule);
} catch (error) {
console.error('Error updating schedule:', error);
res.status(500).json({ message: 'Server Error', error: error.toString() });
}
});
// DELETE /schedules/:id
router.delete('/:id', async (req, res) => {
try {
const { id } = req.params;
const schedule = await Schedule.findByPk(id);
if (!schedule) {
return res.status(404).json({ message: 'Schedule not found' });
}
await schedule.destroy();
res.status(204).send();
} catch (error) {
console.error('Error deleting schedule:', error);
res.status(500).json({ message: 'Server Error', error: error.toString() });
}
});
module.exports = router;