fix(sync): re-upload correto quando arquivo foi deletado do storage
continuous-integration/webhook Deploy concluído (VPS4)
continuous-integration/webhook Deploy concluído (VPS4)
- storage.js: adiciona fileExists() com HeadObject (sem baixar o arquivo) - check-image-exists: verifica existência física no storage, não só no banco; se registro existe mas arquivo não, apaga o registro órfão e retorna exists=false - send-image: mesma lógica — registro órfão é removido e re-upload prossegue - Remove migrate-to-wasabi.js do repositório Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+35
-21
@@ -877,26 +877,30 @@ io.on('connection', (socket) => {
|
||||
throw new Error('Metadata incompleta. fileName é obrigatório.');
|
||||
}
|
||||
|
||||
// Verificar se a imagem já foi inserida no banco
|
||||
// Verificar se a imagem já existe no banco E no storage
|
||||
const existing = await db.get(
|
||||
"SELECT id, filename FROM images WHERE original_filename = $1 AND enabled = 1 LIMIT 1",
|
||||
"SELECT id, filename, clinic_name, client_name, patient_name FROM images WHERE original_filename = $1 AND enabled = 1 LIMIT 1",
|
||||
[data.metadata.fileName]
|
||||
);
|
||||
if (existing) {
|
||||
console.log(`⚠️ Imagem ${data.metadata.fileName} já existe no servidor (ID: ${existing.id}). Ignorando upload.`);
|
||||
const ackData = {
|
||||
success: true,
|
||||
imageId: existing.id,
|
||||
message: 'Imagem já existe no servidor',
|
||||
filename: existing.filename,
|
||||
originalFilename: data.metadata.fileName,
|
||||
savedAt: new Date().toISOString()
|
||||
};
|
||||
socket.emit('image-received', ackData);
|
||||
if (typeof callback === 'function') {
|
||||
callback(ackData);
|
||||
const physicallyExists = await storage.fileExists(existing.filename, existing.clinic_name, existing.client_name, existing.patient_name);
|
||||
if (physicallyExists) {
|
||||
console.log(`⚠️ Imagem ${data.metadata.fileName} já existe no servidor (ID: ${existing.id}). Ignorando upload.`);
|
||||
const ackData = {
|
||||
success: true,
|
||||
imageId: existing.id,
|
||||
message: 'Imagem já existe no servidor',
|
||||
filename: existing.filename,
|
||||
originalFilename: data.metadata.fileName,
|
||||
savedAt: new Date().toISOString()
|
||||
};
|
||||
socket.emit('image-received', ackData);
|
||||
if (typeof callback === 'function') callback(ackData);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
// Registro órfão (arquivo deletado do storage) — remove para re-upload limpo
|
||||
console.log(`🔄 Registro órfão encontrado para ${data.metadata.fileName} (ID: ${existing.id}). Removendo para re-upload.`);
|
||||
await db.run('DELETE FROM images WHERE id = $1', [existing.id]);
|
||||
}
|
||||
|
||||
// Decodificar imagem base64
|
||||
@@ -1125,18 +1129,28 @@ io.on('connection', (socket) => {
|
||||
if (typeof callback === 'function') callback({ success: false, error: 'fileName é obrigatório' });
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
const existing = await db.get(
|
||||
"SELECT id, filename FROM images WHERE original_filename = $1 AND enabled = 1 LIMIT 1",
|
||||
"SELECT id, filename, clinic_name, client_name, patient_name FROM images WHERE original_filename = $1 AND enabled = 1 LIMIT 1",
|
||||
[data.fileName]
|
||||
);
|
||||
|
||||
|
||||
// Registro no banco só conta se o arquivo realmente existir no storage
|
||||
let physicallyExists = false;
|
||||
if (existing) {
|
||||
physicallyExists = await storage.fileExists(existing.filename, existing.clinic_name, existing.client_name, existing.patient_name);
|
||||
if (!physicallyExists) {
|
||||
// Apaga o registro órfão para o re-upload criar um novo
|
||||
await db.run('DELETE FROM images WHERE id = $1', [existing.id]);
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof callback === 'function') {
|
||||
callback({
|
||||
success: true,
|
||||
exists: !!existing,
|
||||
imageId: existing ? existing.id : null,
|
||||
filename: existing ? existing.filename : null
|
||||
exists: physicallyExists,
|
||||
imageId: physicallyExists ? existing.id : null,
|
||||
filename: physicallyExists ? existing.filename : null
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user