Next.js-приложение: схема БД (React Flow), таблицы через API, Storage, бэкап.
Разбор ESZIP (тело Edge Function из Management API) вынесен в packages/edge-eszip внутри этого приложения. Зависимость в package.json: file:./packages/edge-eszip. После правок исходников там выполните npm run build в каталоге пакета (или сработает prepare при npm install).
Соседние пакеты монорепозитория могут переиспользовать тот же каталог, указав в package.json зависимость вида file:../<каталог_этого_приложения>/packages/edge-eszip.
npm install
cp env.example .env
# заполните .env
npm run devСборка с генерацией src/config/*.json из БД: npm run build (нужны DB_* в .env).
| Путь | Содержимое |
|---|---|
/ |
Редирект на /schema |
/schema |
Схема таблиц (React Flow), модалки данных |
/files |
Storage (файловый менеджер) |
/backup |
Бэкап: список снимков, галки слоёв, лог |
Шапка с переключателями одна и та же (AppHeader): ссылки ведут на эти URL, активный пункт подсвечивается по usePathname().
| Переменная | Назначение |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
URL проекта Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Публичный ключ (клиент) |
SUPABASE_SERVICE_ROLE_KEY |
Service role только на сервере — таблицы, Storage, слой «данные» в бэкапе |
DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_DATABASE |
Подключение для extract-pg-schema при сборке |
DISPLAY_FIELD_PRIORITY |
Приоритет полей для отображения FK |
Полный шаблон: env.example.
- Страница
/backup: список снимков на диске, выбор слоёв, лог. - В карточке списка есть ссылка «Отдельная страница» на
/backup(актуально при встраивании виджета куда-либо ещё).
В UI выбираются слои: данные таблиц, Storage, Edge Functions, схема БД (DDL). Запрос уходит на POST /api/backup/run с JSON-телом; ключи не покидают сервер. Список папок: GET /api/backup/list.
| Переменная | Когда нужна |
|---|---|
SUPABASE_PROJECT_NAME / NEXT_PUBLIC_SUPABASE_PROJECT_NAME |
Имя папки снимка {имя}_{timestamp} |
BACKUP_OUTPUT_DIR |
Абсолютный или относительный каталог для снимков; иначе ./backups |
SUPABASE_ACCESS_TOKEN |
Слой Edge Functions (Management API) |
DATABASE_URL |
Слой «Схема БД»: pg_dump в PATH + строка Postgres (Direct / session, обычно порт 5432) |
SCHEMA_DUMP_SCHEMES |
Схемы для pg_dump, по умолчанию public |
Снимки по умолчанию в ./backups/ (каталог в .gitignore).
В src/config/ лежит нейтральный пример: одна таблица demo_items (tables.json, schema.json, пустые relations.json и foreignKeyMap.json). После npm run build файлы перезапишутся из вашей БД по DB_*.
Создайте таблицу в Supabase (SQL Editor), затем либо откройте схему в UI (список таблиц подтянется из Postgres), либо выполните сборку:
create table if not exists public.demo_items (
id uuid primary key default gen_random_uuid(),
title text not null default '',
body text not null default '',
meta jsonb,
is_active boolean not null default true,
created_at timestamptz not null default now()
);Серверные маршруты таблиц используют service role и обходят RLS; для клиента (TableModal / прямой anon) настройте политики отдельно.
- Данные таблиц — все таблицы из
config/tables.json, постранично через service role. - Storage — все бакеты; большие деревья обходятся с пагинацией списка.
- Edge — без токена слой в логе будет «пропуск».
- DDL — без
DATABASE_URLили безpg_dumpв системе слой не выполнится; в логе будет причина.