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

73 lines
4.8 KiB
Markdown

# 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`