-- ==================================================================== -- 0042_license — License-Foundation -- ==================================================================== -- Speichert pro Instanz/Mandant einen signierten License-JWT. Inhalt: -- - tier (free/starter/business/enterprise) -- - max_employees, ma_overage_price_eur -- - enabled modules + per-module limits -- - hosting (cloud | self-hosted), branding_level -- - exp -- -- Der JWT wird im Application-Code per public key validiert (lib/ -- license.ts). Bei fehlendem oder ungueltigem Key faellt die Instanz -- auf Free-Tier-Defaults zurueck (10 MA, Core only). -- -- license_status ist ein gecachter Wert ('active' | 'grace' | 'expired' -- | 'invalid'), license_checked_at der letzte Pruef-Zeitpunkt. Beides -- nicht-load-bearing — wird beim periodischen Check refresht. Idee: -- Render-Pages koennen ohne JWT-Decode den Status anzeigen. -- -------------------------------------------------------------------- alter table public.site_settings add column if not exists license_key text, add column if not exists license_status text, add column if not exists license_checked_at timestamptz; comment on column public.site_settings.license_key is 'Signierter License-JWT (RS256). Wird per lib/license.ts gegen den Public Key validiert. NULL → Free-Tier-Defaults.'; comment on column public.site_settings.license_status is 'Gecachter Status: active | grace | expired | invalid | null. Wird beim periodischen Check aktualisiert.'; comment on column public.site_settings.license_checked_at is 'Letzter Validierungs-Zeitpunkt. Wird genutzt um Refresh-Cycles zu drosseln.';