Fix card_images schema: use API image_id as PK, support multiple artworks per card
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 };
|
||||
module.exports = { insertCardImage };
|
||||
|
||||
Reference in New Issue
Block a user