Минимальный backend Amulet на Supabase: Postgres + RLS + Supabase Edge Functions (Deno).
Репозиторий содержит:
- схему БД (SQL / миграции);
- edge-функции с HTTP API, совместимым с мобильным клиентом;
- документацию по минимальной схеме;
- OpenAPI спецификацию и Swagger UI.
supabase/functions/*— Supabase Edge Functions:hugspairspatternsprofilepush-tokensusers
supabase/migrations/*— миграции/фиксы прав, индексов и RLS.doc/*— описание минимального backend'а и SQL-черновики.public/openapi_v1.yaml— OpenAPI спецификация.public/swagger.html— Swagger UI.
- OpenAPI:
public/openapi_v1.yaml - Swagger UI:
public/swagger.html
Чтобы открыть Swagger UI локально, поднимите простой статический сервер из папки public/:
python3 -m http.server --directory public 8000Затем откройте:
http://localhost:8000/swagger.html
Edge-функции проверяют пользователя через Supabase Auth и ожидают заголовок:
Authorization: Bearer <supabase_jwt>
Базовый URL проекта в Supabase:
https://<project-ref>.supabase.co/functions/v1
Ниже указаны пути после /functions/v1.
GET /users/users.mePATCH /users/users.meGET /users/by-id/{userId}
GET /profilePUT /profile
GET /patterns?public=true|false&hardwareVersion=<int>&kind=<string>POST /patternsGET /patterns/{id}PUT|PATCH /patterns/{id}DELETE /patterns/{id}GET /patterns/{id}/segmentsPUT|PATCH /patterns/{id}/segmentsGET /patterns/{id}/markersPUT /patterns/{id}/markers
GET /pairsPOST /pairs/invitePOST /pairs/acceptPOST /pairs/{id}/blockPOST /pairs/{id}/unblockPOST /pairs/{id}/deleteGET|PUT /pairs/{id}/emotionsGET|PUT /pairs/{id}/quick-repliesPUT /pairs/{id}/members/{userId}/settings
POST /hugs(также поддерживаетсяPOST /hugs/send)GET /hugs?limit=<int>GET /hugs/{id}PATCH /hugs/{id}PATCH|POST /hugs/{id}/status
POST /push-tokens
В текущей версии
push-tokensвозвращает принятый payload и не пишет его в БД.
Edge-функции читают конфигурацию из окружения Deno (Deno.env.get).
Пример набора переменных — в файле .env_example.
Можно задавать либо прямые переменные:
SUPABASE_URLSUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY(опционально)
Либо альтернативный набор (из которого вычисляется SUPABASE_URL и ключи):
APP_SUPABASE_PROJECT_REFAPP_SUPABASE_PUBLISHABLE_KEYAPP_SUPABASE_SECRET_KEY
ONESIGNAL_APP_IDONESIGNAL_API_KEY(в GitHub Actions может называться секретомONESIGNAL_REST_KEY— его нужно пробросить именно вONESIGNAL_API_KEY)ONESIGNAL_REST_URL(опционально, по умолчаниюhttps://onesignal.com/api/v1/notifications)
Требования:
- Node.js 22 (для
npxи CLI-инструментов) - Docker (если запускаете локальный Supabase)
Supabase CLI в этом проекте используется через npx:
npx supabase <команда>
В репозитории отсутствует
supabase/config.toml. Для локального запуска Supabase CLI может потребоваться инициализация (npx supabase init) или добавление конфига вручную.
npx supabase startМиграции лежат в supabase/migrations.
Для удалённой БД (например, в CI):
npx supabase db push --db-url "<postgres-connection-string>"npx supabase functions serve hugs --no-verify-jwtАналогично для остальных функций: patterns, pairs, profile, users, push-tokens.
- БД:
npx supabase db push --db-url ... - Edge Functions:
npx supabase functions deploy <name> --project-ref <project-ref>
В репозитории настроен GitHub Actions deploy: .github/workflows/deploy.yml.
doc/04_SUPABASE_MIN_BACKEND.md— описание минимальной схемы и ориентир по API.doc/20241211_min_backend_schema.sqlиdoc/20241211_auth_profiles_trigger.sql— SQL-версии минимальной схемы/триггера.
Папка public/ содержит OpenAPI (openapi_v1.yaml) и страницу Swagger UI (swagger.html).