# Infrastruktur: API-grensesnitt og Tjenesteansvar **Filsti:** `docs/infra/api_grensesnitt.md` ## 1. Konsept Definerer hvordan SvelteKit-frontenden kommuniserer med backend-tjenestene. Prinsippet er: **SvelteKit er web-serveren, Rust er workeren.** Ingen separat Rust HTTP API. ## 2. Kommunikasjonskart ``` ┌─────────────────────────────────────────────────────────────┐ │ Brukerens nettleser (SvelteKit klient) │ └──────────┬──────────────────────┬───────────────────────────┘ │ │ │ WebSocket │ HTTP (forms, fetch) ▼ ▼ ┌──────────────────┐ ┌─────────────────────────────────────┐ │ SpacetimeDB │ │ SvelteKit Server │ │ │ │ (load functions, form actions, │ │ - Chat │ │ API routes) │ │ - Kanban │ │ │ │ - Live events │ │ Ansvar: │ │ - Autocomplete │ │ - Les/skriv PostgreSQL direkte │ │ - Studio- │ │ - Opprett jobber i job_queue │ │ markører │ │ - Filopplasting (streaming) │ │ │ │ - RSS-generering │ │ │ │ - Kunnskapsgraf-spørringer │ └──────────────────┘ └──────────────┬───────────────────────┘ │ │ SQL ▼ ┌──────────────────────────┐ │ PostgreSQL │ │ │ │ - Kunnskapsgraf │ │ - Episodemetadata │ │ - Statistikk │ │ - Jobbkø (job_queue) │ │ - Brukerdata │ └──────────────┬────────────┘ │ │ Poll (SELECT FOR UPDATE) ▼ ┌──────────────────────────┐ │ Rust Workers │ │ │ │ - whisper_transcribe │ │ - openrouter_analyze │ │ - research_clip │ │ - stats_parse │ │ - sync_to_pg (SpaceDB→PG)│ └──────────────────────────┘ ``` ## 3. Ansvarsfordeling | Komponent | Rolle | Snakker med | |---|---|---| | **SvelteKit (klient)** | UI, brukerinteraksjon | SpacetimeDB (WS), SvelteKit server (HTTP) | | **SvelteKit (server)** | Web-API, PG-tilgang, jobb-trigger | PostgreSQL (SQL) | | **SpacetimeDB** | Sanntids state, push til klienter | Klienter (WS), sync-worker (intern) | | **Rust Workers** | Tunge bakgrunnsjobber, synk | PostgreSQL (SQL), SpacetimeDB, OpenRouter, faster-whisper | ## 4. Viktige avklaringer - **Rust er ikke en API-server.** Rust kjører kun som workers/prosessorer som poller jobbkøen - **SvelteKit server-side er trygt.** Load functions og form actions kjører på serveren og kan snakke direkte med PG uten sikkerhetsproblemer - **Filopplasting** håndteres av SvelteKit (streaming for store filer), som lagrer filen på disk og oppretter en jobb i køen - **SpacetimeDB nås aldri via SvelteKit server** — kun direkte fra klienten via WebSocket ## 5. Instruks for Claude Code - Ikke opprett et separat Rust HTTP API/webserver-prosjekt - Bruk SvelteKit `+server.ts` (API routes) eller `+page.server.ts` (form actions/load) for all HTTP-kommunikasjon - Rust-kode skal struktureres som worker-binærer som konsumerer fra `job_queue` - For PG-tilgang i SvelteKit, bruk et bibliotek som `postgres.js` eller `drizzle-orm`