224 lines
5.3 KiB
PL/PgSQL
224 lines
5.3 KiB
PL/PgSQL
-- Migration: Initial Setup
|
|
-- Description: Creates the attune schema, enums, and shared database functions
|
|
-- Version: 20250101000001
|
|
|
|
-- ============================================================================
|
|
-- SCHEMA AND ROLE SETUP
|
|
-- ============================================================================
|
|
|
|
-- Create the attune schema
|
|
-- NOTE: For tests, the test schema is created separately. For production, uncomment below:
|
|
-- CREATE SCHEMA IF NOT EXISTS attune;
|
|
|
|
-- Set search path (now set via connection pool configuration)
|
|
|
|
-- Create service role for the application
|
|
-- NOTE: Commented out for tests, uncomment for production:
|
|
-- DO $$
|
|
-- BEGIN
|
|
-- IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'svc_attune') THEN
|
|
-- CREATE ROLE svc_attune WITH LOGIN PASSWORD 'attune_service_password';
|
|
-- END IF;
|
|
-- END
|
|
-- $$;
|
|
|
|
-- Grant usage on schema
|
|
-- NOTE: Commented out for tests, uncomment for production:
|
|
-- GRANT USAGE ON SCHEMA attune TO svc_attune;
|
|
-- GRANT CREATE ON SCHEMA attune TO svc_attune;
|
|
|
|
-- Enable required extensions
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
|
|
|
-- COMMENT ON SCHEMA attune IS 'Attune automation platform schema';
|
|
|
|
-- ============================================================================
|
|
-- ENUM TYPES
|
|
-- ============================================================================
|
|
|
|
-- RuntimeType enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE runtime_type_enum AS ENUM (
|
|
'action',
|
|
'sensor'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE runtime_type_enum IS 'Type of runtime environment';
|
|
|
|
-- WorkerType enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE worker_type_enum AS ENUM (
|
|
'local',
|
|
'remote',
|
|
'container'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE worker_type_enum IS 'Type of worker deployment';
|
|
|
|
-- WorkerStatus enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE worker_status_enum AS ENUM (
|
|
'active',
|
|
'inactive',
|
|
'busy',
|
|
'error'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE worker_status_enum IS 'Worker operational status';
|
|
|
|
-- EnforcementStatus enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE enforcement_status_enum AS ENUM (
|
|
'created',
|
|
'processed',
|
|
'disabled'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE enforcement_status_enum IS 'Enforcement processing status';
|
|
|
|
-- EnforcementCondition enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE enforcement_condition_enum AS ENUM (
|
|
'any',
|
|
'all'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE enforcement_condition_enum IS 'Logical operator for conditions (OR/AND)';
|
|
|
|
-- ExecutionStatus enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE execution_status_enum AS ENUM (
|
|
'requested',
|
|
'scheduling',
|
|
'scheduled',
|
|
'running',
|
|
'completed',
|
|
'failed',
|
|
'canceling',
|
|
'cancelled',
|
|
'timeout',
|
|
'abandoned'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE execution_status_enum IS 'Execution lifecycle status';
|
|
|
|
-- InquiryStatus enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE inquiry_status_enum AS ENUM (
|
|
'pending',
|
|
'responded',
|
|
'timeout',
|
|
'cancelled'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE inquiry_status_enum IS 'Inquiry lifecycle status';
|
|
|
|
-- PolicyMethod enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE policy_method_enum AS ENUM (
|
|
'cancel',
|
|
'enqueue'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE policy_method_enum IS 'Policy enforcement method';
|
|
|
|
-- OwnerType enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE owner_type_enum AS ENUM (
|
|
'system',
|
|
'identity',
|
|
'pack',
|
|
'action',
|
|
'sensor'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE owner_type_enum IS 'Type of resource owner';
|
|
|
|
-- NotificationState enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE notification_status_enum AS ENUM (
|
|
'created',
|
|
'queued',
|
|
'processing',
|
|
'error'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE notification_status_enum IS 'Notification processing state';
|
|
|
|
-- ArtifactType enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE artifact_type_enum AS ENUM (
|
|
'file_binary',
|
|
'file_datatable',
|
|
'file_image',
|
|
'file_text',
|
|
'other',
|
|
'progress',
|
|
'url'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE artifact_type_enum IS 'Type of artifact';
|
|
|
|
-- RetentionPolicyType enum
|
|
DO $$ BEGIN
|
|
CREATE TYPE artifact_retention_enum AS ENUM (
|
|
'versions',
|
|
'days',
|
|
'hours',
|
|
'minutes'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
COMMENT ON TYPE artifact_retention_enum IS 'Type of retention policy';
|
|
|
|
-- ============================================================================
|
|
-- SHARED FUNCTIONS
|
|
-- ============================================================================
|
|
|
|
-- Function to automatically update the 'updated' timestamp
|
|
CREATE OR REPLACE FUNCTION update_updated_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
COMMENT ON FUNCTION update_updated_column() IS 'Automatically updates the updated timestamp on row modification';
|