Create shopping server
This commit is contained in:
146
server/routes/shopping.js
Normal file
146
server/routes/shopping.js
Normal file
@@ -0,0 +1,146 @@
|
||||
const express = require('express');
|
||||
const { ShoppingItem } = require('../models');
|
||||
const { Op } = require('sequelize');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
// Get all shopping items
|
||||
router.get('/', async (req, res) => {
|
||||
try {
|
||||
const items = await ShoppingItem.findAll({
|
||||
order: [['createdAt', 'DESC']],
|
||||
});
|
||||
res.json(items);
|
||||
} catch (error) {
|
||||
console.error('Error fetching shopping items:', error);
|
||||
res.status(500).json({ error: 'Failed to fetch shopping items' });
|
||||
}
|
||||
});
|
||||
|
||||
// Get a specific shopping item
|
||||
router.get('/:id', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const item = await ShoppingItem.findByPk(id);
|
||||
|
||||
if (!item) {
|
||||
return res.status(404).json({ error: 'Shopping item not found' });
|
||||
}
|
||||
|
||||
res.json(item);
|
||||
} catch (error) {
|
||||
console.error('Error fetching shopping item:', error);
|
||||
res.status(500).json({ error: 'Failed to fetch shopping item' });
|
||||
}
|
||||
});
|
||||
|
||||
// Create a new shopping item
|
||||
router.post('/', async (req, res) => {
|
||||
try {
|
||||
const { name, amount, date } = req.body;
|
||||
|
||||
if (!name) {
|
||||
return res.status(400).json({ error: 'Name is required' });
|
||||
}
|
||||
|
||||
const item = await ShoppingItem.create({
|
||||
name,
|
||||
amount: amount || '1',
|
||||
date: date || new Date(),
|
||||
});
|
||||
|
||||
res.status(201).json(item);
|
||||
} catch (error) {
|
||||
console.error('Error creating shopping item:', error);
|
||||
res.status(500).json({ error: 'Failed to create shopping item' });
|
||||
}
|
||||
});
|
||||
|
||||
// Update a shopping item
|
||||
router.put('/:id', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const { name, amount, checked, date } = req.body;
|
||||
|
||||
const item = await ShoppingItem.findByPk(id);
|
||||
|
||||
if (!item) {
|
||||
return res.status(404).json({ error: 'Shopping item not found' });
|
||||
}
|
||||
|
||||
// Update fields if provided
|
||||
if (name !== undefined) item.name = name;
|
||||
if (amount !== undefined) item.amount = amount;
|
||||
if (checked !== undefined) item.checked = checked;
|
||||
if (date !== undefined) item.date = date;
|
||||
|
||||
await item.save();
|
||||
|
||||
res.json(item);
|
||||
} catch (error) {
|
||||
console.error('Error updating shopping item:', error);
|
||||
res.status(500).json({ error: 'Failed to update shopping item' });
|
||||
}
|
||||
});
|
||||
|
||||
// Toggle checked status of a shopping item
|
||||
router.patch('/:id/toggle', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const item = await ShoppingItem.findByPk(id);
|
||||
|
||||
if (!item) {
|
||||
return res.status(404).json({ error: 'Shopping item not found' });
|
||||
}
|
||||
|
||||
item.checked = !item.checked;
|
||||
await item.save();
|
||||
|
||||
res.json(item);
|
||||
} catch (error) {
|
||||
console.error('Error toggling shopping item:', error);
|
||||
res.status(500).json({ error: 'Failed to toggle shopping item' });
|
||||
}
|
||||
});
|
||||
|
||||
// Delete a shopping item
|
||||
router.delete('/:id', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const item = await ShoppingItem.findByPk(id);
|
||||
|
||||
if (!item) {
|
||||
return res.status(404).json({ error: 'Shopping item not found' });
|
||||
}
|
||||
|
||||
await item.destroy();
|
||||
|
||||
res.json({ message: 'Shopping item deleted successfully' });
|
||||
} catch (error) {
|
||||
console.error('Error deleting shopping item:', error);
|
||||
res.status(500).json({ error: 'Failed to delete shopping item' });
|
||||
}
|
||||
});
|
||||
|
||||
// Delete all checked items
|
||||
router.delete('/checked/all', async (req, res) => {
|
||||
try {
|
||||
const deletedCount = await ShoppingItem.destroy({
|
||||
where: {
|
||||
checked: true,
|
||||
},
|
||||
});
|
||||
|
||||
res.json({
|
||||
message: `Deleted ${deletedCount} checked items`,
|
||||
deletedCount
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error deleting checked items:', error);
|
||||
res.status(500).json({ error: 'Failed to delete checked items' });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
Reference in New Issue
Block a user