diff --git a/controlplane/migrations/0127_lonely_centennial.sql b/controlplane/migrations/0127_lonely_centennial.sql new file mode 100644 index 0000000000..9411b6f939 --- /dev/null +++ b/controlplane/migrations/0127_lonely_centennial.sql @@ -0,0 +1 @@ +ALTER TYPE "public"."organization_role" ADD VALUE 'subgraph-viewer'; \ No newline at end of file diff --git a/controlplane/migrations/meta/0127_snapshot.json b/controlplane/migrations/meta/0127_snapshot.json new file mode 100644 index 0000000000..4c84bdaa0c --- /dev/null +++ b/controlplane/migrations/meta/0127_snapshot.json @@ -0,0 +1,8238 @@ +{ + "id": "f1c31ac5-9d78-42c7-bf4e-c9e3c48036bf", + "prevId": "55b1d2df-08b7-46dd-875d-48039935743b", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.api_key_permissions": { + "name": "api_key_permissions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "api_key_id": { + "name": "api_key_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "permission": { + "name": "permission", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "akp_api_key_id_idx": { + "name": "akp_api_key_id_idx", + "columns": [ + { + "expression": "api_key_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "api_key_permissions_api_key_id_api_keys_id_fk": { + "name": "api_key_permissions_api_key_id_api_keys_id_fk", + "tableFrom": "api_key_permissions", + "tableTo": "api_keys", + "columnsFrom": [ + "api_key_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.api_key_resources": { + "name": "api_key_resources", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "api_key_id": { + "name": "api_key_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "akr_api_key_id_idx": { + "name": "akr_api_key_id_idx", + "columns": [ + { + "expression": "api_key_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "akr_target_id_idx": { + "name": "akr_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "api_key_resources_api_key_id_api_keys_id_fk": { + "name": "api_key_resources_api_key_id_api_keys_id_fk", + "tableFrom": "api_key_resources", + "tableTo": "api_keys", + "columnsFrom": [ + "api_key_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "api_key_resources_target_id_targets_id_fk": { + "name": "api_key_resources_target_id_targets_id_fk", + "tableFrom": "api_key_resources", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.api_keys": { + "name": "api_keys", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "group_id": { + "name": "group_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "last_used_at": { + "name": "last_used_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "apikey_name_idx": { + "name": "apikey_name_idx", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ak_user_id_idx": { + "name": "ak_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ak_organization_id_idx": { + "name": "ak_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "api_keys_user_id_users_id_fk": { + "name": "api_keys_user_id_users_id_fk", + "tableFrom": "api_keys", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "api_keys_organization_id_organizations_id_fk": { + "name": "api_keys_organization_id_organizations_id_fk", + "tableFrom": "api_keys", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "api_keys_group_id_organization_groups_id_fk": { + "name": "api_keys_group_id_organization_groups_id_fk", + "tableFrom": "api_keys", + "tableTo": "organization_groups", + "columnsFrom": [ + "group_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "api_keys_key_unique": { + "name": "api_keys_key_unique", + "nullsNotDistinct": false, + "columns": [ + "key" + ] + } + }, + "checkConstraints": {} + }, + "public.audit_logs": { + "name": "audit_logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_slug": { + "name": "organization_slug", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "audit_action": { + "name": "audit_action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auditable_type": { + "name": "auditable_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "auditable_display_name": { + "name": "auditable_display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "target_type": { + "name": "target_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_display_name": { + "name": "target_display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_namespace_id": { + "name": "target_namespace_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "target_namespace": { + "name": "target_namespace", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "actor_id": { + "name": "actor_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "actor_display_name": { + "name": "actor_display_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "actor_type": { + "name": "actor_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "api_key_name": { + "name": "api_key_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "auditlogs_organization_idx": { + "name": "auditlogs_organization_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "auditlogs_created_at_idx": { + "name": "auditlogs_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.billing_plans": { + "name": "billing_plans", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "price": { + "name": "price", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "features": { + "name": "features", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "stripe_price_id": { + "name": "stripe_price_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "weight": { + "name": "weight", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.billing_subscriptions": { + "name": "billing_subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "price_id": { + "name": "price_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "quantity": { + "name": "quantity", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "cancel_at_period_end": { + "name": "cancel_at_period_end", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "cancel_at": { + "name": "cancel_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "canceled_at": { + "name": "canceled_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "current_period_start": { + "name": "current_period_start", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "current_period_end": { + "name": "current_period_end", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "ended_at": { + "name": "ended_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "trial_start": { + "name": "trial_start", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "trial_end": { + "name": "trial_end", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "billsubs_organization_id_idx": { + "name": "billsubs_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "billing_subscriptions_organization_id_organizations_id_fk": { + "name": "billing_subscriptions_organization_id_organizations_id_fk", + "tableFrom": "billing_subscriptions", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.cache_warmer_operations": { + "name": "cache_warmer_operations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "operation_content": { + "name": "operation_content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "operation_hash": { + "name": "operation_hash", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "operation_persisted_id": { + "name": "operation_persisted_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "operation_name": { + "name": "operation_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_name": { + "name": "client_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_version": { + "name": "client_version", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "planning_time": { + "name": "planning_time", + "type": "real", + "primaryKey": false, + "notNull": false + }, + "is_manually_added": { + "name": "is_manually_added", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "cwo_organization_id_idx": { + "name": "cwo_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cwo_federated_graph_id_idx": { + "name": "cwo_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "cwo_created_by_id_idx": { + "name": "cwo_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "cache_warmer_operations_organization_id_organizations_id_fk": { + "name": "cache_warmer_operations_organization_id_organizations_id_fk", + "tableFrom": "cache_warmer_operations", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "cache_warmer_operations_federated_graph_id_federated_graphs_id_fk": { + "name": "cache_warmer_operations_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "cache_warmer_operations", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "cache_warmer_operations_created_by_id_users_id_fk": { + "name": "cache_warmer_operations_created_by_id_users_id_fk", + "tableFrom": "cache_warmer_operations", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.contracts": { + "name": "contracts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "source_federated_graph_id": { + "name": "source_federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "downstream_federated_graph_id": { + "name": "downstream_federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "exclude_tags": { + "name": "exclude_tags", + "type": "text[]", + "primaryKey": false, + "notNull": true + }, + "include_tags": { + "name": "include_tags", + "type": "text[]", + "primaryKey": false, + "notNull": true, + "default": "'{}'::text[]" + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_by_id": { + "name": "updated_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "contracts_created_by_id_idx": { + "name": "contracts_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "contracts_updated_by_id_idx": { + "name": "contracts_updated_by_id_idx", + "columns": [ + { + "expression": "updated_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "contracts_downstream_federated_graph_id_idx": { + "name": "contracts_downstream_federated_graph_id_idx", + "columns": [ + { + "expression": "downstream_federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "contracts_source_federated_graph_id_federated_graphs_id_fk": { + "name": "contracts_source_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "contracts", + "tableTo": "federated_graphs", + "columnsFrom": [ + "source_federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "contracts_downstream_federated_graph_id_federated_graphs_id_fk": { + "name": "contracts_downstream_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "contracts", + "tableTo": "federated_graphs", + "columnsFrom": [ + "downstream_federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "contracts_created_by_id_users_id_fk": { + "name": "contracts_created_by_id_users_id_fk", + "tableFrom": "contracts", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "contracts_updated_by_id_users_id_fk": { + "name": "contracts_updated_by_id_users_id_fk", + "tableFrom": "contracts", + "tableTo": "users", + "columnsFrom": [ + "updated_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "federated_graph_source_downstream_id": { + "name": "federated_graph_source_downstream_id", + "nullsNotDistinct": false, + "columns": [ + "source_federated_graph_id", + "downstream_federated_graph_id" + ] + } + }, + "checkConstraints": {} + }, + "public.feature_flags_to_feature_subgraphs": { + "name": "feature_flags_to_feature_subgraphs", + "schema": "", + "columns": { + "feature_flag_id": { + "name": "feature_flag_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "feature_subgraph_id": { + "name": "feature_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "fffs_feature_flag_id_idx": { + "name": "fffs_feature_flag_id_idx", + "columns": [ + { + "expression": "feature_flag_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fffs_feature_subgraph_id_idx": { + "name": "fffs_feature_subgraph_id_idx", + "columns": [ + { + "expression": "feature_subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "feature_flags_to_feature_subgraphs_feature_flag_id_feature_flags_id_fk": { + "name": "feature_flags_to_feature_subgraphs_feature_flag_id_feature_flags_id_fk", + "tableFrom": "feature_flags_to_feature_subgraphs", + "tableTo": "feature_flags", + "columnsFrom": [ + "feature_flag_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feature_flags_to_feature_subgraphs_feature_subgraph_id_subgraphs_id_fk": { + "name": "feature_flags_to_feature_subgraphs_feature_subgraph_id_subgraphs_id_fk", + "tableFrom": "feature_flags_to_feature_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "feature_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "feature_flags_to_feature_subgraphs_feature_flag_id_feature_subgraph_id_pk": { + "name": "feature_flags_to_feature_subgraphs_feature_flag_id_feature_subgraph_id_pk", + "columns": [ + "feature_flag_id", + "feature_subgraph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.feature_flags": { + "name": "feature_flags", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "labels": { + "name": "labels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "ff_organization_id_idx": { + "name": "ff_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ff_namespace_id_idx": { + "name": "ff_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ff_created_by_idx": { + "name": "ff_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "feature_flags_organization_id_organizations_id_fk": { + "name": "feature_flags_organization_id_organizations_id_fk", + "tableFrom": "feature_flags", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feature_flags_namespace_id_namespaces_id_fk": { + "name": "feature_flags_namespace_id_namespaces_id_fk", + "tableFrom": "feature_flags", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feature_flags_created_by_users_id_fk": { + "name": "feature_flags_created_by_users_id_fk", + "tableFrom": "feature_flags", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.feature_subgraphs_to_base_subgraphs": { + "name": "feature_subgraphs_to_base_subgraphs", + "schema": "", + "columns": { + "feature_subgraph_id": { + "name": "feature_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "base_subgraph_id": { + "name": "base_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "fsbs_feature_subgraph_id_idx": { + "name": "fsbs_feature_subgraph_id_idx", + "columns": [ + { + "expression": "feature_subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fsbs_base_subgraph_id_idx": { + "name": "fsbs_base_subgraph_id_idx", + "columns": [ + { + "expression": "base_subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "feature_subgraphs_to_base_subgraphs_feature_subgraph_id_subgraphs_id_fk": { + "name": "feature_subgraphs_to_base_subgraphs_feature_subgraph_id_subgraphs_id_fk", + "tableFrom": "feature_subgraphs_to_base_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "feature_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feature_subgraphs_to_base_subgraphs_base_subgraph_id_subgraphs_id_fk": { + "name": "feature_subgraphs_to_base_subgraphs_base_subgraph_id_subgraphs_id_fk", + "tableFrom": "feature_subgraphs_to_base_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "base_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "feature_subgraphs_to_base_subgraphs_feature_subgraph_id_base_subgraph_id_pk": { + "name": "feature_subgraphs_to_base_subgraphs_feature_subgraph_id_base_subgraph_id_pk", + "columns": [ + "feature_subgraph_id", + "base_subgraph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.federated_graph_clients": { + "name": "federated_graph_clients", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_by_id": { + "name": "updated_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "fgc_created_by_id_idx": { + "name": "fgc_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgc_updated_by_id_idx": { + "name": "fgc_updated_by_id_idx", + "columns": [ + { + "expression": "updated_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_graph_clients_federated_graph_id_federated_graphs_id_fk": { + "name": "federated_graph_clients_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "federated_graph_clients", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graph_clients_created_by_id_users_id_fk": { + "name": "federated_graph_clients_created_by_id_users_id_fk", + "tableFrom": "federated_graph_clients", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "federated_graph_clients_updated_by_id_users_id_fk": { + "name": "federated_graph_clients_updated_by_id_users_id_fk", + "tableFrom": "federated_graph_clients", + "tableTo": "users", + "columnsFrom": [ + "updated_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "federated_graph_client_name": { + "name": "federated_graph_client_name", + "nullsNotDistinct": false, + "columns": [ + "federated_graph_id", + "name" + ] + } + }, + "checkConstraints": {} + }, + "public.federated_graph_persisted_operations": { + "name": "federated_graph_persisted_operations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "client_id": { + "name": "client_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "operation_id": { + "name": "operation_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "operation_names": { + "name": "operation_names", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "operation_content": { + "name": "operation_content", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "updated_by_id": { + "name": "updated_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "fgpo_created_by_id_idx": { + "name": "fgpo_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgpo_updated_by_id_idx": { + "name": "fgpo_updated_by_id_idx", + "columns": [ + { + "expression": "updated_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgpo_client_id_idx": { + "name": "fgpo_client_id_idx", + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_graph_persisted_operations_federated_graph_id_federated_graphs_id_fk": { + "name": "federated_graph_persisted_operations_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "federated_graph_persisted_operations", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graph_persisted_operations_client_id_federated_graph_clients_id_fk": { + "name": "federated_graph_persisted_operations_client_id_federated_graph_clients_id_fk", + "tableFrom": "federated_graph_persisted_operations", + "tableTo": "federated_graph_clients", + "columnsFrom": [ + "client_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graph_persisted_operations_created_by_id_users_id_fk": { + "name": "federated_graph_persisted_operations_created_by_id_users_id_fk", + "tableFrom": "federated_graph_persisted_operations", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "federated_graph_persisted_operations_updated_by_id_users_id_fk": { + "name": "federated_graph_persisted_operations_updated_by_id_users_id_fk", + "tableFrom": "federated_graph_persisted_operations", + "tableTo": "users", + "columnsFrom": [ + "updated_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "federated_graph_persisted_operations_file_path_unique": { + "name": "federated_graph_persisted_operations_file_path_unique", + "nullsNotDistinct": false, + "columns": [ + "file_path" + ] + }, + "federated_graph_operation_id": { + "name": "federated_graph_operation_id", + "nullsNotDistinct": false, + "columns": [ + "federated_graph_id", + "client_id", + "operation_id" + ] + } + }, + "checkConstraints": {} + }, + "public.federated_graphs": { + "name": "federated_graphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "routing_url": { + "name": "routing_url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "composed_schema_version_id": { + "name": "composed_schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "admission_webhook_url": { + "name": "admission_webhook_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "admission_webhook_secret": { + "name": "admission_webhook_secret", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "supports_federation": { + "name": "supports_federation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "router_compatibility_version": { + "name": "router_compatibility_version", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'1'" + } + }, + "indexes": { + "fgs_target_id_idx": { + "name": "fgs_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgs_composed_schema_version_id_idx": { + "name": "fgs_composed_schema_version_id_idx", + "columns": [ + { + "expression": "composed_schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_graphs_target_id_targets_id_fk": { + "name": "federated_graphs_target_id_targets_id_fk", + "tableFrom": "federated_graphs", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graphs_composed_schema_version_id_schema_versions_id_fk": { + "name": "federated_graphs_composed_schema_version_id_schema_versions_id_fk", + "tableFrom": "federated_graphs", + "tableTo": "schema_versions", + "columnsFrom": [ + "composed_schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.federated_graphs_to_feature_flag_schema_versions": { + "name": "federated_graphs_to_feature_flag_schema_versions", + "schema": "", + "columns": { + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "base_composition_schema_version_id": { + "name": "base_composition_schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "composed_schema_version_id": { + "name": "composed_schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "feature_flag_id": { + "name": "feature_flag_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "fgffsv_federated_graph_id_idx": { + "name": "fgffsv_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgffsv_base_composition_schema_version_id_idx": { + "name": "fgffsv_base_composition_schema_version_id_idx", + "columns": [ + { + "expression": "base_composition_schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgffsv_composed_schema_version_id_idx": { + "name": "fgffsv_composed_schema_version_id_idx", + "columns": [ + { + "expression": "composed_schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgffsv_feature_flag_id_idx": { + "name": "fgffsv_feature_flag_id_idx", + "columns": [ + { + "expression": "feature_flag_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_graphs_to_feature_flag_schema_versions_federated_graph_id_federated_graphs_id_fk": { + "name": "federated_graphs_to_feature_flag_schema_versions_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "federated_graphs_to_feature_flag_schema_versions", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graphs_to_feature_flag_schema_versions_base_composition_schema_version_id_schema_versions_id_fk": { + "name": "federated_graphs_to_feature_flag_schema_versions_base_composition_schema_version_id_schema_versions_id_fk", + "tableFrom": "federated_graphs_to_feature_flag_schema_versions", + "tableTo": "schema_versions", + "columnsFrom": [ + "base_composition_schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graphs_to_feature_flag_schema_versions_composed_schema_version_id_schema_versions_id_fk": { + "name": "federated_graphs_to_feature_flag_schema_versions_composed_schema_version_id_schema_versions_id_fk", + "tableFrom": "federated_graphs_to_feature_flag_schema_versions", + "tableTo": "schema_versions", + "columnsFrom": [ + "composed_schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_graphs_to_feature_flag_schema_versions_feature_flag_id_feature_flags_id_fk": { + "name": "federated_graphs_to_feature_flag_schema_versions_feature_flag_id_feature_flags_id_fk", + "tableFrom": "federated_graphs_to_feature_flag_schema_versions", + "tableTo": "feature_flags", + "columnsFrom": [ + "feature_flag_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "federated_graphs_to_feature_flag_schema_versions_federated_graph_id_base_composition_schema_version_id_composed_schema_version_id_pk": { + "name": "federated_graphs_to_feature_flag_schema_versions_federated_graph_id_base_composition_schema_version_id_composed_schema_version_id_pk", + "columns": [ + "federated_graph_id", + "base_composition_schema_version_id", + "composed_schema_version_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.field_grace_period": { + "name": "field_grace_period", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "is_deprecated": { + "name": "is_deprecated", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "unique_field_grace_period_idx": { + "name": "unique_field_grace_period_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "is_deprecated", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgp_subgraph_id_idx": { + "name": "fgp_subgraph_id_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgp_organization_id_idx": { + "name": "fgp_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fgp_namespace_id_idx": { + "name": "fgp_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "field_grace_period_subgraph_id_subgraphs_id_fk": { + "name": "field_grace_period_subgraph_id_subgraphs_id_fk", + "tableFrom": "field_grace_period", + "tableTo": "subgraphs", + "columnsFrom": [ + "subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "field_grace_period_organization_id_organizations_id_fk": { + "name": "field_grace_period_organization_id_organizations_id_fk", + "tableFrom": "field_grace_period", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "field_grace_period_namespace_id_namespaces_id_fk": { + "name": "field_grace_period_namespace_id_namespaces_id_fk", + "tableFrom": "field_grace_period", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.git_installations": { + "name": "git_installations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "git_installation_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "provider_account_id": { + "name": "provider_account_id", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "provider_installation_id": { + "name": "provider_installation_id", + "type": "bigint", + "primaryKey": false, + "notNull": true + }, + "provider_name": { + "name": "provider_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "oauth_token": { + "name": "oauth_token", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.graph_api_tokens": { + "name": "graph_api_tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "graphApiToken_name_idx": { + "name": "graphApiToken_name_idx", + "columns": [ + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "gat_organization_id_idx": { + "name": "gat_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "gat_federated_graph_id_idx": { + "name": "gat_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "gat_created_by_idx": { + "name": "gat_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "graph_api_tokens_organization_id_organizations_id_fk": { + "name": "graph_api_tokens_organization_id_organizations_id_fk", + "tableFrom": "graph_api_tokens", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_api_tokens_federated_graph_id_federated_graphs_id_fk": { + "name": "graph_api_tokens_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "graph_api_tokens", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_api_tokens_created_by_users_id_fk": { + "name": "graph_api_tokens_created_by_users_id_fk", + "tableFrom": "graph_api_tokens", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "graph_api_tokens_token_unique": { + "name": "graph_api_tokens_token_unique", + "nullsNotDistinct": false, + "columns": [ + "token" + ] + } + }, + "checkConstraints": {} + }, + "public.graph_composition_subgraphs": { + "name": "graph_composition_subgraphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "graph_composition_id": { + "name": "graph_composition_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_target_id": { + "name": "subgraph_target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_name": { + "name": "subgraph_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "change_type": { + "name": "change_type", + "type": "graph_composition_subgraph_change_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'unchanged'" + }, + "is_feature_subgraph": { + "name": "is_feature_subgraph", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "graphcompsub_graph_composition_id_idx": { + "name": "graphcompsub_graph_composition_id_idx", + "columns": [ + { + "expression": "graph_composition_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "graphcompsub_schema_version_id_idx": { + "name": "graphcompsub_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "graph_composition_subgraphs_graph_composition_id_graph_compositions_id_fk": { + "name": "graph_composition_subgraphs_graph_composition_id_graph_compositions_id_fk", + "tableFrom": "graph_composition_subgraphs", + "tableTo": "graph_compositions", + "columnsFrom": [ + "graph_composition_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_composition_subgraphs_schema_version_id_schema_versions_id_fk": { + "name": "graph_composition_subgraphs_schema_version_id_schema_versions_id_fk", + "tableFrom": "graph_composition_subgraphs", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.graph_compositions": { + "name": "graph_compositions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "is_composable": { + "name": "is_composable", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "composition_errors": { + "name": "composition_errors", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composition_warnings": { + "name": "composition_warnings", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "router_config_signature": { + "name": "router_config_signature", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "deployment_error": { + "name": "deployment_error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "admission_error": { + "name": "admission_error", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_by_email": { + "name": "created_by_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_feature_flag_composition": { + "name": "is_feature_flag_composition", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "router_compatibility_version": { + "name": "router_compatibility_version", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'1'" + } + }, + "indexes": { + "graphcomp_schema_version_id_idx": { + "name": "graphcomp_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "graphcomp_created_by_id_idx": { + "name": "graphcomp_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "graph_compositions_schema_version_id_schema_versions_id_fk": { + "name": "graph_compositions_schema_version_id_schema_versions_id_fk", + "tableFrom": "graph_compositions", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_compositions_created_by_id_users_id_fk": { + "name": "graph_compositions_created_by_id_users_id_fk", + "tableFrom": "graph_compositions", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.graph_request_keys": { + "name": "graph_request_keys", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "grk_organization_id_idx": { + "name": "grk_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "grk_federated_graph_id_idx": { + "name": "grk_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "graph_request_keys_organization_id_organizations_id_fk": { + "name": "graph_request_keys_organization_id_organizations_id_fk", + "tableFrom": "graph_request_keys", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "graph_request_keys_federated_graph_id_federated_graphs_id_fk": { + "name": "graph_request_keys_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "graph_request_keys", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "graph_request_keys_federated_graph_id_unique": { + "name": "graph_request_keys_federated_graph_id_unique", + "nullsNotDistinct": false, + "columns": [ + "federated_graph_id" + ] + }, + "graph_request_keys_privateKey_unique": { + "name": "graph_request_keys_privateKey_unique", + "nullsNotDistinct": false, + "columns": [ + "privateKey" + ] + }, + "graph_request_keys_publicKey_unique": { + "name": "graph_request_keys_publicKey_unique", + "nullsNotDistinct": false, + "columns": [ + "publicKey" + ] + } + }, + "checkConstraints": {} + }, + "public.namespace_cache_warmer_config": { + "name": "namespace_cache_warmer_config", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "max_operations_count": { + "name": "max_operations_count", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "nscwc_namespace_id_idx": { + "name": "nscwc_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "namespace_cache_warmer_config_namespace_id_namespaces_id_fk": { + "name": "namespace_cache_warmer_config_namespace_id_namespaces_id_fk", + "tableFrom": "namespace_cache_warmer_config", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "namespace_cache_warmer_config_namespace_id_unique": { + "name": "namespace_cache_warmer_config_namespace_id_unique", + "nullsNotDistinct": false, + "columns": [ + "namespace_id" + ] + } + }, + "checkConstraints": {} + }, + "public.namespace_config": { + "name": "namespace_config", + "schema": "", + "columns": { + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "enable_linting": { + "name": "enable_linting", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enable_graph_pruning": { + "name": "enable_graph_pruning", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "enable_cache_warming": { + "name": "enable_cache_warming", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "checks_timeframe_in_days": { + "name": "checks_timeframe_in_days", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "enable_proposals": { + "name": "enable_proposals", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "namespace_config_namespace_id_namespaces_id_fk": { + "name": "namespace_config_namespace_id_namespaces_id_fk", + "tableFrom": "namespace_config", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "unique_namespace": { + "name": "unique_namespace", + "nullsNotDistinct": false, + "columns": [ + "namespace_id" + ] + } + }, + "checkConstraints": {} + }, + "public.namespace_graph_pruning_check_config": { + "name": "namespace_graph_pruning_check_config", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "graph_pruning_rule": { + "name": "graph_pruning_rule", + "type": "graph_pruning_rules", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "severity_level": { + "name": "severity_level", + "type": "lint_severity", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "grace_period": { + "name": "grace_period", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "scheme_usage_check_period": { + "name": "scheme_usage_check_period", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "nsgpcc_namespace_id_idx": { + "name": "nsgpcc_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "namespace_graph_pruning_check_config_namespace_id_namespaces_id_fk": { + "name": "namespace_graph_pruning_check_config_namespace_id_namespaces_id_fk", + "tableFrom": "namespace_graph_pruning_check_config", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.namespace_lint_check_config": { + "name": "namespace_lint_check_config", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "lint_rule": { + "name": "lint_rule", + "type": "lint_rules", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "severity_level": { + "name": "severity_level", + "type": "lint_severity", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "nslcc_namespace_id_idx": { + "name": "nslcc_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "namespace_lint_check_config_namespace_id_namespaces_id_fk": { + "name": "namespace_lint_check_config_namespace_id_namespaces_id_fk", + "tableFrom": "namespace_lint_check_config", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.namespace_proposal_config": { + "name": "namespace_proposal_config", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "check_severity_level": { + "name": "check_severity_level", + "type": "lint_severity", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "publish_severity_level": { + "name": "publish_severity_level", + "type": "lint_severity", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "namespace_proposal_config_namespace_id_namespaces_id_fk": { + "name": "namespace_proposal_config_namespace_id_namespaces_id_fk", + "tableFrom": "namespace_proposal_config", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "npc_namespace_id_idx": { + "name": "npc_namespace_id_idx", + "nullsNotDistinct": false, + "columns": [ + "namespace_id" + ] + } + }, + "checkConstraints": {} + }, + "public.namespaces": { + "name": "namespaces", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "ns_organization_id_idx": { + "name": "ns_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ns_created_by_idx": { + "name": "ns_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "namespaces_organization_id_organizations_id_fk": { + "name": "namespaces_organization_id_organizations_id_fk", + "tableFrom": "namespaces", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "namespaces_created_by_users_id_fk": { + "name": "namespaces_created_by_users_id_fk", + "tableFrom": "namespaces", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "unique_name": { + "name": "unique_name", + "nullsNotDistinct": false, + "columns": [ + "name", + "organization_id" + ] + } + }, + "checkConstraints": {} + }, + "public.oidc_providers": { + "name": "oidc_providers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "alias": { + "name": "alias", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "oidcp_organization_id_idx": { + "name": "oidcp_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "oidc_providers_organization_id_organizations_id_fk": { + "name": "oidc_providers_organization_id_organizations_id_fk", + "tableFrom": "oidc_providers", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "oidc_providers_alias_unique": { + "name": "oidc_providers_alias_unique", + "nullsNotDistinct": false, + "columns": [ + "alias" + ] + } + }, + "checkConstraints": {} + }, + "public.operation_change_overrides": { + "name": "operation_change_overrides", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "change_type": { + "name": "change_type", + "type": "schema_change_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "hash_change_idx": { + "name": "hash_change_idx", + "columns": [ + { + "expression": "hash", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "change_type", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "path", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "oco_created_by_idx": { + "name": "oco_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "operation_change_overrides_created_by_users_id_fk": { + "name": "operation_change_overrides_created_by_users_id_fk", + "tableFrom": "operation_change_overrides", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.operation_ignore_all_overrides": { + "name": "operation_ignore_all_overrides", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "hash_namespace_ignore_idx": { + "name": "hash_namespace_ignore_idx", + "columns": [ + { + "expression": "hash", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "oiao_created_by_idx": { + "name": "oiao_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "operation_ignore_all_overrides_created_by_users_id_fk": { + "name": "operation_ignore_all_overrides_created_by_users_id_fk", + "tableFrom": "operation_ignore_all_overrides", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_billing": { + "name": "organization_billing", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "plan": { + "name": "plan", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "stripe_customer_id": { + "name": "stripe_customer_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "organization_billing_idx": { + "name": "organization_billing_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "organization_billing_stripe_idx": { + "name": "organization_billing_stripe_idx", + "columns": [ + { + "expression": "stripe_customer_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_billing_organization_id_organizations_id_fk": { + "name": "organization_billing_organization_id_organizations_id_fk", + "tableFrom": "organization_billing", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_features": { + "name": "organization_features", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "feature": { + "name": "feature", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "enabled": { + "name": "enabled", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "limit": { + "name": "limit", + "type": "real", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "organization_feature_idx": { + "name": "organization_feature_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "feature", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orgf_organization_id_idx": { + "name": "orgf_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_features_organization_id_organizations_id_fk": { + "name": "organization_features_organization_id_organizations_id_fk", + "tableFrom": "organization_features", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_group_members": { + "name": "organization_group_members", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_member_id": { + "name": "organization_member_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "group_id": { + "name": "group_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "organization_member_group_idx": { + "name": "organization_member_group_idx", + "columns": [ + { + "expression": "organization_member_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "group_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_group_members_organization_member_id_organization_members_id_fk": { + "name": "organization_group_members_organization_member_id_organization_members_id_fk", + "tableFrom": "organization_group_members", + "tableTo": "organization_members", + "columnsFrom": [ + "organization_member_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_group_members_group_id_organization_groups_id_fk": { + "name": "organization_group_members_group_id_organization_groups_id_fk", + "tableFrom": "organization_group_members", + "tableTo": "organization_groups", + "columnsFrom": [ + "group_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_group_rule_namespaces": { + "name": "organization_group_rule_namespaces", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "rule_id": { + "name": "rule_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_group_rule_namespaces_rule_id_organization_group_rules_id_fk": { + "name": "organization_group_rule_namespaces_rule_id_organization_group_rules_id_fk", + "tableFrom": "organization_group_rule_namespaces", + "tableTo": "organization_group_rules", + "columnsFrom": [ + "rule_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_group_rule_namespaces_namespace_id_namespaces_id_fk": { + "name": "organization_group_rule_namespaces_namespace_id_namespaces_id_fk", + "tableFrom": "organization_group_rule_namespaces", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_group_rule_targets": { + "name": "organization_group_rule_targets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "rule_id": { + "name": "rule_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_group_rule_targets_rule_id_organization_group_rules_id_fk": { + "name": "organization_group_rule_targets_rule_id_organization_group_rules_id_fk", + "tableFrom": "organization_group_rule_targets", + "tableTo": "organization_group_rules", + "columnsFrom": [ + "rule_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_group_rule_targets_target_id_targets_id_fk": { + "name": "organization_group_rule_targets_target_id_targets_id_fk", + "tableFrom": "organization_group_rule_targets", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_group_rules": { + "name": "organization_group_rules", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "group_id": { + "name": "group_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "organization_role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "organization_group_rules_group_id_organization_groups_id_fk": { + "name": "organization_group_rules_group_id_organization_groups_id_fk", + "tableFrom": "organization_group_rules", + "tableTo": "organization_groups", + "columnsFrom": [ + "group_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_groups": { + "name": "organization_groups", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "builtin": { + "name": "builtin", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "kc_group_id": { + "name": "kc_group_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "organization_groups_organization_id_organizations_id_fk": { + "name": "organization_groups_organization_id_organizations_id_fk", + "tableFrom": "organization_groups", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_groups_kc_group_id_unique": { + "name": "organization_groups_kc_group_id_unique", + "nullsNotDistinct": false, + "columns": [ + "kc_group_id" + ] + } + }, + "checkConstraints": {} + }, + "public.organization_integrations": { + "name": "organization_integrations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "events": { + "name": "events", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "integration_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "organization_integration_idx": { + "name": "organization_integration_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orgint_organization_id_idx": { + "name": "orgint_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_integrations_organization_id_organizations_id_fk": { + "name": "organization_integrations_organization_id_organizations_id_fk", + "tableFrom": "organization_integrations", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_invitation_groups": { + "name": "organization_invitation_groups", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "invitation_id": { + "name": "invitation_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "group_id": { + "name": "group_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "org_inv_invitation_idx": { + "name": "org_inv_invitation_idx", + "columns": [ + { + "expression": "invitation_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "org_inv_group_id": { + "name": "org_inv_group_id", + "columns": [ + { + "expression": "group_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_invitation_groups_invitation_id_organization_invitations_id_fk": { + "name": "organization_invitation_groups_invitation_id_organization_invitations_id_fk", + "tableFrom": "organization_invitation_groups", + "tableTo": "organization_invitations", + "columnsFrom": [ + "invitation_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_invitation_groups_group_id_organization_groups_id_fk": { + "name": "organization_invitation_groups_group_id_organization_groups_id_fk", + "tableFrom": "organization_invitation_groups", + "tableTo": "organization_groups", + "columnsFrom": [ + "group_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_invitations": { + "name": "organization_invitations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "invited_by": { + "name": "invited_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "accepted": { + "name": "accepted", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "orginv_organization_id_idx": { + "name": "orginv_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orginv_user_id_idx": { + "name": "orginv_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orginv_invited_by_idx": { + "name": "orginv_invited_by_idx", + "columns": [ + { + "expression": "invited_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_invitations_organization_id_organizations_id_fk": { + "name": "organization_invitations_organization_id_organizations_id_fk", + "tableFrom": "organization_invitations", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_invitations_user_id_users_id_fk": { + "name": "organization_invitations_user_id_users_id_fk", + "tableFrom": "organization_invitations", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_invitations_invited_by_users_id_fk": { + "name": "organization_invitations_invited_by_users_id_fk", + "tableFrom": "organization_invitations", + "tableTo": "users", + "columnsFrom": [ + "invited_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_member_roles": { + "name": "organization_member_roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_member_id": { + "name": "organization_member_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "member_role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "organization_member_role_idx": { + "name": "organization_member_role_idx", + "columns": [ + { + "expression": "organization_member_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "role", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_member_roles_organization_member_id_organization_members_id_fk": { + "name": "organization_member_roles_organization_member_id_organization_members_id_fk", + "tableFrom": "organization_member_roles", + "tableTo": "organization_members", + "columnsFrom": [ + "organization_member_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organization_webhook_configs": { + "name": "organization_webhook_configs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "key": { + "name": "key", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "events": { + "name": "events", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "orgwc_organization_id_idx": { + "name": "orgwc_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_webhook_configs_organization_id_organizations_id_fk": { + "name": "organization_webhook_configs_organization_id_organizations_id_fk", + "tableFrom": "organization_webhook_configs", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.organizations": { + "name": "organizations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "invite_code": { + "name": "invite_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "kc_group_id": { + "name": "kc_group_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "is_deactivated": { + "name": "is_deactivated", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "deactivation_reason": { + "name": "deactivation_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "deactivated_at": { + "name": "deactivated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "queued_for_deletion_at": { + "name": "queued_for_deletion_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "queued_for_deletion_by": { + "name": "queued_for_deletion_by", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "orgs_created_by_idx": { + "name": "orgs_created_by_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organizations_user_id_users_id_fk": { + "name": "organizations_user_id_users_id_fk", + "tableFrom": "organizations", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organizations_slug_unique": { + "name": "organizations_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + }, + "organizations_kc_group_id_unique": { + "name": "organizations_kc_group_id_unique", + "nullsNotDistinct": false, + "columns": [ + "kc_group_id" + ] + } + }, + "checkConstraints": {} + }, + "public.organization_members": { + "name": "organization_members", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "organization_member_idx": { + "name": "organization_member_idx", + "columns": [ + { + "expression": "id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "unique_organization_member_idx": { + "name": "unique_organization_member_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "orgm_organization_id_idx": { + "name": "orgm_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_members_user_id_users_id_fk": { + "name": "organization_members_user_id_users_id_fk", + "tableFrom": "organization_members", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "organization_members_organization_id_organizations_id_fk": { + "name": "organization_members_organization_id_organizations_id_fk", + "tableFrom": "organization_members", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.playground_scripts": { + "name": "playground_scripts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "type": { + "name": "type", + "type": "playground_script_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": { + "ps_organization_id_idx": { + "name": "ps_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "ps_created_by_id_idx": { + "name": "ps_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "playground_scripts_organization_id_organizations_id_fk": { + "name": "playground_scripts_organization_id_organizations_id_fk", + "tableFrom": "playground_scripts", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "playground_scripts_created_by_id_users_id_fk": { + "name": "playground_scripts_created_by_id_users_id_fk", + "tableFrom": "playground_scripts", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.proposal_checks": { + "name": "proposal_checks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "proposal_id": { + "name": "proposal_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "pc_check_id_proposal_id_idx": { + "name": "pc_check_id_proposal_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "proposal_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "proposal_checks_schema_check_id_schema_checks_id_fk": { + "name": "proposal_checks_schema_check_id_schema_checks_id_fk", + "tableFrom": "proposal_checks", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "proposal_checks_proposal_id_proposals_id_fk": { + "name": "proposal_checks_proposal_id_proposals_id_fk", + "tableFrom": "proposal_checks", + "tableTo": "proposals", + "columnsFrom": [ + "proposal_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.proposal_subgraphs": { + "name": "proposal_subgraphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "proposal_id": { + "name": "proposal_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "subgraph_name": { + "name": "subgraph_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "schema_sdl": { + "name": "schema_sdl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_deleted": { + "name": "is_deleted", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_new": { + "name": "is_new", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "is_published": { + "name": "is_published", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "current_schema_version_id": { + "name": "current_schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "labels": { + "name": "labels", + "type": "text[]", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "proposal_subgraphs_proposal_id_proposals_id_fk": { + "name": "proposal_subgraphs_proposal_id_proposals_id_fk", + "tableFrom": "proposal_subgraphs", + "tableTo": "proposals", + "columnsFrom": [ + "proposal_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "proposal_subgraphs_subgraph_id_subgraphs_id_fk": { + "name": "proposal_subgraphs_subgraph_id_subgraphs_id_fk", + "tableFrom": "proposal_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "proposal_subgraphs_current_schema_version_id_schema_versions_id_fk": { + "name": "proposal_subgraphs_current_schema_version_id_schema_versions_id_fk", + "tableFrom": "proposal_subgraphs", + "tableTo": "schema_versions", + "columnsFrom": [ + "current_schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "proposal_subgraph": { + "name": "proposal_subgraph", + "nullsNotDistinct": false, + "columns": [ + "proposal_id", + "subgraph_name" + ] + } + }, + "checkConstraints": {} + }, + "public.proposals": { + "name": "proposals", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "state": { + "name": "state", + "type": "proposal_state", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "pr_created_by_id_idx": { + "name": "pr_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "pr_federated_graph_id_idx": { + "name": "pr_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "proposals_federated_graph_id_federated_graphs_id_fk": { + "name": "proposals_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "proposals", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "proposals_created_by_id_users_id_fk": { + "name": "proposals_created_by_id_users_id_fk", + "tableFrom": "proposals", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "federated_graph_proposal_name": { + "name": "federated_graph_proposal_name", + "nullsNotDistinct": false, + "columns": [ + "federated_graph_id", + "name" + ] + } + }, + "checkConstraints": {} + }, + "public.schema_check_change_action": { + "name": "schema_check_change_action", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "change_type": { + "name": "change_type", + "type": "schema_change_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "change_message": { + "name": "change_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_breaking": { + "name": "is_breaking", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "schema_check_subgraph_id": { + "name": "schema_check_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "scca_schema_check_id_idx": { + "name": "scca_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_change_action_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_change_action_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_change_action", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_change_action_schema_check_subgraph_id_schema_check_subgraphs_id_fk": { + "name": "schema_check_change_action_schema_check_subgraph_id_schema_check_subgraphs_id_fk", + "tableFrom": "schema_check_change_action", + "tableTo": "schema_check_subgraphs", + "columnsFrom": [ + "schema_check_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_change_operation_usage": { + "name": "schema_check_change_operation_usage", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_change_action_id": { + "name": "schema_check_change_action_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "first_seen_at": { + "name": "first_seen_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "last_seen_at": { + "name": "last_seen_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "is_safe_override": { + "name": "is_safe_override", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + } + }, + "indexes": { + "sccou_schema_check_change_action_id_idx": { + "name": "sccou_schema_check_change_action_id_idx", + "columns": [ + { + "expression": "schema_check_change_action_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sccou_federated_graph_id_idx": { + "name": "sccou_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_change_operation_usage_schema_check_change_action_id_schema_check_change_action_id_fk": { + "name": "schema_check_change_operation_usage_schema_check_change_action_id_schema_check_change_action_id_fk", + "tableFrom": "schema_check_change_operation_usage", + "tableTo": "schema_check_change_action", + "columnsFrom": [ + "schema_check_change_action_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_change_operation_usage_federated_graph_id_federated_graphs_id_fk": { + "name": "schema_check_change_operation_usage_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "schema_check_change_operation_usage", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_composition": { + "name": "schema_check_composition", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "composition_errors": { + "name": "composition_errors", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composition_warnings": { + "name": "composition_warnings", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "composed_schema_sdl": { + "name": "composed_schema_sdl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_schema": { + "name": "client_schema", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "scc_schema_check_id_idx": { + "name": "scc_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scc_target_id_idx": { + "name": "scc_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_composition_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_composition_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_composition", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_composition_target_id_targets_id_fk": { + "name": "schema_check_composition_target_id_targets_id_fk", + "tableFrom": "schema_check_composition", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_federated_graphs": { + "name": "schema_check_federated_graphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "check_id": { + "name": "check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "traffic_check_days": { + "name": "traffic_check_days", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "scfg_check_id_idx": { + "name": "scfg_check_id_idx", + "columns": [ + { + "expression": "check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scfg_federated_graph_id_idx": { + "name": "scfg_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_federated_graphs_check_id_schema_checks_id_fk": { + "name": "schema_check_federated_graphs_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_federated_graphs", + "tableTo": "schema_checks", + "columnsFrom": [ + "check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_federated_graphs_federated_graph_id_federated_graphs_id_fk": { + "name": "schema_check_federated_graphs_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "schema_check_federated_graphs", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_graph_pruning_action": { + "name": "schema_check_graph_pruning_action", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "graph_pruning_rule": { + "name": "graph_pruning_rule", + "type": "graph_pruning_rules", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "field_path": { + "name": "field_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_error": { + "name": "is_error", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "location": { + "name": "location", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "schema_check_subgraph_id": { + "name": "schema_check_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "scgpa_schema_check_id_idx": { + "name": "scgpa_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scgpa_federated_graph_id_idx": { + "name": "scgpa_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_graph_pruning_action_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_graph_pruning_action_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_graph_pruning_action", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_graph_pruning_action_federated_graph_id_federated_graphs_id_fk": { + "name": "schema_check_graph_pruning_action_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "schema_check_graph_pruning_action", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_graph_pruning_action_schema_check_subgraph_id_schema_check_subgraphs_id_fk": { + "name": "schema_check_graph_pruning_action_schema_check_subgraph_id_schema_check_subgraphs_id_fk", + "tableFrom": "schema_check_graph_pruning_action", + "tableTo": "schema_check_subgraphs", + "columnsFrom": [ + "schema_check_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_lint_action": { + "name": "schema_check_lint_action", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "lint_rule_type": { + "name": "lint_rule_type", + "type": "lint_rules", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_error": { + "name": "is_error", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "location": { + "name": "location", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "schema_check_subgraph_id": { + "name": "schema_check_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sclact_schema_check_id_idx": { + "name": "sclact_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_lint_action_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_lint_action_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_lint_action", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_lint_action_schema_check_subgraph_id_schema_check_subgraphs_id_fk": { + "name": "schema_check_lint_action_schema_check_subgraph_id_schema_check_subgraphs_id_fk", + "tableFrom": "schema_check_lint_action", + "tableTo": "schema_check_subgraphs", + "columnsFrom": [ + "schema_check_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_proposal_match": { + "name": "schema_check_proposal_match", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "proposal_id": { + "name": "proposal_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "proposal_match": { + "name": "proposal_match", + "type": "boolean", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "scpm_schema_check_id_idx": { + "name": "scpm_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scpm_proposal_id_idx": { + "name": "scpm_proposal_id_idx", + "columns": [ + { + "expression": "proposal_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_proposal_match_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_proposal_match_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_proposal_match", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_proposal_match_proposal_id_proposals_id_fk": { + "name": "schema_check_proposal_match_proposal_id_proposals_id_fk", + "tableFrom": "schema_check_proposal_match", + "tableTo": "proposals", + "columnsFrom": [ + "proposal_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "unique_schema_check_proposal_match": { + "name": "unique_schema_check_proposal_match", + "nullsNotDistinct": false, + "columns": [ + "schema_check_id", + "proposal_id" + ] + } + }, + "checkConstraints": {} + }, + "public.schema_check_subgraphs": { + "name": "schema_check_subgraphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_check_id": { + "name": "schema_check_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "subgraph_name": { + "name": "subgraph_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "proposed_subgraph_schema_sdl": { + "name": "proposed_subgraph_schema_sdl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_deleted": { + "name": "is_deleted", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_new": { + "name": "is_new", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "labels": { + "name": "labels", + "type": "text[]", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "scs_schema_check_id_idx": { + "name": "scs_schema_check_id_idx", + "columns": [ + { + "expression": "schema_check_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scs_subgraph_id_idx": { + "name": "scs_subgraph_id_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_subgraphs_schema_check_id_schema_checks_id_fk": { + "name": "schema_check_subgraphs_schema_check_id_schema_checks_id_fk", + "tableFrom": "schema_check_subgraphs", + "tableTo": "schema_checks", + "columnsFrom": [ + "schema_check_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_subgraphs_subgraph_id_subgraphs_id_fk": { + "name": "schema_check_subgraphs_subgraph_id_subgraphs_id_fk", + "tableFrom": "schema_check_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "schema_check_subgraphs_namespace_id_namespaces_id_fk": { + "name": "schema_check_subgraphs_namespace_id_namespaces_id_fk", + "tableFrom": "schema_check_subgraphs", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_check_subgraphs_federated_graphs": { + "name": "schema_check_subgraphs_federated_graphs", + "schema": "", + "columns": { + "schema_check_federated_graph_id": { + "name": "schema_check_federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "schema_check_subgraph_id": { + "name": "schema_check_subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "scsfg_schema_check_subgraph_id_idx": { + "name": "scsfg_schema_check_subgraph_id_idx", + "columns": [ + { + "expression": "schema_check_subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "scsfg_schema_check_federated_graph_id_idx": { + "name": "scsfg_schema_check_federated_graph_id_idx", + "columns": [ + { + "expression": "schema_check_federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_check_subgraphs_federated_graphs_schema_check_federated_graph_id_schema_check_federated_graphs_id_fk": { + "name": "schema_check_subgraphs_federated_graphs_schema_check_federated_graph_id_schema_check_federated_graphs_id_fk", + "tableFrom": "schema_check_subgraphs_federated_graphs", + "tableTo": "schema_check_federated_graphs", + "columnsFrom": [ + "schema_check_federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "schema_check_subgraphs_federated_graphs_schema_check_subgraph_id_schema_check_subgraphs_id_fk": { + "name": "schema_check_subgraphs_federated_graphs_schema_check_subgraph_id_schema_check_subgraphs_id_fk", + "tableFrom": "schema_check_subgraphs_federated_graphs", + "tableTo": "schema_check_subgraphs", + "columnsFrom": [ + "schema_check_subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_checks": { + "name": "schema_checks", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "is_composable": { + "name": "is_composable", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "is_deleted": { + "name": "is_deleted", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "has_breaking_changes": { + "name": "has_breaking_changes", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "has_lint_errors": { + "name": "has_lint_errors", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "has_graph_pruning_errors": { + "name": "has_graph_pruning_errors", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "has_client_traffic": { + "name": "has_client_traffic", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "proposal_match": { + "name": "proposal_match", + "type": "proposal_match", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "client_traffic_check_skipped": { + "name": "client_traffic_check_skipped", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "lint_skipped": { + "name": "lint_skipped", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "graph_pruning_skipped": { + "name": "graph_pruning_skipped", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "composition_skipped": { + "name": "composition_skipped", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "breaking_changes_skipped": { + "name": "breaking_changes_skipped", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "proposed_subgraph_schema_sdl": { + "name": "proposed_subgraph_schema_sdl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "gh_details": { + "name": "gh_details", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "forced_success": { + "name": "forced_success", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "vcs_context": { + "name": "vcs_context", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "error_message": { + "name": "error_message", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sc_target_id_idx": { + "name": "sc_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_checks_target_id_targets_id_fk": { + "name": "schema_checks_target_id_targets_id_fk", + "tableFrom": "schema_checks", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_versions": { + "name": "schema_versions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "schema_sdl": { + "name": "schema_sdl", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_schema": { + "name": "client_schema", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "is_v2_graph": { + "name": "is_v2_graph", + "type": "boolean", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sv_organization_id_idx": { + "name": "sv_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sv_target_id_idx": { + "name": "sv_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_versions_organization_id_organizations_id_fk": { + "name": "schema_versions_organization_id_organizations_id_fk", + "tableFrom": "schema_versions", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.schema_version_change_action": { + "name": "schema_version_change_action", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "change_type": { + "name": "change_type", + "type": "schema_change_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "change_message": { + "name": "change_message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "svca_schema_version_id_idx": { + "name": "svca_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "schema_version_change_action_schema_version_id_schema_versions_id_fk": { + "name": "schema_version_change_action_schema_version_id_schema_versions_id_fk", + "tableFrom": "schema_version_change_action", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.sessions": { + "name": "sessions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "sessions_user_id_idx": { + "name": "sessions_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "sessions_user_id_users_id_fk": { + "name": "sessions_user_id_users_id_fk", + "tableFrom": "sessions", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "sessions_user_id_unique": { + "name": "sessions_user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id" + ] + } + }, + "checkConstraints": {} + }, + "public.slack_installations": { + "name": "slack_installations", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "slack_organization_id": { + "name": "slack_organization_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slack_organization_name": { + "name": "slack_organization_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slack_channel_id": { + "name": "slack_channel_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slack_channel_name": { + "name": "slack_channel_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slack_user_id": { + "name": "slack_user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "slack_installations_idx": { + "name": "slack_installations_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "slack_organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "slack_channel_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "slackinst_organization_id_idx": { + "name": "slackinst_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "slack_installations_organization_id_organizations_id_fk": { + "name": "slack_installations_organization_id_organizations_id_fk", + "tableFrom": "slack_installations", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.slack_integration_configs": { + "name": "slack_integration_configs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "integration_id": { + "name": "integration_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "slackintconf_integration_id_idx": { + "name": "slackintconf_integration_id_idx", + "columns": [ + { + "expression": "integration_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "slack_integration_configs_integration_id_organization_integrations_id_fk": { + "name": "slack_integration_configs_integration_id_organization_integrations_id_fk", + "tableFrom": "slack_integration_configs", + "tableTo": "organization_integrations", + "columnsFrom": [ + "integration_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.slack_schema_update_event_configs": { + "name": "slack_schema_update_event_configs", + "schema": "", + "columns": { + "slack_integration_config_id": { + "name": "slack_integration_config_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "slacksuec_slack_integration_config_id_idx": { + "name": "slacksuec_slack_integration_config_id_idx", + "columns": [ + { + "expression": "slack_integration_config_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "slacksuec_federated_graph_id_idx": { + "name": "slacksuec_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "slack_schema_update_event_configs_slack_integration_config_id_slack_integration_configs_id_fk": { + "name": "slack_schema_update_event_configs_slack_integration_config_id_slack_integration_configs_id_fk", + "tableFrom": "slack_schema_update_event_configs", + "tableTo": "slack_integration_configs", + "columnsFrom": [ + "slack_integration_config_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "slack_schema_update_event_configs_federated_graph_id_federated_graphs_id_fk": { + "name": "slack_schema_update_event_configs_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "slack_schema_update_event_configs", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "slack_schema_update_event_configs_slack_integration_config_id_federated_graph_id_pk": { + "name": "slack_schema_update_event_configs_slack_integration_config_id_federated_graph_id_pk", + "columns": [ + "slack_integration_config_id", + "federated_graph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.subgraph_members": { + "name": "subgraph_members", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "unique_subgraph_member_idx": { + "name": "unique_subgraph_member_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sm_user_id_idx": { + "name": "sm_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "sm_subgraph_id_idx": { + "name": "sm_subgraph_id_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "subgraph_members_user_id_users_id_fk": { + "name": "subgraph_members_user_id_users_id_fk", + "tableFrom": "subgraph_members", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "subgraph_members_subgraph_id_subgraphs_id_fk": { + "name": "subgraph_members_subgraph_id_subgraphs_id_fk", + "tableFrom": "subgraph_members", + "tableTo": "subgraphs", + "columnsFrom": [ + "subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.subgraphs": { + "name": "subgraphs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "routing_url": { + "name": "routing_url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "subscription_url": { + "name": "subscription_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "subscription_protocol": { + "name": "subscription_protocol", + "type": "subscription_protocol", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'ws'" + }, + "websocket_subprotocol": { + "name": "websocket_subprotocol", + "type": "websocket_subprotocol", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'auto'" + }, + "schema_version_id": { + "name": "schema_version_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "is_feature_subgraph": { + "name": "is_feature_subgraph", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_event_driven_graph": { + "name": "is_event_driven_graph", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "subgraphs_target_id_idx": { + "name": "subgraphs_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "subgraphs_schema_version_id_idx": { + "name": "subgraphs_schema_version_id_idx", + "columns": [ + { + "expression": "schema_version_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "subgraphs_schema_version_id_schema_versions_id_fk": { + "name": "subgraphs_schema_version_id_schema_versions_id_fk", + "tableFrom": "subgraphs", + "tableTo": "schema_versions", + "columnsFrom": [ + "schema_version_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "subgraphs_target_id_targets_id_fk": { + "name": "subgraphs_target_id_targets_id_fk", + "tableFrom": "subgraphs", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.federated_subgraphs": { + "name": "federated_subgraphs", + "schema": "", + "columns": { + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subgraph_id": { + "name": "subgraph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "fs_federated_graph_id_idx": { + "name": "fs_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "fs_subgraph_id_idx": { + "name": "fs_subgraph_id_idx", + "columns": [ + { + "expression": "subgraph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "federated_subgraphs_federated_graph_id_federated_graphs_id_fk": { + "name": "federated_subgraphs_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "federated_subgraphs", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "federated_subgraphs_subgraph_id_subgraphs_id_fk": { + "name": "federated_subgraphs_subgraph_id_subgraphs_id_fk", + "tableFrom": "federated_subgraphs", + "tableTo": "subgraphs", + "columnsFrom": [ + "subgraph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "federated_subgraphs_federated_graph_id_subgraph_id_pk": { + "name": "federated_subgraphs_federated_graph_id_subgraph_id_pk", + "columns": [ + "federated_graph_id", + "subgraph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.target_label_matchers": { + "name": "target_label_matchers", + "schema": "", + "columns": { + "target_id": { + "name": "target_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "label_matcher": { + "name": "label_matcher", + "type": "text[]", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "tlm_target_id_idx": { + "name": "tlm_target_id_idx", + "columns": [ + { + "expression": "target_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "target_label_matchers_target_id_targets_id_fk": { + "name": "target_label_matchers_target_id_targets_id_fk", + "tableFrom": "target_label_matchers", + "tableTo": "targets", + "columnsFrom": [ + "target_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.targets": { + "name": "targets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "target_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "labels": { + "name": "labels", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "readme": { + "name": "readme", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "namespace_id": { + "name": "namespace_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "organization_name_idx": { + "name": "organization_name_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "type", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "name", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "targets_organization_id_idx": { + "name": "targets_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "targets_created_by_idx": { + "name": "targets_created_by_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "targets_namespace_id_idx": { + "name": "targets_namespace_id_idx", + "columns": [ + { + "expression": "namespace_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "targets_organization_id_organizations_id_fk": { + "name": "targets_organization_id_organizations_id_fk", + "tableFrom": "targets", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "targets_created_by_users_id_fk": { + "name": "targets_created_by_users_id_fk", + "tableFrom": "targets", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "targets_namespace_id_namespaces_id_fk": { + "name": "targets_namespace_id_namespaces_id_fk", + "tableFrom": "targets", + "tableTo": "namespaces", + "columnsFrom": [ + "namespace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "active": { + "name": "active", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "checkConstraints": {} + }, + "public.webhook_deliveries": { + "name": "webhook_deliveries", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "webhook_delivery_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "event_name": { + "name": "event_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "payload": { + "name": "payload", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "request_headers": { + "name": "request_headers", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "response_headers": { + "name": "response_headers", + "type": "json", + "primaryKey": false, + "notNull": false + }, + "response_status_code": { + "name": "response_status_code", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "response_error_code": { + "name": "response_error_code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "error_message": { + "name": "error_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "response_body": { + "name": "response_body", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "retry_count": { + "name": "retry_count", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "duration": { + "name": "duration", + "type": "real", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "original_delivery_id": { + "name": "original_delivery_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "webhd_organization_id_idx": { + "name": "webhd_organization_id_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "webhd_created_by_id_idx": { + "name": "webhd_created_by_id_idx", + "columns": [ + { + "expression": "created_by_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "webhook_deliveries_created_by_id_users_id_fk": { + "name": "webhook_deliveries_created_by_id_users_id_fk", + "tableFrom": "webhook_deliveries", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "webhook_deliveries_organization_id_organizations_id_fk": { + "name": "webhook_deliveries_organization_id_organizations_id_fk", + "tableFrom": "webhook_deliveries", + "tableTo": "organizations", + "columnsFrom": [ + "organization_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.webhook_graph_schema_update": { + "name": "webhook_graph_schema_update", + "schema": "", + "columns": { + "webhook_id": { + "name": "webhook_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "wgsu_webhook_id_idx": { + "name": "wgsu_webhook_id_idx", + "columns": [ + { + "expression": "webhook_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "wgsu_federated_graph_id_idx": { + "name": "wgsu_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "webhook_graph_schema_update_webhook_id_organization_webhook_configs_id_fk": { + "name": "webhook_graph_schema_update_webhook_id_organization_webhook_configs_id_fk", + "tableFrom": "webhook_graph_schema_update", + "tableTo": "organization_webhook_configs", + "columnsFrom": [ + "webhook_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "webhook_graph_schema_update_federated_graph_id_federated_graphs_id_fk": { + "name": "webhook_graph_schema_update_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "webhook_graph_schema_update", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "webhook_graph_schema_update_webhook_id_federated_graph_id_pk": { + "name": "webhook_graph_schema_update_webhook_id_federated_graph_id_pk", + "columns": [ + "webhook_id", + "federated_graph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "public.webhook_proposal_state_update": { + "name": "webhook_proposal_state_update", + "schema": "", + "columns": { + "webhook_id": { + "name": "webhook_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "federated_graph_id": { + "name": "federated_graph_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "wpsu_webhook_id_idx": { + "name": "wpsu_webhook_id_idx", + "columns": [ + { + "expression": "webhook_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "wpsu_federated_graph_id_idx": { + "name": "wpsu_federated_graph_id_idx", + "columns": [ + { + "expression": "federated_graph_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "webhook_proposal_state_update_webhook_id_organization_webhook_configs_id_fk": { + "name": "webhook_proposal_state_update_webhook_id_organization_webhook_configs_id_fk", + "tableFrom": "webhook_proposal_state_update", + "tableTo": "organization_webhook_configs", + "columnsFrom": [ + "webhook_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "webhook_proposal_state_update_federated_graph_id_federated_graphs_id_fk": { + "name": "webhook_proposal_state_update_federated_graph_id_federated_graphs_id_fk", + "tableFrom": "webhook_proposal_state_update", + "tableTo": "federated_graphs", + "columnsFrom": [ + "federated_graph_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "webhook_proposal_state_update_webhook_id_federated_graph_id_pk": { + "name": "webhook_proposal_state_update_webhook_id_federated_graph_id_pk", + "columns": [ + "webhook_id", + "federated_graph_id" + ] + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "enums": { + "public.git_installation_type": { + "name": "git_installation_type", + "schema": "public", + "values": [ + "PERSONAL", + "ORGANIZATION" + ] + }, + "public.graph_composition_subgraph_change_type": { + "name": "graph_composition_subgraph_change_type", + "schema": "public", + "values": [ + "added", + "removed", + "updated", + "unchanged" + ] + }, + "public.graph_pruning_rules": { + "name": "graph_pruning_rules", + "schema": "public", + "values": [ + "UNUSED_FIELDS", + "DEPRECATED_FIELDS", + "REQUIRE_DEPRECATION_BEFORE_DELETION" + ] + }, + "public.integration_type": { + "name": "integration_type", + "schema": "public", + "values": [ + "slack" + ] + }, + "public.lint_rules": { + "name": "lint_rules", + "schema": "public", + "values": [ + "FIELD_NAMES_SHOULD_BE_CAMEL_CASE", + "TYPE_NAMES_SHOULD_BE_PASCAL_CASE", + "SHOULD_NOT_HAVE_TYPE_PREFIX", + "SHOULD_NOT_HAVE_TYPE_SUFFIX", + "SHOULD_NOT_HAVE_INPUT_PREFIX", + "SHOULD_HAVE_INPUT_SUFFIX", + "SHOULD_NOT_HAVE_ENUM_PREFIX", + "SHOULD_NOT_HAVE_ENUM_SUFFIX", + "SHOULD_NOT_HAVE_INTERFACE_PREFIX", + "SHOULD_NOT_HAVE_INTERFACE_SUFFIX", + "ENUM_VALUES_SHOULD_BE_UPPER_CASE", + "ORDER_FIELDS", + "ORDER_ENUM_VALUES", + "ORDER_DEFINITIONS", + "ALL_TYPES_REQUIRE_DESCRIPTION", + "DISALLOW_CASE_INSENSITIVE_ENUM_VALUES", + "NO_TYPENAME_PREFIX_IN_TYPE_FIELDS", + "REQUIRE_DEPRECATION_REASON" + ] + }, + "public.lint_severity": { + "name": "lint_severity", + "schema": "public", + "values": [ + "warn", + "error" + ] + }, + "public.member_role": { + "name": "member_role", + "schema": "public", + "values": [ + "admin", + "developer", + "viewer" + ] + }, + "public.organization_role": { + "name": "organization_role", + "schema": "public", + "values": [ + "organization-admin", + "organization-developer", + "organization-viewer", + "organization-apikey-manager", + "namespace-admin", + "namespace-viewer", + "graph-admin", + "graph-viewer", + "subgraph-admin", + "subgraph-publisher", + "subgraph-viewer" + ] + }, + "public.playground_script_type": { + "name": "playground_script_type", + "schema": "public", + "values": [ + "pre-flight", + "pre-operation", + "post-operation" + ] + }, + "public.proposal_match": { + "name": "proposal_match", + "schema": "public", + "values": [ + "success", + "warn", + "error" + ] + }, + "public.proposal_state": { + "name": "proposal_state", + "schema": "public", + "values": [ + "DRAFT", + "APPROVED", + "PUBLISHED", + "CLOSED" + ] + }, + "public.schema_change_type": { + "name": "schema_change_type", + "schema": "public", + "values": [ + "FIELD_ARGUMENT_DESCRIPTION_CHANGED", + "FIELD_ARGUMENT_DEFAULT_CHANGED", + "FIELD_ARGUMENT_TYPE_CHANGED", + "DIRECTIVE_REMOVED", + "DIRECTIVE_ADDED", + "DIRECTIVE_DESCRIPTION_CHANGED", + "DIRECTIVE_LOCATION_ADDED", + "DIRECTIVE_LOCATION_REMOVED", + "DIRECTIVE_ARGUMENT_ADDED", + "DIRECTIVE_ARGUMENT_REMOVED", + "DIRECTIVE_ARGUMENT_DESCRIPTION_CHANGED", + "DIRECTIVE_ARGUMENT_DEFAULT_VALUE_CHANGED", + "DIRECTIVE_ARGUMENT_TYPE_CHANGED", + "ENUM_VALUE_REMOVED", + "ENUM_VALUE_ADDED", + "ENUM_VALUE_DESCRIPTION_CHANGED", + "ENUM_VALUE_DEPRECATION_REASON_CHANGED", + "ENUM_VALUE_DEPRECATION_REASON_ADDED", + "ENUM_VALUE_DEPRECATION_REASON_REMOVED", + "FIELD_REMOVED", + "FIELD_ADDED", + "FIELD_DESCRIPTION_CHANGED", + "FIELD_DESCRIPTION_ADDED", + "FIELD_DESCRIPTION_REMOVED", + "FIELD_DEPRECATION_ADDED", + "FIELD_DEPRECATION_REMOVED", + "FIELD_DEPRECATION_REASON_CHANGED", + "FIELD_DEPRECATION_REASON_ADDED", + "FIELD_DEPRECATION_REASON_REMOVED", + "FIELD_TYPE_CHANGED", + "FIELD_ARGUMENT_ADDED", + "FIELD_ARGUMENT_REMOVED", + "INPUT_FIELD_REMOVED", + "INPUT_FIELD_ADDED", + "INPUT_FIELD_DESCRIPTION_ADDED", + "INPUT_FIELD_DESCRIPTION_REMOVED", + "INPUT_FIELD_DESCRIPTION_CHANGED", + "INPUT_FIELD_DEFAULT_VALUE_CHANGED", + "INPUT_FIELD_TYPE_CHANGED", + "OBJECT_TYPE_INTERFACE_ADDED", + "OBJECT_TYPE_INTERFACE_REMOVED", + "SCHEMA_QUERY_TYPE_CHANGED", + "SCHEMA_MUTATION_TYPE_CHANGED", + "SCHEMA_SUBSCRIPTION_TYPE_CHANGED", + "TYPE_REMOVED", + "TYPE_ADDED", + "TYPE_KIND_CHANGED", + "TYPE_DESCRIPTION_CHANGED", + "TYPE_DESCRIPTION_REMOVED", + "TYPE_DESCRIPTION_ADDED", + "UNION_MEMBER_REMOVED", + "UNION_MEMBER_ADDED", + "DIRECTIVE_USAGE_UNION_MEMBER_ADDED", + "DIRECTIVE_USAGE_UNION_MEMBER_REMOVED", + "DIRECTIVE_USAGE_ENUM_ADDED", + "DIRECTIVE_USAGE_ENUM_REMOVED", + "DIRECTIVE_USAGE_ENUM_VALUE_ADDED", + "DIRECTIVE_USAGE_ENUM_VALUE_REMOVED", + "DIRECTIVE_USAGE_INPUT_OBJECT_ADDED", + "DIRECTIVE_USAGE_INPUT_OBJECT_REMOVED", + "DIRECTIVE_USAGE_FIELD_ADDED", + "DIRECTIVE_USAGE_FIELD_REMOVED", + "DIRECTIVE_USAGE_SCALAR_ADDED", + "DIRECTIVE_USAGE_SCALAR_REMOVED", + "DIRECTIVE_USAGE_OBJECT_ADDED", + "DIRECTIVE_USAGE_OBJECT_REMOVED", + "DIRECTIVE_USAGE_INTERFACE_ADDED", + "DIRECTIVE_USAGE_INTERFACE_REMOVED", + "DIRECTIVE_USAGE_ARGUMENT_DEFINITION_ADDED", + "DIRECTIVE_USAGE_ARGUMENT_DEFINITION_REMOVED", + "DIRECTIVE_USAGE_SCHEMA_ADDED", + "DIRECTIVE_USAGE_SCHEMA_REMOVED", + "DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED", + "DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED", + "DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_ADDED", + "DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_REMOVED" + ] + }, + "public.subscription_protocol": { + "name": "subscription_protocol", + "schema": "public", + "values": [ + "ws", + "sse", + "sse_post" + ] + }, + "public.status": { + "name": "status", + "schema": "public", + "values": [ + "incomplete", + "incomplete_expired", + "trialing", + "active", + "past_due", + "canceled", + "unpaid", + "paused" + ] + }, + "public.target_type": { + "name": "target_type", + "schema": "public", + "values": [ + "federated", + "subgraph" + ] + }, + "public.webhook_delivery_type": { + "name": "webhook_delivery_type", + "schema": "public", + "values": [ + "webhook", + "slack", + "admission" + ] + }, + "public.websocket_subprotocol": { + "name": "websocket_subprotocol", + "schema": "public", + "values": [ + "auto", + "graphql-ws", + "graphql-transport-ws" + ] + } + }, + "schemas": {}, + "sequences": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/controlplane/migrations/meta/_journal.json b/controlplane/migrations/meta/_journal.json index d16fedbd6d..e5f89977eb 100644 --- a/controlplane/migrations/meta/_journal.json +++ b/controlplane/migrations/meta/_journal.json @@ -890,6 +890,13 @@ "when": 1751484753170, "tag": "0126_breezy_the_fallen", "breakpoints": true + }, + { + "idx": 127, + "version": "7", + "when": 1752152067875, + "tag": "0127_lonely_centennial", + "breakpoints": true } ] } \ No newline at end of file diff --git a/controlplane/src/core/bufservices/subgraph/getSubgraphMembers.ts b/controlplane/src/core/bufservices/subgraph/getSubgraphMembers.ts index 8eb04b8358..9c9f9a5c78 100644 --- a/controlplane/src/core/bufservices/subgraph/getSubgraphMembers.ts +++ b/controlplane/src/core/bufservices/subgraph/getSubgraphMembers.ts @@ -8,6 +8,7 @@ import { import { SubgraphRepository } from '../../repositories/SubgraphRepository.js'; import type { RouterOptions } from '../../routes.js'; import { enrichLogger, getLogger, handleError } from '../../util.js'; +import { UnauthorizedError } from '../../errors/errors.js'; export function getSubgraphMembers( opts: RouterOptions, @@ -34,6 +35,10 @@ export function getSubgraphMembers( }; } + if (!authContext.rbac.hasSubGraphReadAccess(subgraph)) { + throw new UnauthorizedError(); + } + return { response: { code: EnumStatusCode.OK, diff --git a/controlplane/src/core/bufservices/subgraph/getSubgraphSDLFromLatestComposition.ts b/controlplane/src/core/bufservices/subgraph/getSubgraphSDLFromLatestComposition.ts index a0ec344b69..9cffeeb17a 100644 --- a/controlplane/src/core/bufservices/subgraph/getSubgraphSDLFromLatestComposition.ts +++ b/controlplane/src/core/bufservices/subgraph/getSubgraphSDLFromLatestComposition.ts @@ -10,6 +10,7 @@ import { DefaultNamespace } from '../../repositories/NamespaceRepository.js'; import { SubgraphRepository } from '../../repositories/SubgraphRepository.js'; import type { RouterOptions } from '../../routes.js'; import { enrichLogger, getLogger, handleError } from '../../util.js'; +import { UnauthorizedError } from '../../errors/errors.js'; export function getSubgraphSDLFromLatestComposition( opts: RouterOptions, @@ -37,6 +38,10 @@ export function getSubgraphSDLFromLatestComposition( }; } + if (!authContext.rbac.hasSubGraphReadAccess(subgraph)) { + throw new UnauthorizedError(); + } + const schemaVersion = await subgraphRepo.getSDLFromLatestComposition({ subgraphTargetId: subgraph.targetId, federatedGraphTargetId: federatedGraph.targetId, diff --git a/controlplane/src/core/repositories/FeatureFlagRepository.ts b/controlplane/src/core/repositories/FeatureFlagRepository.ts index 59f1923dcb..bb57ffb9b9 100644 --- a/controlplane/src/core/repositories/FeatureFlagRepository.ts +++ b/controlplane/src/core/repositories/FeatureFlagRepository.ts @@ -252,7 +252,8 @@ export class FeatureFlagRepository { const graphAdmin = rbac.ruleFor('subgraph-admin'); const graphPublisher = rbac.ruleFor('subgraph-publisher'); - if (!graphAdmin && !graphPublisher) { + const graphViewer = rbac.ruleFor('subgraph-viewer'); + if (!graphAdmin && !graphPublisher && !graphViewer) { return false; } @@ -269,6 +270,11 @@ export class FeatureFlagRepository { resources.push(...graphPublisher.resources); } + if (graphViewer) { + namespaces.push(...graphViewer.namespaces); + resources.push(...graphViewer.resources); + } + if (namespaces.length > 0 && resources.length > 0) { conditions.push( or( diff --git a/controlplane/src/core/repositories/SubgraphRepository.ts b/controlplane/src/core/repositories/SubgraphRepository.ts index 2166ea58ab..3dbb164b28 100644 --- a/controlplane/src/core/repositories/SubgraphRepository.ts +++ b/controlplane/src/core/repositories/SubgraphRepository.ts @@ -589,7 +589,8 @@ export class SubgraphRepository { const graphAdmin = rbac.ruleFor('subgraph-admin'); const graphPublisher = rbac.ruleFor('subgraph-publisher'); - if (!graphAdmin && !graphPublisher) { + const graphViewer = rbac.ruleFor('subgraph-viewer'); + if (!graphAdmin && !graphPublisher && !graphViewer) { return false; } @@ -606,6 +607,11 @@ export class SubgraphRepository { resources.push(...graphPublisher.resources); } + if (graphViewer) { + namespaces.push(...graphViewer.namespaces); + resources.push(...graphViewer.resources); + } + if (namespaces.length > 0 && resources.length > 0) { conditions.push( or( @@ -1386,6 +1392,9 @@ export class SubgraphRepository { .where(and(eq(targets.id, targetId), eq(schema.targets.organizationId, this.organizationId))); } + /** + * @deprecated Subgraph members was deprecated in favor of group resources. + */ public getSubgraphMembers(subgraphId: string): Promise { return this.db .select({ diff --git a/controlplane/src/core/services/RBACEvaluator.ts b/controlplane/src/core/services/RBACEvaluator.ts index 732475c9cf..1dac4b5ba7 100644 --- a/controlplane/src/core/services/RBACEvaluator.ts +++ b/controlplane/src/core/services/RBACEvaluator.ts @@ -218,7 +218,10 @@ export class RBACEvaluator { return true; } - return this.isOrganizationViewer || this.hasSubGraphWriteAccess(graph); + return ( + this.isOrganizationViewer || + this.checkTargetAccess(graph, ['subgraph-admin', 'subgraph-publisher', 'subgraph-viewer']) + ); } private checkNamespaceAccess(ns: Namespace, requiredRoles: OrganizationRole[]) { diff --git a/controlplane/src/db/schema.ts b/controlplane/src/db/schema.ts index 2b3a5c3166..66c43dd967 100644 --- a/controlplane/src/db/schema.ts +++ b/controlplane/src/db/schema.ts @@ -1346,6 +1346,7 @@ export const organizationRoleEnum = pgEnum('organization_role', [ 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ] as const); export const organizationGroups = pgTable('organization_groups', { diff --git a/controlplane/test/api-keys.test.ts b/controlplane/test/api-keys.test.ts index 3758370b47..9f49c3422d 100644 --- a/controlplane/test/api-keys.test.ts +++ b/controlplane/test/api-keys.test.ts @@ -168,7 +168,8 @@ describe('API Keys', (ctx) => { 'graph-admin', 'graph-viewer', 'subgraph-admin', - 'subgraph-publisher' + 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to create API keys', async (role) => { const { client, server, users, authenticator } = await SetupTest({ dbname, enableMultiUsers: true }); @@ -203,7 +204,8 @@ describe('API Keys', (ctx) => { 'graph-admin', 'graph-viewer', 'subgraph-admin', - 'subgraph-publisher' + 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to update API keys', async (role) => { const { client, server, users, authenticator } = await SetupTest({ dbname, enableMultiUsers: true }); @@ -247,7 +249,8 @@ describe('API Keys', (ctx) => { 'graph-admin', 'graph-viewer', 'subgraph-admin', - 'subgraph-publisher' + 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to delete API keys', async (role) => { const { client, server, users, authenticator } = await SetupTest({ dbname, enableMultiUsers: true }); diff --git a/controlplane/test/cache-warmer/configure-cache-warmer.test.ts b/controlplane/test/cache-warmer/configure-cache-warmer.test.ts index 56a97c5ab8..d74481029b 100644 --- a/controlplane/test/cache-warmer/configure-cache-warmer.test.ts +++ b/controlplane/test/cache-warmer/configure-cache-warmer.test.ts @@ -198,6 +198,7 @@ describe('DeleteCacheOperation', (ctx) => { 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to configure cache warmer', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname, diff --git a/controlplane/test/cache-warmer/delete-cache-operation.test.ts b/controlplane/test/cache-warmer/delete-cache-operation.test.ts index db698e7a75..79bcad8c48 100644 --- a/controlplane/test/cache-warmer/delete-cache-operation.test.ts +++ b/controlplane/test/cache-warmer/delete-cache-operation.test.ts @@ -257,6 +257,7 @@ describe('DeleteCacheOperation', (ctx) => { 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to delete cache operation', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname, diff --git a/controlplane/test/cache-warmer/push-cache-operation.test.ts b/controlplane/test/cache-warmer/push-cache-operation.test.ts index 08d03964fe..1da20abac1 100644 --- a/controlplane/test/cache-warmer/push-cache-operation.test.ts +++ b/controlplane/test/cache-warmer/push-cache-operation.test.ts @@ -652,6 +652,7 @@ describe('PushCacheOperation', (ctx) => { 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to configure cache warmer', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname, diff --git a/controlplane/test/check-federated-graph.test.ts b/controlplane/test/check-federated-graph.test.ts index 7636613f5d..bf6333fe8f 100644 --- a/controlplane/test/check-federated-graph.test.ts +++ b/controlplane/test/check-federated-graph.test.ts @@ -369,6 +369,7 @@ describe('CheckFederatedGraph', (ctx) => { 'namespace-viewer', 'graph-viewer', 'subgraph-admin', + 'subgraph-publisher', 'subgraph-viewer', ])('%s should not be able to check graphs for composition errors', async (role) => { const { client, server, users, authenticator } = await SetupTest({ dbname, chClient }); diff --git a/controlplane/test/check-subgraph-schema.test.ts b/controlplane/test/check-subgraph-schema.test.ts index 8416b46515..ee08085c9b 100644 --- a/controlplane/test/check-subgraph-schema.test.ts +++ b/controlplane/test/check-subgraph-schema.test.ts @@ -245,6 +245,7 @@ describe('CheckSubgraphSchema', (ctx) => { 'namespace-viewer', 'graph-admin', 'graph-viewer', + 'subgraph-viewer', ])('%s should not be able to create a subgraph, publish the schema and then check with new schema', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname, chClient }); diff --git a/controlplane/test/feature-flag/create-feature-flag.test.ts b/controlplane/test/feature-flag/create-feature-flag.test.ts index 5f4b82c4bf..580dc6d088 100644 --- a/controlplane/test/feature-flag/create-feature-flag.test.ts +++ b/controlplane/test/feature-flag/create-feature-flag.test.ts @@ -225,6 +225,7 @@ describe('Create feature flag tests', () => { 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to create feature flag', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); diff --git a/controlplane/test/feature-flag/delete-feature-flag.test.ts b/controlplane/test/feature-flag/delete-feature-flag.test.ts index c3103a8f31..3da44f2b7b 100644 --- a/controlplane/test/feature-flag/delete-feature-flag.test.ts +++ b/controlplane/test/feature-flag/delete-feature-flag.test.ts @@ -125,6 +125,7 @@ describe('Delete feature flag tests', () => { 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to create feature flag', async (role) => { const { client, server, users, authenticator } = await SetupTest({ dbname }); diff --git a/controlplane/test/feature-flag/update-feature-flag.test.ts b/controlplane/test/feature-flag/update-feature-flag.test.ts index 2b874d2ec6..a6da0a4bbf 100644 --- a/controlplane/test/feature-flag/update-feature-flag.test.ts +++ b/controlplane/test/feature-flag/update-feature-flag.test.ts @@ -337,6 +337,7 @@ describe('Update feature flag tests', () => { 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to update feature flag', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); diff --git a/controlplane/test/feature-subgraph/create-feature-subgraph.test.ts b/controlplane/test/feature-subgraph/create-feature-subgraph.test.ts index 6c33c2048b..e05ea35555 100644 --- a/controlplane/test/feature-subgraph/create-feature-subgraph.test.ts +++ b/controlplane/test/feature-subgraph/create-feature-subgraph.test.ts @@ -429,7 +429,8 @@ describe('Create feature subgraph tests', () => { 'graph-admin', 'graph-viewer', 'subgraph-publisher', - ])('%s should not be able to create feature flag', async (role) => { + 'subgraph-viewer', + ])('%s should not be able to create feature subgraph', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); const subgraphName = genID('subgraph'); diff --git a/controlplane/test/feature-subgraph/delete-feature-subgraph.test.ts b/controlplane/test/feature-subgraph/delete-feature-subgraph.test.ts index 3543169e0e..1c8ac680ff 100644 --- a/controlplane/test/feature-subgraph/delete-feature-subgraph.test.ts +++ b/controlplane/test/feature-subgraph/delete-feature-subgraph.test.ts @@ -193,7 +193,8 @@ describe('Delete feature subgraph tests', () => { 'graph-admin', 'graph-viewer', 'subgraph-publisher', - ])('%s should not be able to create feature flag', async (role) => { + 'subgraph-viewer', + ])('%s should not be able to delete feature subgraph', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); const baseSubgraphName = genID('subgraph'); diff --git a/controlplane/test/feature-subgraph/get-feature-subgraphs.test.ts b/controlplane/test/feature-subgraph/get-feature-subgraphs.test.ts index a068ed69ce..d620ad946b 100644 --- a/controlplane/test/feature-subgraph/get-feature-subgraphs.test.ts +++ b/controlplane/test/feature-subgraph/get-feature-subgraphs.test.ts @@ -188,6 +188,7 @@ describe('List feature subgraphs', (ctx) => { test.each([ 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should be able to list feature subgraphs from allowed namespaces', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); diff --git a/controlplane/test/feature-subgraph/update-feature-subgraph.test.ts b/controlplane/test/feature-subgraph/update-feature-subgraph.test.ts index 1e587d1697..8354f7fb75 100644 --- a/controlplane/test/feature-subgraph/update-feature-subgraph.test.ts +++ b/controlplane/test/feature-subgraph/update-feature-subgraph.test.ts @@ -250,6 +250,7 @@ describe('Update feature subgraph tests', () => { 'graph-admin', 'graph-viewer', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to update feature subgraph from allowed namespaces', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); diff --git a/controlplane/test/federated-graph/version.test.ts b/controlplane/test/federated-graph/version.test.ts index 3f14585e59..f2d503b093 100644 --- a/controlplane/test/federated-graph/version.test.ts +++ b/controlplane/test/federated-graph/version.test.ts @@ -151,6 +151,7 @@ describe('federated-graph version tests', () => { 'namespace-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s not should be able to read the version of a federated graph', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname, chClient }); const namespace = genID('namespace').toLowerCase(); @@ -408,6 +409,7 @@ describe('federated-graph version tests', () => { 'namespace-viewer', 'graph-viewer', 'subgraph-admin', + 'subgraph-publisher', 'subgraph-viewer', ])('%s should not be able to update the router compatibility version', async (role) => { const { client, blobStorage, server, authenticator, users } = await SetupTest({ dbname, chClient }); diff --git a/controlplane/test/monograph/version.test.ts b/controlplane/test/monograph/version.test.ts index 7fe493713d..bd9d82f67f 100644 --- a/controlplane/test/monograph/version.test.ts +++ b/controlplane/test/monograph/version.test.ts @@ -152,6 +152,7 @@ describe('monograph version tests', () => { 'namespace-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to read the version of a monograph', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname, chClient }); const namespace = genID('namespace').toLowerCase(); @@ -435,6 +436,7 @@ describe('monograph version tests', () => { 'namespace-viewer', 'graph-viewer', 'subgraph-admin', + 'subgraph-publisher', 'subgraph-viewer', ])('%s should not be able to update the router compatibility version', async (role) => { const { client, blobStorage, server, authenticator, users } = await SetupTest({ dbname, chClient }); diff --git a/controlplane/test/namespace/get-namespaces.test.ts b/controlplane/test/namespace/get-namespaces.test.ts index 546071fb46..4c78be5e4a 100644 --- a/controlplane/test/namespace/get-namespaces.test.ts +++ b/controlplane/test/namespace/get-namespaces.test.ts @@ -29,6 +29,7 @@ describe('List namespaces', (ctx) => { 'namespace-admin', 'namespace-viewer', 'subgraph-admin', + 'subgraph-publisher', 'subgraph-viewer', ])('%s should be able to retrieve all namespaces', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); @@ -76,6 +77,7 @@ describe('List namespaces', (ctx) => { 'namespace-admin', 'namespace-viewer', 'subgraph-admin', + 'subgraph-publisher', 'subgraph-viewer', ])('%s should be able to retrieve only allowed namespaces', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); @@ -107,6 +109,7 @@ describe('List namespaces', (ctx) => { test.each([ 'subgraph-admin', + 'subgraph-publisher', 'subgraph-viewer', ])('%s should be able to retrieve namespaces for allowed resources', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); @@ -141,6 +144,7 @@ describe('List namespaces', (ctx) => { test.each([ 'subgraph-admin', + 'subgraph-publisher', 'subgraph-viewer', ])('%s should return only `default` when user does not have access to any valid namespace', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); @@ -205,6 +209,7 @@ describe('List namespaces', (ctx) => { test.each([ 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should be able to list namespaces where have been allowed subgraphs', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); diff --git a/controlplane/test/proposal/create-proposal.test.ts b/controlplane/test/proposal/create-proposal.test.ts index a1e7211f0f..ee180c436b 100644 --- a/controlplane/test/proposal/create-proposal.test.ts +++ b/controlplane/test/proposal/create-proposal.test.ts @@ -277,6 +277,7 @@ describe('Create proposal tests', () => { 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not successfully create a new proposal for a federated graph', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname, diff --git a/controlplane/test/proposal/update-proposal.test.ts b/controlplane/test/proposal/update-proposal.test.ts index b43b8f67d2..58fcb12a93 100644 --- a/controlplane/test/proposal/update-proposal.test.ts +++ b/controlplane/test/proposal/update-proposal.test.ts @@ -184,6 +184,7 @@ describe('Update proposal tests', () => { 'graph-viewer', 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not update proposal state from DRAFT to APPROVED', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname, diff --git a/controlplane/test/rbac-evaluator.test.ts b/controlplane/test/rbac-evaluator.test.ts index e14fe77532..86e29f4431 100644 --- a/controlplane/test/rbac-evaluator.test.ts +++ b/controlplane/test/rbac-evaluator.test.ts @@ -16,6 +16,7 @@ describe('RBAC Evaluator', () => { const subgraphAdmin = createTestGroup({ role: 'subgraph-admin' }); const subgraphPublisher = createTestGroup({ role: 'subgraph-publisher' }); + const subgraphViewer = createTestGroup({ role: 'subgraph-viewer' }); test('Should not have access to anything when no groups are provided', () => { const rbac = createTestRBACEvaluator(); @@ -665,6 +666,93 @@ describe('RBAC Evaluator', () => { expect(rbac.hasSubGraphReadAccess(graph2)).toBe(false); }); }); + + describe('subgraph-viewer', () => { + test('Should have readonly access to every graph', () => { + const rbac = createTestRBACEvaluator(subgraphViewer); + + expect(rbac.groups).toHaveLength(1); + expect(rbac.isOrganizationAdmin).toBe(false); + expect(rbac.isOrganizationAdminOrDeveloper).toBe(false); + expect(rbac.isOrganizationApiKeyManager).toBe(false); + expect(rbac.isOrganizationViewer).toBe(false); + expect(rbac.canCreateNamespace).toBe(false); + expect(rbac.hasNamespaceWriteAccess(fakeNamespace())).toBe(false); + expect(rbac.hasNamespaceReadAccess(fakeNamespace())).toBe(false); + expect(rbac.canCreateContract(fakeNamespace())).toBe(false); + expect(rbac.canCreateFeatureFlag(fakeNamespace())).toBe(false); + expect(rbac.hasFeatureFlagWriteAccess(fakeFeatureFlag())).toBe(false); + expect(rbac.hasFeatureFlagReadAccess(fakeFeatureFlag())).toBe(false); + expect(rbac.canCreateFederatedGraph(fakeNamespace())).toBe(false); + expect(rbac.canDeleteFederatedGraph(fakeTarget())).toBe(false); + expect(rbac.hasFederatedGraphWriteAccess(fakeTarget())).toBe(false); + expect(rbac.hasFederatedGraphReadAccess(fakeTarget())).toBe(false); + expect(rbac.canCreateSubGraph(fakeNamespace())).toBe(false); + expect(rbac.canUpdateSubGraph(fakeTarget())).toBe(false); + expect(rbac.canDeleteSubGraph(fakeTarget())).toBe(false); + expect(rbac.hasSubGraphWriteAccess(fakeTarget())).toBe(false); + expect(rbac.hasSubGraphReadAccess(fakeTarget())).toBe(true); + }); + + test('Should have readonly access to every graph in granted namespace', () => { + const ns1 = fakeNamespace(); + const ns2 = fakeNamespace(); + const rbac = createTestRBACEvaluator(createTestGroup({ role: 'subgraph-viewer', namespaces: [ns1.id] })); + + expect(rbac.groups).toHaveLength(1); + expect(rbac.isOrganizationAdmin).toBe(false); + expect(rbac.isOrganizationAdminOrDeveloper).toBe(false); + expect(rbac.isOrganizationApiKeyManager).toBe(false); + expect(rbac.isOrganizationViewer).toBe(false); + expect(rbac.canCreateNamespace).toBe(false); + expect(rbac.hasNamespaceWriteAccess(ns1)).toBe(false); + expect(rbac.hasNamespaceReadAccess(ns1)).toBe(false); + expect(rbac.canCreateContract(ns1)).toBe(false); + expect(rbac.canCreateFeatureFlag(ns1)).toBe(false); + expect(rbac.hasFeatureFlagWriteAccess(fakeFeatureFlag(ns1.id))).toBe(false); + expect(rbac.hasFeatureFlagReadAccess(fakeFeatureFlag(ns1.id))).toBe(false); + expect(rbac.canCreateFederatedGraph(ns1)).toBe(false); + expect(rbac.canDeleteFederatedGraph(fakeTarget({ namespace: ns1.id }))).toBe(false); + expect(rbac.hasFederatedGraphWriteAccess(fakeTarget({ namespace: ns1.id }))).toBe(false); + expect(rbac.hasFederatedGraphReadAccess(fakeTarget({ namespace: ns1.id }))).toBe(false); + expect(rbac.canCreateSubGraph(ns1)).toBe(false); + expect(rbac.canUpdateSubGraph(fakeTarget({ namespace: ns1.id }))).toBe(false); + expect(rbac.canDeleteSubGraph(fakeTarget({ namespace: ns1.id }))).toBe(false); + expect(rbac.hasSubGraphWriteAccess(fakeTarget({ namespace: ns1.id }))).toBe(false); + expect(rbac.hasSubGraphReadAccess(fakeTarget({ namespace: ns1.id }))).toBe(true); + expect(rbac.hasSubGraphReadAccess(fakeTarget({ namespace: ns2.id }))).toBe(false); + }); + + test('Should have readonly access to granted graphs', () => { + const ns = randomUUID(); + const graph1 = fakeTarget({ namespace: ns }); + const graph2 = fakeTarget(); + const rbac = createTestRBACEvaluator(createTestGroup({ role: 'subgraph-viewer', resources: [graph1.targetId] })); + + expect(rbac.groups).toHaveLength(1); + expect(rbac.isOrganizationAdmin).toBe(false); + expect(rbac.isOrganizationAdminOrDeveloper).toBe(false); + expect(rbac.isOrganizationApiKeyManager).toBe(false); + expect(rbac.isOrganizationViewer).toBe(false); + expect(rbac.canCreateNamespace).toBe(false); + expect(rbac.hasNamespaceWriteAccess(fakeNamespace(ns))).toBe(false); + expect(rbac.hasNamespaceReadAccess(fakeNamespace(ns))).toBe(false); + expect(rbac.canCreateContract(fakeNamespace(ns))).toBe(false); + expect(rbac.canCreateFeatureFlag(fakeNamespace(ns))).toBe(false); + expect(rbac.hasFeatureFlagWriteAccess(fakeFeatureFlag(ns))).toBe(false); + expect(rbac.canCreateFederatedGraph(fakeNamespace(ns))).toBe(false); + expect(rbac.canDeleteFederatedGraph(fakeTarget({ namespace: ns }))).toBe(false); + expect(rbac.hasFederatedGraphWriteAccess(fakeTarget({ namespace: ns }))).toBe(false); + expect(rbac.hasFederatedGraphReadAccess(fakeTarget({ namespace: ns }))).toBe(false); + expect(rbac.hasFederatedGraphReadAccess(fakeTarget({ namespace: ns }))).toBe(false); + expect(rbac.canCreateSubGraph(fakeNamespace(ns))).toBe(false); + expect(rbac.canUpdateSubGraph(graph1)).toBe(false); + expect(rbac.canDeleteSubGraph(graph1)).toBe(false); + expect(rbac.hasSubGraphWriteAccess(graph1)).toBe(false); + expect(rbac.hasSubGraphReadAccess(graph1)).toBe(true); + expect(rbac.hasSubGraphReadAccess(graph2)).toBe(false); + }); + }); }); function fakeNamespace(id?: string) { diff --git a/controlplane/test/subgraph/create-subgraph.test.ts b/controlplane/test/subgraph/create-subgraph.test.ts index f5e7b28f23..e773ad7a34 100644 --- a/controlplane/test/subgraph/create-subgraph.test.ts +++ b/controlplane/test/subgraph/create-subgraph.test.ts @@ -183,7 +183,8 @@ describe('Create subgraph tests', () => { 'graph-admin', 'graph-viewer', 'subgraph-publisher', - ])('%s should not create regular subgraph can be created', async (role) => { + 'subgraph-viewer', + ])('%s should not be able to create regular subgraph', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); const subgraphName = genID('subgraph'); @@ -409,7 +410,9 @@ describe('Create subgraph tests', () => { }); test.each([ - 'organization-admin', 'organization-developer', 'subgraph-admin' + 'organization-admin', + 'organization-developer', + 'subgraph-admin', ])('%s should be able to create subgraphs', async (role) => { const { client, server, users, authenticator } = await SetupTest({ dbname, enableMultiUsers: true, enabledFeatures: ['rbac'] }); @@ -438,6 +441,7 @@ describe('Create subgraph tests', () => { 'namespace-viewer', 'graph-admin', 'graph-viewer', + 'subgraph-publisher', 'subgraph-viewer', ])('%s should not be able to create subgraphs', async (role) => { const { client, server, users, authenticator } = await SetupTest({ dbname, enableMultiUsers: true, enabledFeatures: ['rbac'] }); diff --git a/controlplane/test/subgraph/get-subgraphs.test.ts b/controlplane/test/subgraph/get-subgraphs.test.ts index f6f98722ca..9f50eed3d6 100644 --- a/controlplane/test/subgraph/get-subgraphs.test.ts +++ b/controlplane/test/subgraph/get-subgraphs.test.ts @@ -189,6 +189,7 @@ describe('List Subgraphs', (ctx) => { test.each([ 'subgraph-admin', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should be able to list subgraphs from allowed namespaces', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); diff --git a/controlplane/test/subgraph/publish-subgraph.test.ts b/controlplane/test/subgraph/publish-subgraph.test.ts index 76bd6d406d..87b3e479b1 100644 --- a/controlplane/test/subgraph/publish-subgraph.test.ts +++ b/controlplane/test/subgraph/publish-subgraph.test.ts @@ -100,6 +100,7 @@ describe('Publish subgraph tests', () => { 'namespace-viewer', 'graph-admin', 'graph-viewer', + 'subgraph-viewer', ])('%s should not be able to publish to existing regular subgraph', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); @@ -236,6 +237,7 @@ describe('Publish subgraph tests', () => { 'graph-admin', 'graph-viewer', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to publish regular subgraph without already being created', async (role) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); diff --git a/controlplane/test/subgraph/update-subgraph.test.ts b/controlplane/test/subgraph/update-subgraph.test.ts index 2a66e6b216..57b7fc46c7 100644 --- a/controlplane/test/subgraph/update-subgraph.test.ts +++ b/controlplane/test/subgraph/update-subgraph.test.ts @@ -125,6 +125,7 @@ describe('Update subgraph tests', () => { 'graph-admin', 'graph-viewer', 'subgraph-publisher', + 'subgraph-viewer', ])('%s should not be able to update subgraph', async (role ) => { const { client, server, authenticator, users } = await SetupTest({ dbname }); diff --git a/studio/src/lib/constants.ts b/studio/src/lib/constants.ts index 3b39e9444e..c8362052c9 100644 --- a/studio/src/lib/constants.ts +++ b/studio/src/lib/constants.ts @@ -272,7 +272,13 @@ export const roles = [ category: "subgraph", displayName: "Publisher", description: "Grants publish access to the selected subgraphs.", - } + }, + { + key: "subgraph-viewer", + category: "subgraph", + displayName: "Viewer", + description: "Grants readonly access to the selected subgraphs.", + }, ]; export type OrganizationRole = typeof roles[number]["key"]; \ No newline at end of file