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>
73 lines
4.8 KiB
Markdown
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`
|