Fix card_images schema: use API image_id as PK, support multiple artworks per card
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2026-05-15 21:52:58 +02:00
parent c4c95fa972
commit 09eea6d176
3 changed files with 15 additions and 22 deletions
+5 -11
View File
@@ -1,12 +1,12 @@
const db = require('../config/db');
const axios = require('axios');
async function getCardImage(req, res) {
const { cardId } = req.params;
try {
// Check if blob exists
const [rows] = await db.execute(
'SELECT image_data, image_url FROM card_images WHERE card_id = ? LIMIT 1',
'SELECT image_id, image_data, image_url FROM card_images WHERE card_id = ? LIMIT 1',
[cardId]
);
@@ -17,26 +17,20 @@ async function getCardImage(req, res) {
const cardImage = rows[0];
if (cardImage.image_data) {
// Blob exists → return as base64
const base64Image = cardImage.image_data.toString('base64');
return res.json({ image: `data:image/png;base64,${base64Image}` });
}
// Blob does not exist → download from URL
if (!cardImage.image_url) {
return res.status(404).json({ error: 'No image URL available for this card' });
}
const response = await axios.get(cardImage.image_url, {
responseType: 'arraybuffer'
});
const response = await axios.get(cardImage.image_url, { responseType: 'arraybuffer' });
const imageBuffer = Buffer.from(response.data, 'binary');
// Save blob to DB
await db.execute(
'UPDATE card_images SET image_data = ? WHERE card_id = ?',
[imageBuffer, cardId]
'UPDATE card_images SET image_data = ? WHERE image_id = ?',
[imageBuffer, cardImage.image_id]
);
const base64Image = imageBuffer.toString('base64');
+3 -3
View File
@@ -120,10 +120,10 @@ async function importCardsInternal() {
if (Array.isArray(card.card_images)) {
for (const img of card.card_images) {
await conn.execute(`
INSERT INTO card_images (card_id, image_url)
VALUES (?, ?)
INSERT INTO card_images (image_id, card_id, image_url)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE image_url = VALUES(image_url)
`, [card.id, img.image_url]);
`, [img.id, card.id, img.image_url]);
addedImages++;
}
}
+6 -7
View File
@@ -1,13 +1,12 @@
const db = require('../config/db');
async function insertCardImage(image) {
const { card_id, image_url } = image;
const sql = `
INSERT INTO card_images (card_id, image_url)
VALUES (?, ?)
`;
await db.execute(sql, [card_id, image_url]);
const { image_id, card_id, image_url } = image;
await db.execute(`
INSERT INTO card_images (image_id, card_id, image_url)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE image_url = VALUES(image_url)
`, [image_id, card_id, image_url]);
}
module.exports = { insertCardImage };