Move image_ids to image endpoint response, remove slow IN query from cards export
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -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' });
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user