648 lines
26 KiB
SQL
648 lines
26 KiB
SQL
-- =============================================================================
|
|
-- AeroResolve Database Schema
|
|
-- PostgreSQL 14+
|
|
-- Generated from TypeORM entities (aeroresolve_backend)
|
|
-- =============================================================================
|
|
|
|
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
|
|
|
-- ─── Schemas ────────────────────────────────────────────────────────────────
|
|
|
|
CREATE SCHEMA IF NOT EXISTS tenant;
|
|
CREATE SCHEMA IF NOT EXISTS masters_rule_engine;
|
|
CREATE SCHEMA IF NOT EXISTS masters_action_builder;
|
|
CREATE SCHEMA IF NOT EXISTS masters_lookup;
|
|
CREATE SCHEMA IF NOT EXISTS cohort;
|
|
CREATE SCHEMA IF NOT EXISTS policy_engine;
|
|
CREATE SCHEMA IF NOT EXISTS audit;
|
|
CREATE SCHEMA IF NOT EXISTS recovery_incident;
|
|
|
|
-- ─── Audit Logs ──────────────────────────────────────────────────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS audit.tbl_audit_logs (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id VARCHAR(255) NOT NULL,
|
|
module VARCHAR(100) NOT NULL,
|
|
action VARCHAR(50) NOT NULL,
|
|
entity_id VARCHAR(255),
|
|
entity_label VARCHAR(255),
|
|
before JSONB,
|
|
after JSONB,
|
|
performed_by VARCHAR(255),
|
|
ip_address VARCHAR(50),
|
|
user_agent TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_audit_tenant ON audit.tbl_audit_logs (tenant_id);
|
|
CREATE INDEX IF NOT EXISTS idx_audit_module ON audit.tbl_audit_logs (module);
|
|
CREATE INDEX IF NOT EXISTS idx_audit_action ON audit.tbl_audit_logs (action);
|
|
CREATE INDEX IF NOT EXISTS idx_audit_entity ON audit.tbl_audit_logs (entity_id);
|
|
CREATE INDEX IF NOT EXISTS idx_audit_createdat ON audit.tbl_audit_logs (created_at DESC);
|
|
|
|
|
|
|
|
-- ─── Enum Types ─────────────────────────────────────────────────────────────
|
|
|
|
DO $$ BEGIN
|
|
CREATE TYPE cohort.cohort_high_value_passenger_enum AS ENUM (
|
|
'Any',
|
|
'Yes(VIP/Strategic)',
|
|
'No'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN NULL;
|
|
END $$;
|
|
|
|
DO $$ BEGIN
|
|
CREATE TYPE cohort.cohort_flight_type_enum AS ENUM (
|
|
'Domestic Only',
|
|
'International Only',
|
|
'Both (All)'
|
|
);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN NULL;
|
|
END $$;
|
|
|
|
-- ─── Tenants ────────────────────────────────────────────────────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS tenant.tbl_tenants (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
slug VARCHAR NOT NULL,
|
|
name VARCHAR NOT NULL,
|
|
tier VARCHAR NOT NULL DEFAULT 'standard',
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
CONSTRAINT uq_tbl_tenants_slug UNIQUE (slug)
|
|
);
|
|
|
|
-- ─── 1. Masters Lookup Schema (Domain Master Tables) ─────────────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_membership_tiers (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_customer_values (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_regions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_trip_purposes (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_cabin_classes (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_passenger_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_ancillary_purchases (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_revenue_segments (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_jurisdictions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_booking_channels (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_flight_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_journey_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_fare_flexibilities (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_carrier_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_special_assistance_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_delay_reasons (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_delay_durations (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_extraordinary_circumstances (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_cancellation_reasons (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_diversion_reasons (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_missed_connection_reasons (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_compensation_eligibilities (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_compensation_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_refund_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_flight_disruption_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_airline_responsibilities (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_weather_conditions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_atc_restrictions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_technical_fault_categories (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_refund_bases (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_currencies (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
symbol VARCHAR,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_refund_methods (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_lookup.tbl_amount_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
label VARCHAR NOT NULL,
|
|
value VARCHAR NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- ─── 2. Masters Rule Engine Schema (Condition & Category Metadata) ───────────
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_rule_engine.tbl_rules_categories (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
code VARCHAR(100) NOT NULL UNIQUE,
|
|
name VARCHAR(150) NOT NULL,
|
|
"tableName" VARCHAR,
|
|
description TEXT,
|
|
"displayOrder" INT DEFAULT 0,
|
|
"isActive" BOOLEAN DEFAULT TRUE,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_rule_engine.tbl_condition_groups (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
code VARCHAR(100) NOT NULL UNIQUE,
|
|
name VARCHAR(150) NOT NULL,
|
|
"displayOrder" INT DEFAULT 0,
|
|
"isActive" BOOLEAN DEFAULT TRUE,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_rule_engine.tbl_rule_category_groups (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"ruleCategoryId" UUID NOT NULL REFERENCES masters_rule_engine.tbl_rules_categories(id) ON DELETE CASCADE,
|
|
"conditionGroupId" UUID NOT NULL REFERENCES masters_rule_engine.tbl_condition_groups(id) ON DELETE CASCADE,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
CONSTRAINT uq_rule_category_group UNIQUE ("ruleCategoryId", "conditionGroupId")
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_rule_engine.tbl_condition_fields (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"groupId" UUID NOT NULL REFERENCES masters_rule_engine.tbl_condition_groups(id) ON DELETE CASCADE,
|
|
code VARCHAR(100) NOT NULL UNIQUE,
|
|
name VARCHAR(150) NOT NULL,
|
|
"lookupTable" VARCHAR,
|
|
"dataType" VARCHAR NOT NULL DEFAULT 'STRING',
|
|
"operatorType" VARCHAR NOT NULL DEFAULT 'COMPARISON',
|
|
"displayOrder" INT DEFAULT 0,
|
|
"isActive" BOOLEAN DEFAULT TRUE,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_rule_engine.tbl_operators (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
code VARCHAR(50) NOT NULL UNIQUE,
|
|
name VARCHAR(100) NOT NULL,
|
|
symbol VARCHAR(20),
|
|
"dataTypes" TEXT[],
|
|
"isActive" BOOLEAN DEFAULT TRUE,
|
|
"displayOrder" INT DEFAULT 0,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- ─── 3. Masters Action Builder Schema ───────────────────────────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_action_builder.tbl_action_categories (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
code VARCHAR NOT NULL UNIQUE,
|
|
name VARCHAR NOT NULL,
|
|
description TEXT,
|
|
"displayOrder" INT DEFAULT 0,
|
|
"isActive" BOOLEAN DEFAULT TRUE,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_action_builder.tbl_action_types (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"categoryId" UUID NOT NULL REFERENCES masters_action_builder.tbl_action_categories(id) ON DELETE CASCADE,
|
|
code VARCHAR NOT NULL UNIQUE,
|
|
name VARCHAR NOT NULL,
|
|
description TEXT,
|
|
"displayOrder" INT DEFAULT 0,
|
|
"isActive" BOOLEAN DEFAULT TRUE,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_action_builder.tbl_field_definitions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"actionTypeId" UUID NOT NULL REFERENCES masters_action_builder.tbl_action_types(id) ON DELETE CASCADE,
|
|
"fieldCode" VARCHAR NOT NULL,
|
|
"fieldName" VARCHAR NOT NULL,
|
|
"fieldType" VARCHAR NOT NULL,
|
|
"lookupSource" VARCHAR,
|
|
"isRequired" BOOLEAN NOT NULL DEFAULT false,
|
|
"defaultValue" TEXT,
|
|
placeholder VARCHAR,
|
|
"helpText" TEXT,
|
|
width VARCHAR NOT NULL DEFAULT 'full',
|
|
section VARCHAR,
|
|
"displayOrder" INT NOT NULL DEFAULT 0,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"validationJson" JSONB,
|
|
"visibilityConditionJson" JSONB,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS uq_field_definition_action_type_code
|
|
ON masters_action_builder.tbl_field_definitions("actionTypeId", "fieldCode");
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_action_builder.tbl_action_submissions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"categoryId" UUID NOT NULL REFERENCES masters_action_builder.tbl_action_categories(id) ON DELETE CASCADE,
|
|
"actionTypeId" UUID NOT NULL REFERENCES masters_action_builder.tbl_action_types(id) ON DELETE CASCADE,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS masters_action_builder.tbl_action_submission_values (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"submissionId" UUID NOT NULL REFERENCES masters_action_builder.tbl_action_submissions(id) ON DELETE CASCADE,
|
|
"fieldDefinitionId" UUID REFERENCES masters_action_builder.tbl_field_definitions(id) ON DELETE CASCADE,
|
|
"fieldCode" VARCHAR,
|
|
"valueIndex" INT NOT NULL DEFAULT 0,
|
|
"selectedValueId" VARCHAR,
|
|
"textValue" TEXT,
|
|
"numberValue" NUMERIC,
|
|
"booleanValue" BOOLEAN,
|
|
"dateValue" DATE,
|
|
"timeValue" TIME,
|
|
"timestampValue" TIMESTAMP WITH TIME ZONE,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- ─── Cohorts ────────────────────────────────────────────────────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS cohort.tbl_cohorts (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"tenantId" UUID NOT NULL REFERENCES tenant.tbl_tenants(id) ON DELETE CASCADE,
|
|
"scopeType" VARCHAR,
|
|
name VARCHAR NOT NULL,
|
|
description VARCHAR,
|
|
status VARCHAR NOT NULL DEFAULT 'Draft',
|
|
"highValuePassenger" cohort.cohort_high_value_passenger_enum NOT NULL DEFAULT 'Any',
|
|
"flightType" cohort.cohort_flight_type_enum,
|
|
"originAirport" TEXT,
|
|
"destinationAirport" TEXT,
|
|
"createdAt" TIMESTAMP NOT NULL DEFAULT now(),
|
|
"updatedAt" TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_tbl_cohorts_tenant ON cohort.tbl_cohorts("tenantId");
|
|
|
|
-- ─── Cohort Join Tables (Many-to-Many) ──────────────────────────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS cohort.tbl_cohort_cabin_classes (
|
|
"cohortId" UUID NOT NULL REFERENCES cohort.tbl_cohorts(id) ON DELETE CASCADE,
|
|
"cabinClassId" UUID NOT NULL REFERENCES masters_lookup.tbl_cabin_classes(id) ON DELETE CASCADE,
|
|
PRIMARY KEY ("cohortId", "cabinClassId")
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS cohort.tbl_cohort_passenger_types (
|
|
"cohortId" UUID NOT NULL REFERENCES cohort.tbl_cohorts(id) ON DELETE CASCADE,
|
|
"passengerTypeId" UUID NOT NULL REFERENCES masters_lookup.tbl_passenger_types(id) ON DELETE CASCADE,
|
|
PRIMARY KEY ("cohortId", "passengerTypeId")
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS cohort.tbl_cohort_ancillary_purchases (
|
|
"cohortId" UUID NOT NULL REFERENCES cohort.tbl_cohorts(id) ON DELETE CASCADE,
|
|
"ancillaryPurchaseId" UUID NOT NULL REFERENCES masters_lookup.tbl_ancillary_purchases(id) ON DELETE CASCADE,
|
|
PRIMARY KEY ("cohortId", "ancillaryPurchaseId")
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS cohort.tbl_cohort_loyalty_tiers (
|
|
"cohortId" UUID NOT NULL REFERENCES cohort.tbl_cohorts(id) ON DELETE CASCADE,
|
|
"membershipTierId" UUID NOT NULL REFERENCES masters_lookup.tbl_membership_tiers(id) ON DELETE CASCADE,
|
|
PRIMARY KEY ("cohortId", "membershipTierId")
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS cohort.tbl_cohort_revenue_segments (
|
|
"cohortId" UUID NOT NULL REFERENCES cohort.tbl_cohorts(id) ON DELETE CASCADE,
|
|
"revenueSegmentId" UUID NOT NULL REFERENCES masters_lookup.tbl_revenue_segments(id) ON DELETE CASCADE,
|
|
PRIMARY KEY ("cohortId", "revenueSegmentId")
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS cohort.tbl_cohort_regions (
|
|
"cohortId" UUID NOT NULL REFERENCES cohort.tbl_cohorts(id) ON DELETE CASCADE,
|
|
"regionId" UUID NOT NULL REFERENCES masters_lookup.tbl_regions(id) ON DELETE CASCADE,
|
|
PRIMARY KEY ("cohortId", "regionId")
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS cohort.tbl_cohort_trip_purposes (
|
|
"cohortId" UUID NOT NULL REFERENCES cohort.tbl_cohorts(id) ON DELETE CASCADE,
|
|
"tripPurposeId" UUID NOT NULL REFERENCES masters_lookup.tbl_trip_purposes(id) ON DELETE CASCADE,
|
|
PRIMARY KEY ("cohortId", "tripPurposeId")
|
|
);
|
|
|
|
-- ─── Policy Engine ──────────────────────────────────────────────────────────
|
|
|
|
CREATE TABLE IF NOT EXISTS policy_engine.tbl_policies (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
"tenantId" UUID NOT NULL REFERENCES tenant.tbl_tenants(id) ON DELETE CASCADE,
|
|
policy_name VARCHAR(200) NOT NULL,
|
|
description TEXT,
|
|
status VARCHAR NOT NULL DEFAULT 'draft',
|
|
version INT NOT NULL DEFAULT 1,
|
|
audience_type VARCHAR NOT NULL DEFAULT 'ALL',
|
|
created_by UUID,
|
|
updated_by UUID,
|
|
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS policy_engine.tbl_policy_jurisdictions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
policy_id UUID NOT NULL REFERENCES policy_engine.tbl_policies(id) ON DELETE CASCADE,
|
|
jurisdiction_id UUID NOT NULL REFERENCES masters_lookup.tbl_jurisdictions(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS policy_engine.tbl_policy_target_audiences (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
policy_id UUID NOT NULL REFERENCES policy_engine.tbl_policies(id) ON DELETE CASCADE,
|
|
target_type VARCHAR NOT NULL,
|
|
target_id UUID
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS policy_engine.tbl_policy_rules (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
policy_id UUID NOT NULL REFERENCES policy_engine.tbl_policies(id) ON DELETE CASCADE,
|
|
rule_category_id UUID REFERENCES masters_rule_engine.tbl_rules_categories(id) ON DELETE SET NULL,
|
|
priority INT NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS policy_engine.tbl_policy_rule_conditions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
rule_id UUID NOT NULL REFERENCES policy_engine.tbl_policy_rules(id) ON DELETE CASCADE,
|
|
field_id UUID NOT NULL,
|
|
operator_id UUID NOT NULL,
|
|
value_text TEXT,
|
|
logical_operator VARCHAR NOT NULL DEFAULT 'AND',
|
|
sequence INT NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS policy_engine.tbl_policy_actions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
rule_id UUID NOT NULL REFERENCES policy_engine.tbl_policy_rules(id) ON DELETE CASCADE,
|
|
action_type_id UUID NOT NULL REFERENCES masters_action_builder.tbl_action_types(id) ON DELETE CASCADE,
|
|
sequence INT NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS policy_engine.tbl_policy_action_values (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
action_id UUID NOT NULL REFERENCES policy_engine.tbl_policy_actions(id) ON DELETE CASCADE,
|
|
field_definition_id UUID REFERENCES masters_action_builder.tbl_field_definitions(id) ON DELETE SET NULL,
|
|
field_code VARCHAR NOT NULL,
|
|
value_index INT NOT NULL DEFAULT 0,
|
|
selected_value_id VARCHAR,
|
|
text_value TEXT,
|
|
number_value NUMERIC,
|
|
boolean_value BOOLEAN,
|
|
date_value DATE,
|
|
time_value TIME,
|
|
timestamp_value TIMESTAMP WITH TIME ZONE,
|
|
currency_code_id UUID,
|
|
created_at TIMESTAMP NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tbl_policy_action_values_action
|
|
ON policy_engine.tbl_policy_action_values(action_id);
|