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 files = fs.readdirSync(BACKUP_DIR);
|
||||||
const backups: BackupInfo[] = [];
|
const backups: BackupInfo[] = [];
|
||||||
|
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
const filePath = path.join(BACKUP_DIR, file);
|
const filePath = path.join(BACKUP_DIR, file);
|
||||||
const stat = fs.statSync(filePath);
|
|
||||||
|
|
||||||
if (stat.isFile()) {
|
try {
|
||||||
const timestamp = file.replace('backup-', '').replace('.tar.gz', '');
|
const stat = fs.statSync(filePath);
|
||||||
backups.push({
|
|
||||||
id: file.replace('.tar.gz', ''),
|
if (stat.isFile() && (file.endsWith('.tar.gz') || file.includes('backup-'))) {
|
||||||
timestamp: new Date(timestamp.replace(/-/g, ':')).toISOString(),
|
// Extrair timestamp do nome do arquivo
|
||||||
date: new Date(timestamp.replace(/-/g, ':')).toLocaleDateString('pt-BR'),
|
const timestamp = file
|
||||||
size: stat.size,
|
.replace('backup-', '')
|
||||||
filename: file,
|
.replace('.tar.gz', '')
|
||||||
status: 'success',
|
.trim();
|
||||||
message: 'Backup disponível'
|
|
||||||
});
|
// 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(
|
return NextResponse.json(
|
||||||
{
|
{
|
||||||
success: false,
|
success: false,
|
||||||
error: (error as Error).message
|
error: (error as Error).message,
|
||||||
|
backups: [],
|
||||||
|
count: 0
|
||||||
},
|
},
|
||||||
{ status: 500 }
|
{ status: 500 }
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user