feat(backups): Add backup import API and improve backup download/import flow in UI
This commit is contained in:
@@ -243,6 +243,45 @@ export class ApiService {
|
||||
return `/api/backups/${backupId}/download`;
|
||||
}
|
||||
|
||||
async downloadBackup(backupId: number, filename: string): Promise<void> {
|
||||
const token = localStorage.getItem('onebox_token');
|
||||
const response = await fetch(`/api/backups/${backupId}/download`, {
|
||||
headers: token ? { Authorization: `Bearer ${token}` } : {},
|
||||
});
|
||||
if (!response.ok) {
|
||||
throw new Error('Download failed');
|
||||
}
|
||||
const blob = await response.blob();
|
||||
const url = URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
URL.revokeObjectURL(url);
|
||||
}
|
||||
|
||||
async importBackupFromFile(file: File, newServiceName?: string): Promise<IApiResponse<IRestoreResult>> {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
if (newServiceName) {
|
||||
formData.append('newServiceName', newServiceName);
|
||||
}
|
||||
return firstValueFrom(
|
||||
this.http.post<IApiResponse<IRestoreResult>>('/api/backups/import', formData)
|
||||
);
|
||||
}
|
||||
|
||||
async importBackupFromUrl(url: string, newServiceName?: string): Promise<IApiResponse<IRestoreResult>> {
|
||||
return firstValueFrom(
|
||||
this.http.post<IApiResponse<IRestoreResult>>('/api/backups/import', {
|
||||
url,
|
||||
newServiceName,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
async restoreBackup(backupId: number, options: IRestoreOptions): Promise<IApiResponse<IRestoreResult>> {
|
||||
return firstValueFrom(
|
||||
this.http.post<IApiResponse<IRestoreResult>>('/api/backups/restore', {
|
||||
|
||||
Reference in New Issue
Block a user