synops/docs/infra/api_grensesnitt.md
vegard 0a467066ba Synops v2: arkitektur, retninger og dokumentasjon
Nystart basert på arkitektonisk innsikt fra Sidelinja v1.
Koden er ny, visjon og primitiver er validert gjennom tidligere arbeid.

Inneholder:
- Komplett arkitekturdokumentasjon (docs/arkitektur.md)
- 6 vedtatte retninger (docs/retninger/)
- Alle concepts, features, proposals og erfaringer fra v1
- Server-oppsett og drift (docs/setup/)
- LiteLLM-konfigurasjon (API-nøkler via env)
- Editor.svelte referanse fra v1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 06:43:08 +01:00

4.8 KiB

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