From 8f3d0ee0a84b39d5f4689dcb52437faeb5644e24 Mon Sep 17 00:00:00 2001 From: Syco21 Date: Fri, 15 May 2026 22:18:02 +0200 Subject: [PATCH] Move image_ids to image endpoint response, remove slow IN query from cards export --- src/controllers/cardImageController.js | 24 +++++++++++------------- src/controllers/exportCardsController.js | 10 +--------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/controllers/cardImageController.js b/src/controllers/cardImageController.js index 5e76af1..74f9ab3 100644 --- a/src/controllers/cardImageController.js +++ b/src/controllers/cardImageController.js @@ -6,25 +6,23 @@ async function getCardImage(req, res) { const { imageId } = req.query; try { - const [rows] = imageId - ? await db.execute( - 'SELECT image_id, image_data, image_url FROM card_images WHERE card_id = ? AND image_id = ? LIMIT 1', - [cardId, imageId] - ) - : await db.execute( - 'SELECT image_id, image_data, image_url FROM card_images WHERE card_id = ? LIMIT 1', - [cardId] - ); + const [allRows] = await db.execute( + 'SELECT image_id, image_data, image_url FROM card_images WHERE card_id = ? ORDER BY image_id ASC', + [cardId] + ); - if (rows.length === 0) { + if (allRows.length === 0) { 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) { 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) { @@ -40,7 +38,7 @@ async function getCardImage(req, res) { ); 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) { console.error('Error fetching card image:', err); res.status(500).json({ error: 'Failed to fetch card image' }); diff --git a/src/controllers/exportCardsController.js b/src/controllers/exportCardsController.js index fb18fc6..71dcf19 100644 --- a/src/controllers/exportCardsController.js +++ b/src/controllers/exportCardsController.js @@ -41,13 +41,8 @@ async function exportCards(req, res) { 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 = {}; - cards.forEach(card => { cardMap[card.id] = { ...card, printings: [], image_ids: [] }; }); + cards.forEach(card => { cardMap[card.id] = { ...card, printings: [] }; }); printings.forEach(p => { if (cardMap[p.card_id]) { 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)); } catch (err) {