Move image_ids to image endpoint response, remove slow IN query from cards export
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2026-05-15 22:18:02 +02:00
parent 8fe83f41e3
commit 8f3d0ee0a8
2 changed files with 12 additions and 22 deletions
+11 -13
View File
@@ -6,25 +6,23 @@ async function getCardImage(req, res) {
const { imageId } = req.query; const { imageId } = req.query;
try { try {
const [rows] = imageId const [allRows] = await db.execute(
? await db.execute( 'SELECT image_id, image_data, image_url FROM card_images WHERE card_id = ? ORDER BY image_id ASC',
'SELECT image_id, image_data, image_url FROM card_images WHERE card_id = ? AND image_id = ? LIMIT 1', [cardId]
[cardId, imageId] );
)
: await db.execute(
'SELECT image_id, image_data, image_url FROM card_images WHERE card_id = ? LIMIT 1',
[cardId]
);
if (rows.length === 0) { if (allRows.length === 0) {
return res.status(404).json({ error: 'Card image not found' }); return res.status(404).json({ error: 'Card image not found' });
} }
const cardImage = rows[0]; const image_ids = allRows.map(r => r.image_id);
const cardImage = imageId
? (allRows.find(r => r.image_id == imageId) ?? allRows[0])
: allRows[0];
if (cardImage.image_data) { if (cardImage.image_data) {
const base64Image = cardImage.image_data.toString('base64'); const base64Image = cardImage.image_data.toString('base64');
return res.json({ image: `data:image/png;base64,${base64Image}` }); return res.json({ image: `data:image/png;base64,${base64Image}`, image_ids });
} }
if (!cardImage.image_url) { if (!cardImage.image_url) {
@@ -40,7 +38,7 @@ async function getCardImage(req, res) {
); );
const base64Image = imageBuffer.toString('base64'); const base64Image = imageBuffer.toString('base64');
res.json({ image: `data:image/png;base64,${base64Image}` }); res.json({ image: `data:image/png;base64,${base64Image}`, image_ids });
} catch (err) { } catch (err) {
console.error('Error fetching card image:', err); console.error('Error fetching card image:', err);
res.status(500).json({ error: 'Failed to fetch card image' }); res.status(500).json({ error: 'Failed to fetch card image' });
+1 -9
View File
@@ -41,13 +41,8 @@ async function exportCards(req, res) {
cardIds cardIds
); );
const [images] = await db.execute(
`SELECT card_id, image_id FROM card_images WHERE card_id IN (${placeholders}) ORDER BY image_id ASC`,
cardIds
);
const cardMap = {}; const cardMap = {};
cards.forEach(card => { cardMap[card.id] = { ...card, printings: [], image_ids: [] }; }); cards.forEach(card => { cardMap[card.id] = { ...card, printings: [] }; });
printings.forEach(p => { printings.forEach(p => {
if (cardMap[p.card_id]) { if (cardMap[p.card_id]) {
cardMap[p.card_id].printings.push({ cardMap[p.card_id].printings.push({
@@ -61,9 +56,6 @@ async function exportCards(req, res) {
}); });
} }
}); });
images.forEach(img => {
if (cardMap[img.card_id]) cardMap[img.card_id].image_ids.push(img.image_id);
});
res.json(Object.values(cardMap)); res.json(Object.values(cardMap));
} catch (err) { } catch (err) {