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 db = require('../config/db');
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
|
|
||||||
async function getCardImage(req, res) {
|
async function getCardImage(req, res) {
|
||||||
const { cardId } = req.params;
|
const { cardId } = req.params;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Check if blob exists
|
|
||||||
const [rows] = await db.execute(
|
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]
|
[cardId]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -17,26 +17,20 @@ async function getCardImage(req, res) {
|
|||||||
const cardImage = rows[0];
|
const cardImage = rows[0];
|
||||||
|
|
||||||
if (cardImage.image_data) {
|
if (cardImage.image_data) {
|
||||||
// Blob exists → return as base64
|
|
||||||
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}` });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Blob does not exist → download from URL
|
|
||||||
if (!cardImage.image_url) {
|
if (!cardImage.image_url) {
|
||||||
return res.status(404).json({ error: 'No image URL available for this card' });
|
return res.status(404).json({ error: 'No image URL available for this card' });
|
||||||
}
|
}
|
||||||
|
|
||||||
const response = await axios.get(cardImage.image_url, {
|
const response = await axios.get(cardImage.image_url, { responseType: 'arraybuffer' });
|
||||||
responseType: 'arraybuffer'
|
|
||||||
});
|
|
||||||
|
|
||||||
const imageBuffer = Buffer.from(response.data, 'binary');
|
const imageBuffer = Buffer.from(response.data, 'binary');
|
||||||
|
|
||||||
// Save blob to DB
|
|
||||||
await db.execute(
|
await db.execute(
|
||||||
'UPDATE card_images SET image_data = ? WHERE card_id = ?',
|
'UPDATE card_images SET image_data = ? WHERE image_id = ?',
|
||||||
[imageBuffer, cardId]
|
[imageBuffer, cardImage.image_id]
|
||||||
);
|
);
|
||||||
|
|
||||||
const base64Image = imageBuffer.toString('base64');
|
const base64Image = imageBuffer.toString('base64');
|
||||||
|
|||||||
@@ -120,10 +120,10 @@ async function importCardsInternal() {
|
|||||||
if (Array.isArray(card.card_images)) {
|
if (Array.isArray(card.card_images)) {
|
||||||
for (const img of card.card_images) {
|
for (const img of card.card_images) {
|
||||||
await conn.execute(`
|
await conn.execute(`
|
||||||
INSERT INTO card_images (card_id, image_url)
|
INSERT INTO card_images (image_id, card_id, image_url)
|
||||||
VALUES (?, ?)
|
VALUES (?, ?, ?)
|
||||||
ON DUPLICATE KEY UPDATE image_url = VALUES(image_url)
|
ON DUPLICATE KEY UPDATE image_url = VALUES(image_url)
|
||||||
`, [card.id, img.image_url]);
|
`, [img.id, card.id, img.image_url]);
|
||||||
addedImages++;
|
addedImages++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
const db = require('../config/db');
|
const db = require('../config/db');
|
||||||
|
|
||||||
async function insertCardImage(image) {
|
async function insertCardImage(image) {
|
||||||
const { card_id, image_url } = image;
|
const { image_id, card_id, image_url } = image;
|
||||||
|
await db.execute(`
|
||||||
const sql = `
|
INSERT INTO card_images (image_id, card_id, image_url)
|
||||||
INSERT INTO card_images (card_id, image_url)
|
VALUES (?, ?, ?)
|
||||||
VALUES (?, ?)
|
ON DUPLICATE KEY UPDATE image_url = VALUES(image_url)
|
||||||
`;
|
`, [image_id, card_id, image_url]);
|
||||||
await db.execute(sql, [card_id, image_url]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { insertCardImage };
|
module.exports = { insertCardImage };
|
||||||
|
|||||||
Reference in New Issue
Block a user