diff --git a/backend/v3/storage/database/dialect/postgres/migration/003_id_providers_table/down.sql b/backend/v3/storage/database/dialect/postgres/migration/003_id_providers_table/down.sql new file mode 100644 index 0000000000..0831a6ca4f --- /dev/null +++ b/backend/v3/storage/database/dialect/postgres/migration/003_id_providers_table/down.sql @@ -0,0 +1,3 @@ +DROP TABLE zitadel.identity_providers; +DROP Type zitadel.idp_state; +DROP Type zitadel.idp_type; diff --git a/backend/v3/storage/database/dialect/postgres/migration/003_id_providers_table/up.sql b/backend/v3/storage/database/dialect/postgres/migration/003_id_providers_table/up.sql new file mode 100644 index 0000000000..d4c0f46b18 --- /dev/null +++ b/backend/v3/storage/database/dialect/postgres/migration/003_id_providers_table/up.sql @@ -0,0 +1,52 @@ +CREATE TYPE idp_state AS ENUM ( + 'active', + 'inactive' +); + +CREATE TYPE idp_type AS ENUM ( + 'oidc', + 'oauth', + 'saml', + 'ldap', + 'github', + 'google', + 'microsoft', + 'apple' +); + +CREATE TABLE identity_providers ( + instance_id TEXT NOT NULL + , org_id TEXT + , id TEXT NOT NULL + , state idp_state NOT NULL DEFAULT 'active' + , name TEXT + , type idp_type NOT NULL + , allow_creation BOOLEAN NOT NULL DEFAULT TRUE + , allow_auto_creation BOOLEAN NOT NULL DEFAULT TRUE + , allow_auto_update BOOLEAN NOT NULL DEFAULT TRUE + , allow_linking BOOLEAN NOT NULL DEFAULT TRUE + , styling_type SMALLINT + , payload JSONB + + , created_at TIMESTAMPTZ NOT NULL DEFAULT now() + , updated_at TIMESTAMPTZ NOT NULL DEFAULT now() + , deleted_at TIMESTAMPTZ + + , PRIMARY KEY (instance_id, id) + , CONSTRAINT identity_providers_unique UNIQUE NULLS NOT DISTINCT (instance_id, org_id, id) + , FOREIGN KEY (instance_id) REFERENCES instances(id) + , FOREIGN KEY (instance_id, org_id) REFERENCES organizations(instance_id, id) +); + +-- CREATE INDEX idx_identity_providers_org_id ON identity_providers(instance_id, org_id) WHERE org_id IS NOT NULL; +CREATE INDEX idx_identity_providers_state ON identity_providers(instance_id, state); +CREATE INDEX idx_identity_providers_type ON identity_providers(instance_id, type); +-- CREATE INDEX idx_identity_providers_created_at ON identity_providers(created_at); +-- CREATE INDEX idx_identity_providers_deleted_at ON identity_providers(deleted_at) WHERE deleted_at IS NOT NULL; + + +CREATE TRIGGER trigger_set_updated_at +BEFORE UPDATE ON zitadel.identity_providers +FOR EACH ROW +WHEN (OLD.updated_at IS NOT DISTINCT FROM NEW.updated_at) +EXECUTE FUNCTION zitadel.set_updated_at();