fix: improve backup GET endpoint error handling and date parsing

This commit is contained in:
Erik
2025-11-29 12:42:17 -03:00
parent ae8639bb2f
commit 1600cc8267

View File

@@ -193,24 +193,65 @@ export async function GET(request: NextRequest) {
// );
// }
// Verificar se pasta existe
if (!fs.existsSync(BACKUP_DIR)) {
console.log('[BACKUP] Pasta de backups não existe, criando...');
fs.mkdirSync(BACKUP_DIR, { recursive: true });
return NextResponse.json({
success: true,
backups: [],
count: 0
});
}
const files = fs.readdirSync(BACKUP_DIR);
const backups: BackupInfo[] = [];
for (const file of files) {
const filePath = path.join(BACKUP_DIR, file);
const stat = fs.statSync(filePath);
try {
const stat = fs.statSync(filePath);
if (stat.isFile()) {
const timestamp = file.replace('backup-', '').replace('.tar.gz', '');
backups.push({
id: file.replace('.tar.gz', ''),
timestamp: new Date(timestamp.replace(/-/g, ':')).toISOString(),
date: new Date(timestamp.replace(/-/g, ':')).toLocaleDateString('pt-BR'),
size: stat.size,
filename: file,
status: 'success',
message: 'Backup disponível'
});
if (stat.isFile() && (file.endsWith('.tar.gz') || file.includes('backup-'))) {
// Extrair timestamp do nome do arquivo
const timestamp = file
.replace('backup-', '')
.replace('.tar.gz', '')
.trim();
// Tentar fazer parse da data de forma mais robusta
let parsedDate = new Date();
try {
// Formato esperado: 2025-11-29-10-30-45
const dateParts = timestamp.split('-');
if (dateParts.length >= 3) {
const year = parseInt(dateParts[0]);
const month = parseInt(dateParts[1]) - 1; // Mês é 0-indexed
const day = parseInt(dateParts[2]);
const hour = dateParts[3] ? parseInt(dateParts[3]) : 0;
const min = dateParts[4] ? parseInt(dateParts[4]) : 0;
const sec = dateParts[5] ? parseInt(dateParts[5]) : 0;
parsedDate = new Date(year, month, day, hour, min, sec);
}
} catch (e) {
console.log('[BACKUP] Erro ao fazer parse da data:', timestamp);
parsedDate = new Date(stat.mtime);
}
backups.push({
id: file.replace('.tar.gz', ''),
timestamp: parsedDate.toISOString(),
date: parsedDate.toLocaleDateString('pt-BR'),
size: stat.size,
filename: file,
status: 'success',
message: 'Backup disponível'
});
}
} catch (fileError) {
console.warn('[BACKUP] Erro ao processar arquivo:', file, fileError);
}
}
@@ -227,7 +268,9 @@ export async function GET(request: NextRequest) {
return NextResponse.json(
{
success: false,
error: (error as Error).message
error: (error as Error).message,
backups: [],
count: 0
},
{ status: 500 }
);