import React, { useEffect, useState } from 'react'; import { backendApi } from '../../services/apiClient'; import { DatabaseBackup, Loader2, Download } from 'lucide-react'; type BackupItem = { filename: string; createdAt: string }; export const BackupsSection: React.FC = () => { const [backups, setBackups] = useState([]); const [loading, setLoading] = useState(true); const [creating, setCreating] = useState(false); const [error, setError] = useState(null); const load = async () => { setLoading(true); setError(null); try { const list = await backendApi.getBackups(); setBackups(list); } catch (e: any) { setError(e?.message || 'Ошибка загрузки списка'); } finally { setLoading(false); } }; useEffect(() => { load(); }, []); const handleCreate = async () => { setCreating(true); setError(null); try { await backendApi.createBackup(); await load(); } catch (e: any) { setError(e?.message || 'Ошибка создания резервной копии'); } finally { setCreating(false); } }; const formatDate = (iso: string) => { try { const d = new Date(iso); return d.toLocaleString('ru-RU', { day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit', }); } catch { return iso; } }; return (

Резервные копии БД

Создаётся дамп PostgreSQL (pg_dump). Убедитесь, что pg_dump доступен на сервере (PostgreSQL bin в PATH).

{error && (
{error}
)} {loading ? (
) : (
{backups.length === 0 ? ( ) : ( backups.map((b) => ( )) )}
Файл Дата создания Действие
Резервных копий пока нет. Нажмите «Создать резервную копию».
{b.filename} {formatDate(b.createdAt)} Скачать
)}
); };