server/docs/infra/api_grensesnitt.md
vegard a5985ef3f8 Dokumentasjon, erfaringslogg, migrasjoner og infra-oppdateringer
- Omorganiser docs/: konsepter, features, infra og proposals i egne mapper
- Ny docs/erfaringer/ med lærdommer fra chat-implementering (Svelte 5, SpacetimeDB, adapter-mønster)
- Oppdater ARCHITECTURE.md: Lag 1 status, ny §10 Erfaringslogg, SpacetimeDB i lokal dev
- Oppdater synkronisering.md med implementeringsstatus og designvalg
- Oppdater lokal.md med SpacetimeDB og AI Gateway
- Utvid PG-skjema med channels, messages, media_files, message_revisions
- Legg til seed_dev.sql, migration_safety.md, .env.example
- Nye feature-specs: chat, kanban, whiteboard, live_ai, lydmeldinger m.fl.
- Nye konsept-specs: studioet, møterommet, redaksjonen, den asynkrone gjesten m.fl.
- SpacetimeDB og AI Gateway i docker-compose.dev.yml
- collect-docs.sh inkluderer erfaringer/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 01:40:14 +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