32 lines
1.6 KiB
SQL
32 lines
1.6 KiB
SQL
-- ====================================================================
|
|
-- 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.';
|