fix: improve backup GET endpoint error handling and date parsing
This commit is contained in:
@@ -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 }
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user