Configuration
Supabase
Nucleify używa Supabase do PostgreSQL, Auth, Storage i Edge Functions. Schemat bazy i seedery są własnością modułów funkcjonalnych w shared_modules/nuc_*/supabase/ i scalane na poziomie monorepo pod supabase/.
Dostęp serwerowy z Nuxt idzie przez bramkę API Nitro — nie przez bezpośrednie wywołania service-role z przeglądarki. To samo dotyczy wygenerowanych shelli (Next, Solid): współdzielą tę samą instancję Supabase i ten sam model modułów.
Architektura
Przeglądarka
→ /api/* (web/src/server/api/[...slug].ts)
→ dispatchSupabaseApiGateway()
→ nuc_*/supabase/api/handle.ts
→ Supabase (PostgreSQL, Auth, Edge Functions)Rejestr bramki:
// shared_modules/nuc_api/supabase/api/gateway_dispatch.ts
export const supabaseApiGatewayHandlers = [
handleColorsApi,
handleLanguagesApi,
] as constDodawaj domeny przez implementację handle*Api i dopisanie do tej tablicy.
Środowisko
Ustaw w root .env (zob. Zmienne środowiskowe):
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
SUPABASE_EDGE_BASE=SUPABASE_KEY— eksponowany klientowi przezruntimeConfig.publicSUPABASE_SERVICE_ROLE_KEY— tylko serwer, używany przez bramkę Nitro
Układ SQL modułu
Każdy moduł może dostarczać artefakty SQL:
shared_modules/nuc_example/supabase/
├── api/
│ ├── handle.ts
│ └── example_handlers.ts
├── migrations/ # zmiany schematu (*.sql)
├── factories/ # SQL factory dla dev/test
└── seeders/ # dane seed (*.sql)Przykłady w monorepo:
nuc_colors/supabase/migrations/,seeders/,factories/nuc_languages/supabase/migrations/
Merge i skrypty apply
SQL modułów scala się do projektu Supabase monorepo skryptami bash w .config/bash/:
| Skrypt | Komenda |
|---|---|
| Merge całego SQL modułów | pnpm supabase:merge-sql |
| Apply migracji (local) | pnpm supabase:migrations:apply:local |
| Apply migracji (linked remote) | pnpm supabase:migrations:apply:linked |
| Apply factories (local) | pnpm supabase:factories:apply:local |
| Apply seeders (local) | pnpm supabase:seeders:apply:local |
| Pełny setup local | pnpm supabase:setup:local |
| Pełny setup linked | pnpm supabase:setup:linked |
Implementacja:
.config/bash/merge-module-supabase-sql.sh— zbiera SQL modułów.config/bash/apply-module-migrations.sh— uruchamia migracje.config/bash/apply-module-sql.sh— uruchamia factories/seeders
Pisanie handlerów API
Wejście bramki (handle.ts)
import { apiNotHandled, apiMethodNotAllowed } from 'nuc_api'
import type { ApiContext, ApiHandlerResult } from 'nuc_server'
export async function handleExampleApi(ctx: ApiContext): Promise<ApiHandlerResult> {
if (ctx.segments[0] !== 'example') return apiNotHandled()
// dispatch do tabeli tras …
return apiMethodNotAllowed()
}Zwróć apiNotHandled(), gdy prefiks ścieżki nie pasuje — bramka próbuje kolejnego handlera.
Trasy z auth
Używaj helperów z nuc_api:
import { withGatewayUser } from 'nuc_api'
return withGatewayUser(ctx, async (gatewayCtx, userId) => {
// userId dostępny dla zapytań w zakresie RLS
})Requesty klienta
Używaj narzędzi requestów nuc_api z frontendu:
import { apiRequest } from 'modules/nuc_api/utils/api_request'Nigdy nie osadzaj klucza service role w kodzie klienta.
Row Level Security
Włącz RLS na tabelach eksponowanych przez PostgREST. Dodaj polityki dla roli authenticated. Migracje modułów powinny zawierać polityki obok definicji tabel.
Testuj polityki zarówno na kliencie anon, jak i authenticated przed shipem.
Edge Functions
Funkcje edge modułu żyją pod shared_modules/nuc_*/supabase/functions/. Przykład:
shared_modules/nuc_colors/supabase/functions/user-colors/index.tsSUPABASE_EDGE_BASE w .env domyślnie wskazuje na {SUPABASE_URL}/functions/v1.
Lokalny workflow developerski
- Zainstaluj Supabase CLI i uruchom lokalny stack (lub zlinkuj remote)
- Skonfiguruj root
.envz URL i kluczami projektu - Zaaplikuj scalony SQL:
pnpm supabase:setup:local- Uruchom Nuxt:
make web- Zweryfikuj bramkę:
curl http://localhost:3000/api
curl http://localhost:3000/api/colors/… # trasy konkretnego modułuKatalog monorepo supabase/
Top-level supabase/ trzyma config projektu, scalony output migracji i wspólną konfigurację edge — wypełniany skryptami merge ze źródeł modułów.
Powiązana dokumentacja
- Moduły — struktura modułu i rejestracja bramki
- Zmienne środowiskowe — zmienne Supabase
- Web & Admin — punkt wejścia bramki Nitro