Skip to content

slopman/supatool

Repository files navigation

Supatool

Next.js-приложение: схема БД (React Flow), таблицы через API, Storage, бэкап.

Локальный пакет edge-eszip

Разбор 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).

Маршруты (App Router)

Путь Содержимое
/ Редирект на /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).

Шаблон репозитория (demo_items)

В 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 в системе слой не выполнится; в логе будет причина.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages