import { apiClient } from '../client' export interface BackupS3Config { endpoint: string region: string bucket: string access_key_id: string secret_access_key?: string prefix: string force_path_style: boolean } export interface BackupScheduleConfig { enabled: boolean cron_expr: string retain_days: number retain_count: number } export interface BackupRecord { id: string status: 'pending' | 'running' | 'completed' | 'failed' backup_type: string file_name: string s3_key: string size_bytes: number triggered_by: string error_message?: string started_at: string finished_at?: string expires_at?: string } export interface CreateBackupRequest { expire_days?: number } export interface TestS3Response { ok: boolean message: string } // S3 Config export async function getS3Config(): Promise { const { data } = await apiClient.get('/admin/backups/s3-config') return data } export async function updateS3Config(config: BackupS3Config): Promise { const { data } = await apiClient.put('/admin/backups/s3-config', config) return data } export async function testS3Connection(config: BackupS3Config): Promise { const { data } = await apiClient.post('/admin/backups/s3-config/test', config) return data } // Schedule export async function getSchedule(): Promise { const { data } = await apiClient.get('/admin/backups/schedule') return data } export async function updateSchedule(config: BackupScheduleConfig): Promise { const { data } = await apiClient.put('/admin/backups/schedule', config) return data } // Backup operations export async function createBackup(req?: CreateBackupRequest): Promise { const { data } = await apiClient.post('/admin/backups', req || {}, { timeout: 600000 }) return data } export async function listBackups(): Promise<{ items: BackupRecord[] }> { const { data } = await apiClient.get<{ items: BackupRecord[] }>('/admin/backups') return data } export async function getBackup(id: string): Promise { const { data } = await apiClient.get(`/admin/backups/${id}`) return data } export async function deleteBackup(id: string): Promise { await apiClient.delete(`/admin/backups/${id}`) } export async function getDownloadURL(id: string): Promise<{ url: string }> { const { data } = await apiClient.get<{ url: string }>(`/admin/backups/${id}/download-url`) return data } // Restore export async function restoreBackup(id: string): Promise { await apiClient.post(`/admin/backups/${id}/restore`, {}, { timeout: 600000 }) } export const backupAPI = { getS3Config, updateS3Config, testS3Connection, getSchedule, updateSchedule, createBackup, listBackups, getBackup, deleteBackup, getDownloadURL, restoreBackup, } export default backupAPI