68 lines
3.2 KiB
SQL
68 lines
3.2 KiB
SQL
-- Migration: Action
|
|
-- Description: Creates action table (with is_adhoc from start)
|
|
-- Version: 20250101000005
|
|
|
|
-- ============================================================================
|
|
-- ACTION TABLE
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE action (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
ref TEXT NOT NULL UNIQUE,
|
|
pack BIGINT NOT NULL REFERENCES pack(id) ON DELETE CASCADE,
|
|
pack_ref TEXT NOT NULL,
|
|
label TEXT NOT NULL,
|
|
description TEXT NOT NULL,
|
|
entrypoint TEXT NOT NULL,
|
|
runtime BIGINT REFERENCES runtime(id),
|
|
param_schema JSONB,
|
|
out_schema JSONB,
|
|
parameter_delivery TEXT NOT NULL DEFAULT 'stdin' CHECK (parameter_delivery IN ('stdin', 'file')),
|
|
parameter_format TEXT NOT NULL DEFAULT 'json' CHECK (parameter_format IN ('dotenv', 'json', 'yaml')),
|
|
is_adhoc BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
-- Constraints
|
|
CONSTRAINT action_ref_lowercase CHECK (ref = LOWER(ref)),
|
|
CONSTRAINT action_ref_format CHECK (ref ~ '^[^.]+\.[^.]+$')
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX idx_action_ref ON action(ref);
|
|
CREATE INDEX idx_action_pack ON action(pack);
|
|
CREATE INDEX idx_action_runtime ON action(runtime);
|
|
CREATE INDEX idx_action_parameter_delivery ON action(parameter_delivery);
|
|
CREATE INDEX idx_action_parameter_format ON action(parameter_format);
|
|
CREATE INDEX idx_action_is_adhoc ON action(is_adhoc) WHERE is_adhoc = true;
|
|
CREATE INDEX idx_action_created ON action(created DESC);
|
|
|
|
-- Trigger
|
|
CREATE TRIGGER update_action_updated
|
|
BEFORE UPDATE ON action
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_column();
|
|
|
|
-- Comments
|
|
COMMENT ON TABLE action IS 'Actions are executable tasks that can be triggered';
|
|
COMMENT ON COLUMN action.ref IS 'Unique action reference (format: pack.name)';
|
|
COMMENT ON COLUMN action.pack IS 'Pack this action belongs to';
|
|
COMMENT ON COLUMN action.label IS 'Human-readable action name';
|
|
COMMENT ON COLUMN action.entrypoint IS 'Script or command to execute';
|
|
COMMENT ON COLUMN action.runtime IS 'Runtime environment for execution';
|
|
COMMENT ON COLUMN action.param_schema IS 'JSON schema for action parameters';
|
|
COMMENT ON COLUMN action.out_schema IS 'JSON schema for action output';
|
|
COMMENT ON COLUMN action.parameter_delivery IS 'How parameters are delivered: stdin (standard input - secure), file (temporary file - secure for large payloads). Environment variables are set separately via execution.env_vars.';
|
|
COMMENT ON COLUMN action.parameter_format IS 'Parameter serialization format: json (JSON object - default), dotenv (KEY=''VALUE''), yaml (YAML format)';
|
|
COMMENT ON COLUMN action.is_adhoc IS 'True if action was manually created (ad-hoc), false if installed from pack';
|
|
|
|
-- ============================================================================
|
|
|
|
-- Add foreign key constraint for policy table
|
|
ALTER TABLE policy
|
|
ADD CONSTRAINT policy_action_fkey
|
|
FOREIGN KEY (action) REFERENCES action(id) ON DELETE CASCADE;
|
|
|
|
-- Note: Foreign key constraints for key table (key_owner_action_fkey, key_owner_sensor_fkey)
|
|
-- will be added in migration 20250101000009_keys_artifacts.sql after the key table is created
|