mirror of
https://github.com/zvx-echo6/central.git
synced 2026-05-21 18:14:44 +02:00
64 lines
2 KiB
MySQL
64 lines
2 KiB
MySQL
|
|
-- Migration: 001_create_config_schema
|
||
|
|
-- Creates the config schema with adapters and api_keys tables.
|
||
|
|
-- Also seeds the NWS adapter row from current TOML config.
|
||
|
|
|
||
|
|
-- Create config schema
|
||
|
|
CREATE SCHEMA config;
|
||
|
|
|
||
|
|
-- Adapters configuration table
|
||
|
|
CREATE TABLE config.adapters (
|
||
|
|
name TEXT PRIMARY KEY,
|
||
|
|
enabled BOOLEAN NOT NULL DEFAULT true,
|
||
|
|
cadence_s INTEGER NOT NULL,
|
||
|
|
settings JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
|
|
paused_at TIMESTAMPTZ,
|
||
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- API keys table (encrypted values)
|
||
|
|
CREATE TABLE config.api_keys (
|
||
|
|
alias TEXT PRIMARY KEY,
|
||
|
|
encrypted_value BYTEA NOT NULL,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||
|
|
rotated_at TIMESTAMPTZ,
|
||
|
|
last_used_at TIMESTAMPTZ
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Notify function for config changes
|
||
|
|
CREATE OR REPLACE FUNCTION config.notify_config_change()
|
||
|
|
RETURNS trigger AS $$
|
||
|
|
DECLARE
|
||
|
|
key_value TEXT;
|
||
|
|
BEGIN
|
||
|
|
-- Handle different table structures
|
||
|
|
IF TG_TABLE_NAME = 'adapters' THEN
|
||
|
|
key_value := COALESCE(NEW.name, OLD.name, '');
|
||
|
|
ELSIF TG_TABLE_NAME = 'api_keys' THEN
|
||
|
|
key_value := COALESCE(NEW.alias, OLD.alias, '');
|
||
|
|
ELSE
|
||
|
|
key_value := '';
|
||
|
|
END IF;
|
||
|
|
|
||
|
|
PERFORM pg_notify('config_changed', TG_TABLE_NAME || ':' || key_value);
|
||
|
|
RETURN COALESCE(NEW, OLD);
|
||
|
|
END;
|
||
|
|
$$ LANGUAGE plpgsql;
|
||
|
|
|
||
|
|
-- Trigger for adapters table
|
||
|
|
CREATE TRIGGER adapters_notify
|
||
|
|
AFTER INSERT OR UPDATE OR DELETE ON config.adapters
|
||
|
|
FOR EACH ROW EXECUTE FUNCTION config.notify_config_change();
|
||
|
|
|
||
|
|
-- Trigger for api_keys table
|
||
|
|
CREATE TRIGGER api_keys_notify
|
||
|
|
AFTER INSERT OR UPDATE OR DELETE ON config.api_keys
|
||
|
|
FOR EACH ROW EXECUTE FUNCTION config.notify_config_change();
|
||
|
|
|
||
|
|
-- Seed NWS adapter from current TOML config values
|
||
|
|
INSERT INTO config.adapters (name, enabled, cadence_s, settings)
|
||
|
|
VALUES (
|
||
|
|
'nws',
|
||
|
|
true,
|
||
|
|
60,
|
||
|
|
'{"states": ["ID", "OR", "WA", "MT", "WY", "UT", "NV"], "contact_email": "mj@k7zvx.com"}'::jsonb
|
||
|
|
);
|