From a4646da6ab2826be4eb15e3eda55beabf2017fb5 Mon Sep 17 00:00:00 2001 From: Joseph Nelson Date: Sat, 16 May 2026 23:46:33 -0700 Subject: [PATCH] needed to update some APIs --- src/routes/items/index.js | 190 ++++++++++++++++---------------------- 1 file changed, 79 insertions(+), 111 deletions(-) diff --git a/src/routes/items/index.js b/src/routes/items/index.js index 6c207f1..71f37cc 100644 --- a/src/routes/items/index.js +++ b/src/routes/items/index.js @@ -11,131 +11,99 @@ const pool = new Pool(database) // Get all items router.get('/', async (req, res) => { - const client = await pool.connect() - try { - const result = await client.query('SELECT * FROM items') - res.json(result.rows) - } finally { - client.release() - } + const client = await pool.connect() + try { + const result = await client.query('SELECT * FROM items') + res.json(result.rows) + } finally { + client.release() + } }) // Get a single item by id router.get('/:id', async (req, res) => { - const { id } = req.params - const client = await pool.connect() - try { - const result = await client.query('SELECT * FROM items WHERE id = $1', [id]) - if (result.rows.length === 0) { - return res.status(404).json({ message: 'Item not found' }) - } - res.json(result.rows[0]) - } finally { - client.release() - } + const { id } = req.params + const client = await pool.connect() + try { + const result = await client.query('SELECT * FROM items WHERE id = $1', [id]) + if (result.rows.length === 0) { + return res.status(404).json({ message: 'Item not found' }) + } + res.json(result.rows[0]) + } finally { + client.release() + } }) // Create a new item -router.post( - '/', - [ - check('collection_id').not().isEmpty(), - check('image_id').not().isEmpty(), - check('productId').not().isEmpty(), - check('name').not().isEmpty(), - check('cleanName').not().isEmpty(), - check('extCardText').not().isEmpty(), - check('marketPrice').not().isEmpty(), - check('extRarity').not().isEmpty(), - check('set_id').not().isEmpty(), // Add validation for set_id - ], - async (req, res) => { - const errors = validationResult(req) - if (!errors.isEmpty()) { - return res.status(400).json({ errors: errors.array() }) - } - const { - collection_id, - image_id, - productId, - name, - cleanName, - extCardText, - marketPrice, - extRarity, - set_id, - } = req.body - const client = await pool.connect() - try { - const result = await client.query( - 'INSERT INTO items (collection_id, image_id, productId, name, cleanName, extCardText, marketPrice, extRarity, set_id, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW(), NOW()) RETURNING *', - [ - collection_id, - image_id, - productId, - name, - cleanName, - extCardText, - marketPrice, - extRarity, - set_id, - ] - ) - res.status(201).json(result.rows[0]) - } finally { - client.release() - } - } -) +router.post('/', [ + check('collection_id').not().isEmpty(), + check('image_id').not().isEmpty(), + check('productId').not().isEmpty(), + check('name').not().isEmpty(), + check('cleanName').not().isEmpty(), + check('extCardText').not().isEmpty(), + check('marketPrice').not().isEmpty(), + check('extRarity').not().isEmpty(), + check('set_id').not().isEmpty() // Add validation for set_id +], async (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }) + } + const { collection_id, image_id, productId, name, cleanName, extCardText, marketPrice, extRarity, set_id } = req.body + const client = await pool.connect() + try { + const result = await client.query('INSERT INTO items (collection_id, image_id, productId, name, cleanName, extCardText, marketPrice, extRarity, set_id, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, NOW(), NOW()) RETURNING *', [collection_id, image_id, productId, name, cleanName, extCardText, marketPrice, extRarity, set_id]) + res.status(201).json(result.rows[0]) + } finally { + client.release() + } +}) // Update an existing item router.put('/:id', async (req, res) => { - const { id } = req.params - const updates = {} - if (req.body.collection_id) updates.collection_id = req.body.collection_id - if (req.body.image_id) updates.image_id = req.body.image_id - if (req.body.productId) updates.productId = req.body.productId - if (req.body.name) updates.name = req.body.name - if (req.body.cleanName) updates.cleanName = req.body.cleanName - if (req.body.extCardText) updates.extCardText = req.body.extCardText - if (req.body.marketPrice) updates.marketPrice = req.body.marketPrice - if (req.body.extRarity) updates.extRarity = req.body.extRarity - const client = await pool.connect() - try { - if (Object.keys(updates).length > 0) { - const updateFields = Object.keys(updates) - .map((key) => `${key} = $${Object.keys(updates).indexOf(key) + 2}`) - .join(', ') - updates.updated_at = 'NOW()' - const result = await client.query( - `UPDATE items SET ${updateFields}, updated_at = $${Object.keys(updates).length + 1} WHERE id = $1 RETURNING *`, - [id, ...Object.values(updates)] - ) - if (result.rows.length === 0) { - return res.status(404).json({ message: 'Item not found' }) - } - res.json(result.rows[0]) - } else { - return res.status(204).json() - } - } finally { - client.release() - } + const { id } = req.params + const updates = {} + if (req.body.collection_id) updates.collection_id = req.body.collection_id + if (req.body.image_id) updates.image_id = req.body.image_id + if (req.body.productId) updates.productId = req.body.productId + if (req.body.name) updates.name = req.body.name + if (req.body.cleanName) updates.cleanName = req.body.cleanName + if (req.body.extCardText) updates.extCardText = req.body.extCardText + if (req.body.marketPrice) updates.marketPrice = req.body.marketPrice + if (req.body.extRarity) updates.extRarity = req.body.extRarity + const client = await pool.connect() + try { + if (Object.keys(updates).length > 0) { + const updateFields = Object.keys(updates).map(key => `${key} = $${Object.keys(updates).indexOf(key) + 2}`).join(', ') + updates.updated_at = 'NOW()' + const result = await client.query(`UPDATE items SET ${updateFields}, updated_at = $${Object.keys(updates).length + 1} WHERE id = $1 RETURNING *`, [id, ...Object.values(updates)]) + return res.json(result.rows[0]) + } + if (result.rows.length === 0) { + return res.status(404).json({ message: 'Item not found' }) + } else { + return res.status(204).json() + } + } finally { + client.release() + } }) // Delete an item router.delete('/:id', async (req, res) => { - const { id } = req.params - const client = await pool.connect() - try { - const result = await client.query('DELETE FROM items WHERE id = $1', [id]) - if (result.rows.length === 0) { - return res.status(404).json({ message: 'Item not found' }) - } - res.json({ message: 'Item deleted' }) - } finally { - client.release() - } + const { id } = req.params + const client = await pool.connect() + try { + const result = await client.query('DELETE FROM items WHERE id = $1', [id]) + if (result.rows.length === 0) { + return res.status(404).json({ message: 'Item not found' }) + } + res.json({ message: 'Item deleted' }) + } finally { + client.release() + } }) export default router