79 lines
3.2 KiB
JavaScript
79 lines
3.2 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const sharp = require('sharp');
|
|
const db = require('./database');
|
|
const storage = require('./storage');
|
|
require('dotenv').config();
|
|
|
|
async function delay(ms) {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
}
|
|
|
|
async function run() {
|
|
try {
|
|
console.log("⏳ Iniciando o banco de dados...");
|
|
// Hack para inicializar banco usando código do projeto
|
|
db.initDatabase = require('./database').initDatabase || (async () => {
|
|
const { Pool } = require('pg');
|
|
const pool = new Pool({
|
|
host: process.env.DB_HOST || '10.99.0.3',
|
|
port: process.env.DB_PORT || 5432,
|
|
user: process.env.DB_USER || 'postgres',
|
|
database: process.env.DB_NAME || 'dental_images',
|
|
password: process.env.DB_PASSWORD
|
|
});
|
|
db.all = async (query, params) => { const r = await pool.query(query, params); return r.rows; };
|
|
db.run = async (query, params) => { await pool.query(query, params); return {}; };
|
|
});
|
|
await db.initDatabase();
|
|
await storage.loadConfigFromDb();
|
|
|
|
console.log("🔍 Buscando imagens sem thumbnail...");
|
|
const images = await db.all("SELECT * FROM images WHERE thumb_filename IS NULL AND filename LIKE '%.png'");
|
|
|
|
console.log(`Encontradas ${images.length} imagens para processar.`);
|
|
|
|
for (let i = 0; i < images.length; i++) {
|
|
const img = images[i];
|
|
console.log(`[${i+1}/${images.length}] Processando ${img.filename}...`);
|
|
try {
|
|
// Tenta pegar o buffer (S3 ou local)
|
|
const buffer = await storage.getImageBuffer(img.filename, img.client_name, img.patient_name, false);
|
|
if (!buffer) {
|
|
console.log(`⚠️ Imagem não encontrada no storage: ${img.filename}`);
|
|
continue;
|
|
}
|
|
|
|
// Gera o thumbnail usando Sharp (já está no package.json do servidor)
|
|
const thumbBuffer = await sharp(buffer)
|
|
.resize(300, 300, { fit: 'inside' })
|
|
.jpeg({ quality: 80 })
|
|
.toBuffer();
|
|
|
|
const thumbFilename = img.filename.replace('.png', '_thumb.jpg');
|
|
|
|
// Salva o thumbnail no storage
|
|
await storage.saveImage(thumbFilename, thumbBuffer, img.client_name, img.patient_name, false);
|
|
|
|
// Atualiza o banco de dados
|
|
await db.run("UPDATE images SET thumb_filename = $1 WHERE id = $2", [thumbFilename, img.id]);
|
|
|
|
console.log(`✅ Thumbnail gerado: ${thumbFilename}`);
|
|
|
|
// Pequena pausa para não estourar memória / limite da API da AWS
|
|
await delay(200);
|
|
} catch (err) {
|
|
console.error(`❌ Erro ao processar ${img.filename}: ${err.message}`);
|
|
}
|
|
}
|
|
|
|
console.log("🎉 Concluído!");
|
|
process.exit(0);
|
|
} catch (err) {
|
|
console.error("❌ Falha fatal:", err);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
run();
|