cash_tracker/server/routes/monthly-categories.js
2025-08-28 23:04:25 +03:00

99 lines
2.6 KiB
JavaScript

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;