Skip to content

nmanachinsky/amulet_backend

Repository files navigation

License

Amulet Backend

Минимальный backend Amulet на Supabase: Postgres + RLS + Supabase Edge Functions (Deno).

Репозиторий содержит:

  • схему БД (SQL / миграции);
  • edge-функции с HTTP API, совместимым с мобильным клиентом;
  • документацию по минимальной схеме;
  • OpenAPI спецификацию и Swagger UI.

Структура репозитория

  • supabase/functions/* — Supabase Edge Functions:
    • hugs
    • pairs
    • patterns
    • profile
    • push-tokens
    • users
  • supabase/migrations/* — миграции/фиксы прав, индексов и RLS.
  • doc/* — описание минимального backend'а и SQL-черновики.
  • public/openapi_v1.yaml — OpenAPI спецификация.
  • public/swagger.html — Swagger UI.

OpenAPI / 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>

HTTP API (Edge Functions)

Базовый URL проекта в Supabase:

  • https://<project-ref>.supabase.co/functions/v1

Ниже указаны пути после /functions/v1.

users

  • GET /users/users.me
  • PATCH /users/users.me
  • GET /users/by-id/{userId}

profile

  • GET /profile
  • PUT /profile

patterns

  • GET /patterns?public=true|false&hardwareVersion=<int>&kind=<string>
  • POST /patterns
  • GET /patterns/{id}
  • PUT|PATCH /patterns/{id}
  • DELETE /patterns/{id}
  • GET /patterns/{id}/segments
  • PUT|PATCH /patterns/{id}/segments
  • GET /patterns/{id}/markers
  • PUT /patterns/{id}/markers

pairs

  • GET /pairs
  • POST /pairs/invite
  • POST /pairs/accept
  • POST /pairs/{id}/block
  • POST /pairs/{id}/unblock
  • POST /pairs/{id}/delete
  • GET|PUT /pairs/{id}/emotions
  • GET|PUT /pairs/{id}/quick-replies
  • PUT /pairs/{id}/members/{userId}/settings

hugs

  • POST /hugs (также поддерживается POST /hugs/send)
  • GET /hugs?limit=<int>
  • GET /hugs/{id}
  • PATCH /hugs/{id}
  • PATCH|POST /hugs/{id}/status

push-tokens

  • POST /push-tokens

В текущей версии push-tokens возвращает принятый payload и не пишет его в БД.

Переменные окружения

Edge-функции читают конфигурацию из окружения Deno (Deno.env.get). Пример набора переменных — в файле .env_example.

Supabase

Можно задавать либо прямые переменные:

  • SUPABASE_URL
  • SUPABASE_ANON_KEY
  • SUPABASE_SERVICE_ROLE_KEY (опционально)

Либо альтернативный набор (из которого вычисляется SUPABASE_URL и ключи):

  • APP_SUPABASE_PROJECT_REF
  • APP_SUPABASE_PUBLISHABLE_KEY
  • APP_SUPABASE_SECRET_KEY

OneSignal (push для hugs)

  • ONESIGNAL_APP_ID
  • ONESIGNAL_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) или добавление конфига вручную.

Запуск локального Supabase

npx supabase start

Применение миграций

Миграции лежат в supabase/migrations.

Для удалённой БД (например, в CI):

npx supabase db push --db-url "<postgres-connection-string>"

Локальный запуск edge-функций

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).

About

Backend for Amulet on Supabase. Edge Functions (Deno), PostgreSQL, and OpenAPI. Features API for managing couples, tactile patterns, and sending "hugs" (IoT/Wearables).

Topics

Resources

License

Stars

Watchers

Forks

Contributors