politiker

Projektkontext

Senast verifierad: 2026-09-30

Ansvar

Politiker är en stateful Cloudflare Worker-applikation för:

Den kodnära current-state-källan är app/wrangler.jsonc, app/src/ och D1-migrationerna under infra/migrations/.

Runtime

app/wrangler.jsonc definierar:

Kodansvar

Accesslager

app/src/access-index.ts är extern requestgräns och ligger framför den huvudsakliga applikationslogiken/assets.

Applikationslager

app/src/index.ts hanterar bland annat auth, konton, API-nycklar, kontaktdata, brev, bilagor, utskick, queue-konsumtion, feedback och adminfunktioner.

State ownership

D1

Canonical application state, inklusive data som måste överleva enskilda Worker-invocations.

Det gemensamma offentliga mottagarregistret ligger i public_contacts. area_type skiljer bland annat politiska nivåer, media och academia. Akademiska poster kan dessutom bära organisation, unit, title, academic_field och source_url. De tre aktuella akademiska fälten är statsvetenskap, offentlig förvaltning och offentlig rätt/förvaltningsrätt.

Kommun-/regionkopplingar till nämnder och styrelser ligger i public_contact_assignments. Migration 0003_generalize_public_contacts.sql skapade temporära legacy-vyer för de tidigare tabellnamnen under cutover. Efter att current Worker och kontaktverktygen flyttat helt till canonical public_contacts / public_contact_assignments tar migration 0005_drop_public_contact_legacy_views.sql bort endast dessa två views och den begränsade compatibility-triggern. HTTP-aliaset /api/politicians/search påverkas inte.

Kontobundna återanvändbara brevinledningar ligger i letter_intro_presets. Rubriken lagras som metadata medan inledningstexten krypteras med samma applikationsgräns som brevdata. Vid utskick snapshots den valda sammansatta inledningen krypterat på send_jobs.intro_text, så senare ändringar i en mall inte påverkar ett redan startat utskick. Retentionflödet raderar även denna snapshot tillsammans med brevets innehåll.

KV

Sessionsstate. KV ska inte användas som ersättning för relationell canonical data.

R2

Bilagor och objektdata. Objektinnehåll ska inte flyttas in i loggning eller dokumentation.

Queue och DLQ

Asynkront leveransarbete. Queue-state kompletterar persistent jobbstate; det ersätter det inte.

Durable Object

CredentialRateLimiter är serialiserad koordinationspunkt för credential-/mailkontobaserad leveranstakt. Detta får inte ersättas av oserialiserad processlokal state.

Migrationer

D1-migrationer ligger i infra/migrations/. Wrangler pekar explicit på den katalogen och migrations-tabellen.

Schemaändringar ska göras som versionerade migrationer.

Secrets och credentials

Kod och docs får beskriva secret-namn och ansvar men aldrig värden. Credentialflöden ska behålla sina avsedda krypterings- och runtimegränser.

Tema

legacy är det äldre uttrycket och fortsatt fallback: mörk bas, cyan/blå/violett/magenta glow och diskret 42 px-rutnät. forest (visas som portalen) och blackout är de övriga gemensamma yttemana. Politiker behåller samtidigt sin svenska gul/blå branding, funktionella statusfärger, typografi och informationsarkitektur som produktidentitet i alla tre teman.

Temavalet följer det gemensamma presentationskontraktet localStorage["<prefix>.theme"] och cookien <prefix>_theme (prefix och delad domän sätts vid deploy). Temaväljaren ligger vid sidans nederkant på de primära publika ytorna så att den inte konkurrerar med huvudnavigation och sessionskontroller. De publika sidorna exponerar även en PWA-bas (manifest, befintliga 192/512-ikoner och network-only service worker) för installation/store-packaging utan att flytta sessions-, D1-, Queue-, R2- eller credentialstate till klientcache. Den preferensen är kosmetisk och får aldrig påverka konto-, sessions-, auth-, recipient- eller utskicksstate.

Observability

Persistent logs/traces är aktiverade med sampling och query-string-redaction. Auth-/API-flöden kan bära känsliga parametrar; redaction är därför en driftinvariant.

Dokumentationsgräns

Denna fil dokumenterar repo-specifik current-state. Privata operativa detaljer hör inte hemma här.

Uppdateringskontrakt

Uppdatera filen när bindings, queue-/rate-limitmodell, D1-schema, authmodell, storage, cron eller deploymentmodell ändras.