needed to update some APIs

This commit is contained in:
2026-05-16 23:46:33 -07:00
parent 96b06cf92d
commit a4646da6ab
+79 -111
View File
@@ -11,131 +11,99 @@ const pool = new Pool(database)
// Get all items // Get all items
router.get('/', async (req, res) => { router.get('/', async (req, res) => {
const client = await pool.connect() const client = await pool.connect()
try { try {
const result = await client.query('SELECT * FROM items') const result = await client.query('SELECT * FROM items')
res.json(result.rows) res.json(result.rows)
} finally { } finally {
client.release() client.release()
} }
}) })
// Get a single item by id // Get a single item by id
router.get('/:id', async (req, res) => { router.get('/:id', async (req, res) => {
const { id } = req.params const { id } = req.params
const client = await pool.connect() const client = await pool.connect()
try { try {
const result = await client.query('SELECT * FROM items WHERE id = $1', [id]) const result = await client.query('SELECT * FROM items WHERE id = $1', [id])
if (result.rows.length === 0) { if (result.rows.length === 0) {
return res.status(404).json({ message: 'Item not found' }) return res.status(404).json({ message: 'Item not found' })
} }
res.json(result.rows[0]) res.json(result.rows[0])
} finally { } finally {
client.release() client.release()
} }
}) })
// Create a new item // Create a new item
router.post( router.post('/', [
'/', check('collection_id').not().isEmpty(),
[ check('image_id').not().isEmpty(),
check('collection_id').not().isEmpty(), check('productId').not().isEmpty(),
check('image_id').not().isEmpty(), check('name').not().isEmpty(),
check('productId').not().isEmpty(), check('cleanName').not().isEmpty(),
check('name').not().isEmpty(), check('extCardText').not().isEmpty(),
check('cleanName').not().isEmpty(), check('marketPrice').not().isEmpty(),
check('extCardText').not().isEmpty(), check('extRarity').not().isEmpty(),
check('marketPrice').not().isEmpty(), check('set_id').not().isEmpty() // Add validation for set_id
check('extRarity').not().isEmpty(), ], async (req, res) => {
check('set_id').not().isEmpty(), // Add validation for set_id const errors = validationResult(req)
], if (!errors.isEmpty()) {
async (req, res) => { return res.status(400).json({ errors: errors.array() })
const errors = validationResult(req) }
if (!errors.isEmpty()) { const { collection_id, image_id, productId, name, cleanName, extCardText, marketPrice, extRarity, set_id } = req.body
return res.status(400).json({ errors: errors.array() }) const client = await pool.connect()
} try {
const { 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])
collection_id, res.status(201).json(result.rows[0])
image_id, } finally {
productId, client.release()
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 // Update an existing item
router.put('/:id', async (req, res) => { router.put('/:id', async (req, res) => {
const { id } = req.params const { id } = req.params
const updates = {} const updates = {}
if (req.body.collection_id) updates.collection_id = req.body.collection_id 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.image_id) updates.image_id = req.body.image_id
if (req.body.productId) updates.productId = req.body.productId if (req.body.productId) updates.productId = req.body.productId
if (req.body.name) updates.name = req.body.name if (req.body.name) updates.name = req.body.name
if (req.body.cleanName) updates.cleanName = req.body.cleanName if (req.body.cleanName) updates.cleanName = req.body.cleanName
if (req.body.extCardText) updates.extCardText = req.body.extCardText if (req.body.extCardText) updates.extCardText = req.body.extCardText
if (req.body.marketPrice) updates.marketPrice = req.body.marketPrice if (req.body.marketPrice) updates.marketPrice = req.body.marketPrice
if (req.body.extRarity) updates.extRarity = req.body.extRarity if (req.body.extRarity) updates.extRarity = req.body.extRarity
const client = await pool.connect() const client = await pool.connect()
try { try {
if (Object.keys(updates).length > 0) { if (Object.keys(updates).length > 0) {
const updateFields = Object.keys(updates) const updateFields = Object.keys(updates).map(key => `${key} = $${Object.keys(updates).indexOf(key) + 2}`).join(', ')
.map((key) => `${key} = $${Object.keys(updates).indexOf(key) + 2}`) updates.updated_at = 'NOW()'
.join(', ') const result = await client.query(`UPDATE items SET ${updateFields}, updated_at = $${Object.keys(updates).length + 1} WHERE id = $1 RETURNING *`, [id, ...Object.values(updates)])
updates.updated_at = 'NOW()' return res.json(result.rows[0])
const result = await client.query( }
`UPDATE items SET ${updateFields}, updated_at = $${Object.keys(updates).length + 1} WHERE id = $1 RETURNING *`, if (result.rows.length === 0) {
[id, ...Object.values(updates)] return res.status(404).json({ message: 'Item not found' })
) } else {
if (result.rows.length === 0) { return res.status(204).json()
return res.status(404).json({ message: 'Item not found' }) }
} } finally {
res.json(result.rows[0]) client.release()
} else { }
return res.status(204).json()
}
} finally {
client.release()
}
}) })
// Delete an item // Delete an item
router.delete('/:id', async (req, res) => { router.delete('/:id', async (req, res) => {
const { id } = req.params const { id } = req.params
const client = await pool.connect() const client = await pool.connect()
try { try {
const result = await client.query('DELETE FROM items WHERE id = $1', [id]) const result = await client.query('DELETE FROM items WHERE id = $1', [id])
if (result.rows.length === 0) { if (result.rows.length === 0) {
return res.status(404).json({ message: 'Item not found' }) return res.status(404).json({ message: 'Item not found' })
} }
res.json({ message: 'Item deleted' }) res.json({ message: 'Item deleted' })
} finally { } finally {
client.release() client.release()
} }
}) })
export default router export default router