99 lines
2.6 KiB
JavaScript
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; |