const express = require('express'); const router = express.Router(); const db = require('../database'); // Get monthly categories by year and month router.get('/:year/:month', (req, res) => { const { year, month } = req.params; const query = ` SELECT mc.*, c.name as card_name, c.bank, cat.name as category_name FROM monthly_categories mc JOIN cards c ON mc.card_id = c.id JOIN categories cat ON mc.category_id = cat.id WHERE mc.year = ? AND mc.month = ? ORDER BY c.name, cat.name `; db.all(query, [year, month], (err, rows) => { if (err) { console.error(err); res.status(500).json({ error: 'Database error' }); } else { res.json(rows); } }); }); // Create monthly category assignment router.post('/', (req, res) => { const { card_id, category_id, month, year, cashback_percent } = req.body; if (!card_id || !category_id || !month || !year || cashback_percent === undefined) { return res.status(400).json({ error: 'All fields are required' }); } db.run( `INSERT OR REPLACE INTO monthly_categories (card_id, category_id, month, year, cashback_percent) VALUES (?, ?, ?, ?, ?)`, [card_id, category_id, month, year, cashback_percent], function(err) { if (err) { console.error(err); res.status(500).json({ error: 'Database error' }); } else { res.status(201).json({ id: this.lastID, card_id, category_id, month, year, cashback_percent }); } } ); }); // Delete monthly category assignment router.delete('/:id', (req, res) => { const { id } = req.params; db.run('DELETE FROM monthly_categories WHERE id = ?', [id], function(err) { if (err) { console.error(err); res.status(500).json({ error: 'Database error' }); } else if (this.changes === 0) { res.status(404).json({ error: 'Assignment not found' }); } else { res.json({ message: 'Assignment deleted successfully' }); } }); }); // Get available categories for a card in a specific month/year router.get('/available/:card_id/:year/:month', (req, res) => { const { card_id, year, month } = req.params; const query = ` SELECT c.* FROM categories c WHERE c.id NOT IN ( SELECT mc.category_id FROM monthly_categories mc WHERE mc.card_id = ? AND mc.year = ? AND mc.month = ? ) ORDER BY c.name `; db.all(query, [card_id, year, month], (err, rows) => { if (err) { console.error(err); res.status(500).json({ error: 'Database error' }); } else { res.json(rows); } }); }); module.exports = router;