CREATE SCHEMA IF NOT EXISTS edgex;
ALTER DATABASE edgex SET search_path TO edgex;
SET search_path TO edgex;

CREATE TABLE apid_cluster (
    id character varying(36) NOT NULL,
    name text NOT NULL,
    description text,
    umbrella_org_app_name text NOT NULL,
    created timestamp without time zone,
    created_by text,
    updated timestamp without time zone,
    updated_by text,
    _change_selector text,
    CONSTRAINT apid_cluster_pkey PRIMARY KEY (id)
);

CREATE INDEX apid_cluster___change_selector_idx ON apid_cluster USING btree (_change_selector);
CREATE INDEX apid_cluster_created_by_idx ON apid_cluster USING btree (created_by);

CREATE TABLE data_scope (
    id character varying(36) NOT NULL,
    apid_cluster_id character varying(36) NOT NULL,
    scope text NOT NULL,
    org text,
    env text,
    created timestamp without time zone,
    created_by text,
    updated timestamp without time zone,
    updated_by text,
    _change_selector text,
    CONSTRAINT data_scope_pkey PRIMARY KEY (id),
    CONSTRAINT data_scope_apid_cluster_id_fk FOREIGN KEY (apid_cluster_id)
          REFERENCES apid_cluster (id)
          ON UPDATE NO ACTION ON DELETE CASCADE
);
CREATE INDEX apid_cluster_scope__change_selector_idx ON data_scope USING btree (_change_selector);
CREATE INDEX apid_cluster_scope_apid_cluster_id_idx ON data_scope USING btree (apid_cluster_id);
CREATE UNIQUE INDEX apid_cluster_scope_apid_cluster_id_org_env_idx ON data_scope USING btree (apid_cluster_id, org, env);
CREATE INDEX data_scope_created_by_idx ON apid_cluster USING btree (created_by);


CREATE TABLE bundle_config (
    id character varying(36) NOT NULL,
    data_scope_id character varying(36) NOT NULL,
    name text NOT NULL,
    uri text NOT NULL,
    checksumType text,
    checksum text,
    created timestamp without time zone,
    created_by text,
    updated timestamp without time zone,
    updated_by text,
    CONSTRAINT bundle_config_pkey PRIMARY KEY (id),
    CONSTRAINT bundle_config_data_scope_id_fk FOREIGN KEY (data_scope_id)
          REFERENCES data_scope (id)
          ON UPDATE NO ACTION ON DELETE CASCADE
);

CREATE INDEX bundle_config_data_scope_id_idx ON bundle_config USING btree (data_scope_id);
CREATE INDEX bundle_config_created_by_idx ON apid_cluster USING btree (created_by);

CREATE TABLE deployment (
    id character varying(36) NOT NULL,
    bundle_config_id character varying(36) NOT NULL,
    apid_cluster_id character varying(36) NOT NULL,
    data_scope_id character varying(36) NOT NULL,
    bundle_config_name text NOT NULL,
    bundle_config_json text NOT NULL,
    config_json text NOT NULL,
    created timestamp without time zone,
    created_by text,
    updated timestamp without time zone,
    updated_by text,
    _change_selector text,
    CONSTRAINT deployment_pkey PRIMARY KEY (id),
    CONSTRAINT deployment_bundle_config_id_fk FOREIGN KEY (bundle_config_id)
        REFERENCES bundle_config (id)
        ON UPDATE NO ACTION ON DELETE CASCADE
);

CREATE TABLE deployment_history (
        id character varying(36) NOT NULL,
        deployment_id character varying(36) NOT NULL,
        action text NOT NULL,
        bundle_config_id character varying(36),
        apid_cluster_id character varying(36) NOT NULL,
        data_scope_id character varying(36) NOT NULL,
        bundle_config_json text NOT NULL,
        config_json text NOT NULL,
        created timestamp without time zone,
        created_by text,
        updated timestamp without time zone,
        updated_by text,
        CONSTRAINT deployment_history_pkey PRIMARY KEY (id)
);

CREATE INDEX deployment__change_selector_idx ON deployment USING btree (_change_selector);
CREATE INDEX deployment_apid_cluster_id_idx ON deployment USING btree (apid_cluster_id);
CREATE INDEX deployment_bundle_config_id_idx ON deployment USING btree (bundle_config_id);
CREATE INDEX deployment_data_scope_id_idx ON deployment USING btree (data_scope_id);
CREATE INDEX deployment_created_by_idx ON apid_cluster USING btree (created_by);

CREATE TABLE configuration (
    id character varying(36) NOT NULL,
    body text NOT NULL DEFAULT '{}',
    created timestamp without time zone,
    created_by text,
    updated timestamp without time zone,
    updated_by text,
    CONSTRAINT configuration_pkey PRIMARY KEY (id)
);

ALTER TABLE apid_cluster REPLICA IDENTITY FULL;
ALTER TABLE data_scope REPLICA IDENTITY FULL;
ALTER TABLE deployment REPLICA IDENTITY FULL;