From 9c7f36983c17995c93acde69da6eb2949f6e27c8 Mon Sep 17 00:00:00 2001 From: Lino Le Van Date: Sun, 3 May 2026 09:56:29 -0700 Subject: [PATCH] feat: add all tables, but don't fill them yet --- .../db/drizzle/0003_add_level_one_tables.sql | 371 ++++++++++ api/src/db/drizzle/meta/0003_snapshot.json | 1 + api/src/db/drizzle/meta/_journal.json | 7 + api/src/db/tables/tangled.ts | 643 +++++++++++++++++- 4 files changed, 1021 insertions(+), 1 deletion(-) create mode 100644 api/src/db/drizzle/0003_add_level_one_tables.sql create mode 100644 api/src/db/drizzle/meta/0003_snapshot.json diff --git a/api/src/db/drizzle/0003_add_level_one_tables.sql b/api/src/db/drizzle/0003_add_level_one_tables.sql new file mode 100644 index 0000000..d4a1ee3 --- /dev/null +++ b/api/src/db/drizzle/0003_add_level_one_tables.sql @@ -0,0 +1,371 @@ +CREATE TYPE "public"."tangled_pipeline_status_status" AS ENUM('pending', 'running', 'failed', 'timeout', 'cancelled', 'success');--> statement-breakpoint +CREATE TYPE "public"."tangled_pipeline_trigger_metadata_kind" AS ENUM('push', 'pull_request', 'manual');--> statement-breakpoint +CREATE TYPE "public"."tangled_vouch_kind" AS ENUM('vouch', 'denounce');--> statement-breakpoint +CREATE TABLE "tangled_artifact" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "name" text, + "repo" text, + "repo_did" text, + "tag" text, + "created_at" timestamp with time zone, + "artifact_ref" text, + "artifact_size" integer, + "artifact_mime_type" text, + CONSTRAINT "tangled_artifact_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_artifact_cid_only_null_if_deleted" CHECK (("tangled_artifact"."cid" is not null or "tangled_artifact"."deleted" = true)), + CONSTRAINT "tangled_artifact_non_null_fields" CHECK (("tangled_artifact"."deleted" = true or ("tangled_artifact"."name" is not null and "tangled_artifact"."tag" is not null and "tangled_artifact"."created_at" is not null and "tangled_artifact"."artifact_ref" is not null and "tangled_artifact"."artifact_size" is not null and "tangled_artifact"."artifact_mime_type" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_collaborator" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "subject" text, + "repo" text, + "repo_did" text, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_collaborator_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_collaborator_cid_only_null_if_deleted" CHECK (("tangled_collaborator"."cid" is not null or "tangled_collaborator"."deleted" = true)), + CONSTRAINT "tangled_collaborator_non_null_fields" CHECK (("tangled_collaborator"."deleted" = true or ("tangled_collaborator"."subject" is not null and "tangled_collaborator"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_follow" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "subject" text, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_follow_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_follow_cid_only_null_if_deleted" CHECK (("tangled_follow"."cid" is not null or "tangled_follow"."deleted" = true)), + CONSTRAINT "tangled_follow_non_null_fields" CHECK (("tangled_follow"."deleted" = true or ("tangled_follow"."subject" is not null and "tangled_follow"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_issue" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "repo" text, + "repo_did" text, + "title" text, + "body" text, + "created_at" timestamp with time zone, + "mentions" text[], + "references" text[], + CONSTRAINT "tangled_issue_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_issue_cid_only_null_if_deleted" CHECK (("tangled_issue"."cid" is not null or "tangled_issue"."deleted" = true)), + CONSTRAINT "tangled_issue_non_null_fields" CHECK (("tangled_issue"."deleted" = true or ("tangled_issue"."title" is not null and "tangled_issue"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_issue_comment" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "issue" text, + "body" text, + "created_at" timestamp with time zone, + "reply_to" text, + "mentions" text[], + "references" text[], + CONSTRAINT "tangled_issue_comment_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_issue_comment_cid_only_null_if_deleted" CHECK (("tangled_issue_comment"."cid" is not null or "tangled_issue_comment"."deleted" = true)), + CONSTRAINT "tangled_issue_comment_non_null_fields" CHECK (("tangled_issue_comment"."deleted" = true or ("tangled_issue_comment"."issue" is not null and "tangled_issue_comment"."body" is not null and "tangled_issue_comment"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_issue_state" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "issue" text, + "state" text, + CONSTRAINT "tangled_issue_state_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_issue_state_cid_only_null_if_deleted" CHECK (("tangled_issue_state"."cid" is not null or "tangled_issue_state"."deleted" = true)), + CONSTRAINT "tangled_issue_state_non_null_fields" CHECK (("tangled_issue_state"."deleted" = true or ("tangled_issue_state"."issue" is not null and "tangled_issue_state"."state" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_knot" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_knot_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_knot_cid_only_null_if_deleted" CHECK (("tangled_knot"."cid" is not null or "tangled_knot"."deleted" = true)), + CONSTRAINT "tangled_knot_non_null_fields" CHECK (("tangled_knot"."deleted" = true or "tangled_knot"."created_at" is not null)) +); +--> statement-breakpoint +CREATE TABLE "tangled_knot_member" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "subject" text, + "domain" text, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_knot_member_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_knot_member_cid_only_null_if_deleted" CHECK (("tangled_knot_member"."cid" is not null or "tangled_knot_member"."deleted" = true)), + CONSTRAINT "tangled_knot_member_non_null_fields" CHECK (("tangled_knot_member"."deleted" = true or ("tangled_knot_member"."subject" is not null and "tangled_knot_member"."domain" is not null and "tangled_knot_member"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_label_definition" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "name" text, + "value_type" text, + "value_format" text, + "value_enum" text[], + "scope" text[], + "color" text, + "created_at" timestamp with time zone, + "multiple" boolean, + CONSTRAINT "tangled_label_definition_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_label_definition_cid_only_null_if_deleted" CHECK (("tangled_label_definition"."cid" is not null or "tangled_label_definition"."deleted" = true)), + CONSTRAINT "tangled_label_definition_non_null_fields" CHECK (("tangled_label_definition"."deleted" = true or ("tangled_label_definition"."name" is not null and "tangled_label_definition"."value_type" is not null and "tangled_label_definition"."value_format" is not null and "tangled_label_definition"."scope" is not null and "tangled_label_definition"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_label_op" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "subject" text, + "performed_at" timestamp with time zone, + "add" jsonb, + "delete" jsonb, + CONSTRAINT "tangled_label_op_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_label_op_cid_only_null_if_deleted" CHECK (("tangled_label_op"."cid" is not null or "tangled_label_op"."deleted" = true)), + CONSTRAINT "tangled_label_op_non_null_fields" CHECK (("tangled_label_op"."deleted" = true or ("tangled_label_op"."subject" is not null and "tangled_label_op"."add" is not null and "tangled_label_op"."delete" is not null and "tangled_label_op"."performed_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_pipeline" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "trigger_metadata_kind" "tangled_pipeline_trigger_metadata_kind", + "trigger_metadata_repo_knot" text, + "trigger_metadata_repo_did" text, + "trigger_metadata_repo_repo_did" text, + "trigger_metadata_repo_repo" text, + "trigger_metadata_repo_default_branch" text, + "trigger_metadata_push_ref" text, + "trigger_metadata_push_new_sha" text, + "trigger_metadata_push_old_sha" text, + "trigger_metadata_pull_source_branch" text, + "trigger_metadata_pull_target_branch" text, + "trigger_metadata_pull_source_sha" text, + "trigger_metadata_pull_action" text, + "trigger_metadata_manual" jsonb, + "workflows" jsonb, + CONSTRAINT "tangled_pipeline_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_pipeline_cid_only_null_if_deleted" CHECK (("tangled_pipeline"."cid" is not null or "tangled_pipeline"."deleted" = true)), + CONSTRAINT "tangled_pipeline_non_null_fields" CHECK (("tangled_pipeline"."deleted" = true or ("tangled_pipeline"."trigger_metadata_kind" is not null and "tangled_pipeline"."trigger_metadata_repo_knot" is not null and "tangled_pipeline"."trigger_metadata_repo_did" is not null and "tangled_pipeline"."trigger_metadata_repo_default_branch" is not null and "tangled_pipeline"."workflows" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_pipeline_status" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "pipeline" text, + "workflow" text, + "status" "tangled_pipeline_status_status", + "created_at" timestamp with time zone, + "error" text, + "exit_code" integer, + CONSTRAINT "tangled_pipeline_status_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_pipeline_status_cid_only_null_if_deleted" CHECK (("tangled_pipeline_status"."cid" is not null or "tangled_pipeline_status"."deleted" = true)), + CONSTRAINT "tangled_pipeline_status_non_null_fields" CHECK (("tangled_pipeline_status"."deleted" = true or ("tangled_pipeline_status"."pipeline" is not null and "tangled_pipeline_status"."workflow" is not null and "tangled_pipeline_status"."status" is not null and "tangled_pipeline_status"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_public_key" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "key" text, + "name" text, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_public_key_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_public_key_cid_only_null_if_deleted" CHECK (("tangled_public_key"."cid" is not null or "tangled_public_key"."deleted" = true)), + CONSTRAINT "tangled_public_key_non_null_fields" CHECK (("tangled_public_key"."deleted" = true or ("tangled_public_key"."key" is not null and "tangled_public_key"."name" is not null and "tangled_public_key"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_pull" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "title" text, + "body" text, + "rounds" jsonb, + "source_branch" text, + "source_repo" text, + "source_repo_did" text, + "target_branch" text, + "target_repo" text, + "target_repo_did" text, + "created_at" timestamp with time zone, + "mentions" text[], + "references" text[], + "dependent_on" text, + CONSTRAINT "tangled_pull_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_pull_cid_only_null_if_deleted" CHECK (("tangled_pull"."cid" is not null or "tangled_pull"."deleted" = true)), + CONSTRAINT "tangled_pull_non_null_fields" CHECK (("tangled_pull"."deleted" = true or ("tangled_pull"."target_branch" is not null and "tangled_pull"."title" is not null and "tangled_pull"."created_at" is not null and "tangled_pull"."rounds" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_pull_comment" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "pull" text, + "body" text, + "created_at" timestamp with time zone, + "mentions" text[], + "references" text[], + CONSTRAINT "tangled_pull_comment_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_pull_comment_cid_only_null_if_deleted" CHECK (("tangled_pull_comment"."cid" is not null or "tangled_pull_comment"."deleted" = true)), + CONSTRAINT "tangled_pull_comment_non_null_fields" CHECK (("tangled_pull_comment"."deleted" = true or ("tangled_pull_comment"."pull" is not null and "tangled_pull_comment"."body" is not null and "tangled_pull_comment"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_pull_status" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "pull" text, + "status" text, + CONSTRAINT "tangled_pull_status_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_pull_status_cid_only_null_if_deleted" CHECK (("tangled_pull_status"."cid" is not null or "tangled_pull_status"."deleted" = true)), + CONSTRAINT "tangled_pull_status_non_null_fields" CHECK (("tangled_pull_status"."deleted" = true or ("tangled_pull_status"."pull" is not null and "tangled_pull_status"."status" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_reaction" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "subject" text, + "reaction" text, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_reaction_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_reaction_cid_only_null_if_deleted" CHECK (("tangled_reaction"."cid" is not null or "tangled_reaction"."deleted" = true)), + CONSTRAINT "tangled_reaction_non_null_fields" CHECK (("tangled_reaction"."deleted" = true or ("tangled_reaction"."subject" is not null and "tangled_reaction"."reaction" is not null and "tangled_reaction"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_ref_update" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "ref" text, + "committer_did" text, + "owner_did" text, + "repo_did" text, + "repo_name" text, + "old_sha" text, + "new_sha" text, + "meta_is_default_ref" boolean, + "meta_lang_breakdown" jsonb, + "meta_commit_count" jsonb, + CONSTRAINT "tangled_ref_update_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_ref_update_cid_only_null_if_deleted" CHECK (("tangled_ref_update"."cid" is not null or "tangled_ref_update"."deleted" = true)), + CONSTRAINT "tangled_ref_update_non_null_fields" CHECK (("tangled_ref_update"."deleted" = true or ("tangled_ref_update"."ref" is not null and "tangled_ref_update"."committer_did" is not null and "tangled_ref_update"."repo_name" is not null and "tangled_ref_update"."old_sha" is not null and "tangled_ref_update"."new_sha" is not null and "tangled_ref_update"."meta_is_default_ref" is not null and "tangled_ref_update"."meta_commit_count" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_spindle" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_spindle_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_spindle_cid_only_null_if_deleted" CHECK (("tangled_spindle"."cid" is not null or "tangled_spindle"."deleted" = true)), + CONSTRAINT "tangled_spindle_non_null_fields" CHECK (("tangled_spindle"."deleted" = true or "tangled_spindle"."created_at" is not null)) +); +--> statement-breakpoint +CREATE TABLE "tangled_spindle_member" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "subject" text, + "instance" text, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_spindle_member_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_spindle_member_cid_only_null_if_deleted" CHECK (("tangled_spindle_member"."cid" is not null or "tangled_spindle_member"."deleted" = true)), + CONSTRAINT "tangled_spindle_member_non_null_fields" CHECK (("tangled_spindle_member"."deleted" = true or ("tangled_spindle_member"."subject" is not null and "tangled_spindle_member"."instance" is not null and "tangled_spindle_member"."created_at" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_star" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "subject" text, + "subject_did" text, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_star_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_star_cid_only_null_if_deleted" CHECK (("tangled_star"."cid" is not null or "tangled_star"."deleted" = true)), + CONSTRAINT "tangled_star_non_null_fields" CHECK (("tangled_star"."deleted" = true or "tangled_star"."created_at" is not null)) +); +--> statement-breakpoint +CREATE TABLE "tangled_string" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "filename" text, + "description" text, + "created_at" timestamp with time zone, + "contents" text, + CONSTRAINT "tangled_string_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_string_cid_only_null_if_deleted" CHECK (("tangled_string"."cid" is not null or "tangled_string"."deleted" = true)), + CONSTRAINT "tangled_string_non_null_fields" CHECK (("tangled_string"."deleted" = true or ("tangled_string"."filename" is not null and "tangled_string"."description" is not null and "tangled_string"."created_at" is not null and "tangled_string"."contents" is not null))) +); +--> statement-breakpoint +CREATE TABLE "tangled_vouch" ( + "did" text NOT NULL, + "rev" text NOT NULL, + "rkey" text NOT NULL, + "cid" text, + "deleted" boolean NOT NULL, + "kind" "tangled_vouch_kind", + "reason" text, + "created_at" timestamp with time zone, + CONSTRAINT "tangled_vouch_did_rkey_pk" PRIMARY KEY("did","rkey"), + CONSTRAINT "tangled_vouch_cid_only_null_if_deleted" CHECK (("tangled_vouch"."cid" is not null or "tangled_vouch"."deleted" = true)), + CONSTRAINT "tangled_vouch_non_null_fields" CHECK (("tangled_vouch"."deleted" = true or ("tangled_vouch"."kind" is not null and "tangled_vouch"."created_at" is not null))) +); diff --git a/api/src/db/drizzle/meta/0003_snapshot.json b/api/src/db/drizzle/meta/0003_snapshot.json new file mode 100644 index 0000000..0eaae88 --- /dev/null +++ b/api/src/db/drizzle/meta/0003_snapshot.json @@ -0,0 +1 @@ +{"id":"ea550240-2125-411e-8852-822e016d5abc","prevId":"6bf06586-128f-4b67-9e6e-5f3ff761c8d3","version":"7","dialect":"postgresql","tables":{"public.raw_records":{"name":"raw_records","schema":"","columns":{"id":{"name":"id","type":"uuidv7","primaryKey":true,"notNull":true},"tap_id":{"name":"tap_id","type":"bigint","primaryKey":false,"notNull":true},"received_at":{"name":"received_at","type":"timestamp with time zone","primaryKey":false,"notNull":true,"default":"now()"},"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"collection":{"name":"collection","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"action":{"name":"action","type":"raw_action","typeSchema":"public","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"record":{"name":"record","type":"jsonb","primaryKey":false,"notNull":false}},"indexes":{"raw_records_collection_index":{"name":"raw_records_collection_index","columns":[{"expression":"collection","isExpression":false,"asc":true,"nulls":"last"}],"isUnique":false,"concurrently":false,"method":"btree","with":{}},"raw_records_did_collection_rkey_index":{"name":"raw_records_did_collection_rkey_index","columns":[{"expression":"did","isExpression":false,"asc":true,"nulls":"last"},{"expression":"collection","isExpression":false,"asc":true,"nulls":"last"},{"expression":"rkey","isExpression":false,"asc":true,"nulls":"last"}],"isUnique":false,"concurrently":false,"method":"btree","with":{}}},"foreignKeys":{},"compositePrimaryKeys":{},"uniqueConstraints":{"raw_records_tap_id_unique":{"name":"raw_records_tap_id_unique","nullsNotDistinct":false,"columns":["tap_id"]}},"policies":{},"checkConstraints":{"raw_records_not_null_unless_delete":{"name":"raw_records_not_null_unless_delete","value":"(\"raw_records\".\"action\" = 'delete' or (\"raw_records\".\"cid\" is not null and \"raw_records\".\"record\" is not null))"}},"isRLSEnabled":false},"public.tangled_artifact":{"name":"tangled_artifact","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"name":{"name":"name","type":"text","primaryKey":false,"notNull":false},"repo":{"name":"repo","type":"text","primaryKey":false,"notNull":false},"repo_did":{"name":"repo_did","type":"text","primaryKey":false,"notNull":false},"tag":{"name":"tag","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"artifact_ref":{"name":"artifact_ref","type":"text","primaryKey":false,"notNull":false},"artifact_size":{"name":"artifact_size","type":"integer","primaryKey":false,"notNull":false},"artifact_mime_type":{"name":"artifact_mime_type","type":"text","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_artifact_did_rkey_pk":{"name":"tangled_artifact_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_artifact_cid_only_null_if_deleted":{"name":"tangled_artifact_cid_only_null_if_deleted","value":"(\"tangled_artifact\".\"cid\" is not null or \"tangled_artifact\".\"deleted\" = true)"},"tangled_artifact_non_null_fields":{"name":"tangled_artifact_non_null_fields","value":"(\"tangled_artifact\".\"deleted\" = true or (\"tangled_artifact\".\"name\" is not null and \"tangled_artifact\".\"tag\" is not null and \"tangled_artifact\".\"created_at\" is not null and \"tangled_artifact\".\"artifact_ref\" is not null and \"tangled_artifact\".\"artifact_size\" is not null and \"tangled_artifact\".\"artifact_mime_type\" is not null))"}},"isRLSEnabled":false},"public.tangled_collaborator":{"name":"tangled_collaborator","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"subject":{"name":"subject","type":"text","primaryKey":false,"notNull":false},"repo":{"name":"repo","type":"text","primaryKey":false,"notNull":false},"repo_did":{"name":"repo_did","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_collaborator_did_rkey_pk":{"name":"tangled_collaborator_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_collaborator_cid_only_null_if_deleted":{"name":"tangled_collaborator_cid_only_null_if_deleted","value":"(\"tangled_collaborator\".\"cid\" is not null or \"tangled_collaborator\".\"deleted\" = true)"},"tangled_collaborator_non_null_fields":{"name":"tangled_collaborator_non_null_fields","value":"(\"tangled_collaborator\".\"deleted\" = true or (\"tangled_collaborator\".\"subject\" is not null and \"tangled_collaborator\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_follow":{"name":"tangled_follow","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"subject":{"name":"subject","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_follow_did_rkey_pk":{"name":"tangled_follow_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_follow_cid_only_null_if_deleted":{"name":"tangled_follow_cid_only_null_if_deleted","value":"(\"tangled_follow\".\"cid\" is not null or \"tangled_follow\".\"deleted\" = true)"},"tangled_follow_non_null_fields":{"name":"tangled_follow_non_null_fields","value":"(\"tangled_follow\".\"deleted\" = true or (\"tangled_follow\".\"subject\" is not null and \"tangled_follow\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_issue":{"name":"tangled_issue","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"repo":{"name":"repo","type":"text","primaryKey":false,"notNull":false},"repo_did":{"name":"repo_did","type":"text","primaryKey":false,"notNull":false},"title":{"name":"title","type":"text","primaryKey":false,"notNull":false},"body":{"name":"body","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"mentions":{"name":"mentions","type":"text[]","primaryKey":false,"notNull":false},"references":{"name":"references","type":"text[]","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_issue_did_rkey_pk":{"name":"tangled_issue_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_issue_cid_only_null_if_deleted":{"name":"tangled_issue_cid_only_null_if_deleted","value":"(\"tangled_issue\".\"cid\" is not null or \"tangled_issue\".\"deleted\" = true)"},"tangled_issue_non_null_fields":{"name":"tangled_issue_non_null_fields","value":"(\"tangled_issue\".\"deleted\" = true or (\"tangled_issue\".\"title\" is not null and \"tangled_issue\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_issue_comment":{"name":"tangled_issue_comment","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"issue":{"name":"issue","type":"text","primaryKey":false,"notNull":false},"body":{"name":"body","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"reply_to":{"name":"reply_to","type":"text","primaryKey":false,"notNull":false},"mentions":{"name":"mentions","type":"text[]","primaryKey":false,"notNull":false},"references":{"name":"references","type":"text[]","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_issue_comment_did_rkey_pk":{"name":"tangled_issue_comment_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_issue_comment_cid_only_null_if_deleted":{"name":"tangled_issue_comment_cid_only_null_if_deleted","value":"(\"tangled_issue_comment\".\"cid\" is not null or \"tangled_issue_comment\".\"deleted\" = true)"},"tangled_issue_comment_non_null_fields":{"name":"tangled_issue_comment_non_null_fields","value":"(\"tangled_issue_comment\".\"deleted\" = true or (\"tangled_issue_comment\".\"issue\" is not null and \"tangled_issue_comment\".\"body\" is not null and \"tangled_issue_comment\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_issue_state":{"name":"tangled_issue_state","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"issue":{"name":"issue","type":"text","primaryKey":false,"notNull":false},"state":{"name":"state","type":"text","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_issue_state_did_rkey_pk":{"name":"tangled_issue_state_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_issue_state_cid_only_null_if_deleted":{"name":"tangled_issue_state_cid_only_null_if_deleted","value":"(\"tangled_issue_state\".\"cid\" is not null or \"tangled_issue_state\".\"deleted\" = true)"},"tangled_issue_state_non_null_fields":{"name":"tangled_issue_state_non_null_fields","value":"(\"tangled_issue_state\".\"deleted\" = true or (\"tangled_issue_state\".\"issue\" is not null and \"tangled_issue_state\".\"state\" is not null))"}},"isRLSEnabled":false},"public.tangled_knot":{"name":"tangled_knot","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_knot_did_rkey_pk":{"name":"tangled_knot_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_knot_cid_only_null_if_deleted":{"name":"tangled_knot_cid_only_null_if_deleted","value":"(\"tangled_knot\".\"cid\" is not null or \"tangled_knot\".\"deleted\" = true)"},"tangled_knot_non_null_fields":{"name":"tangled_knot_non_null_fields","value":"(\"tangled_knot\".\"deleted\" = true or \"tangled_knot\".\"created_at\" is not null)"}},"isRLSEnabled":false},"public.tangled_knot_member":{"name":"tangled_knot_member","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"subject":{"name":"subject","type":"text","primaryKey":false,"notNull":false},"domain":{"name":"domain","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_knot_member_did_rkey_pk":{"name":"tangled_knot_member_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_knot_member_cid_only_null_if_deleted":{"name":"tangled_knot_member_cid_only_null_if_deleted","value":"(\"tangled_knot_member\".\"cid\" is not null or \"tangled_knot_member\".\"deleted\" = true)"},"tangled_knot_member_non_null_fields":{"name":"tangled_knot_member_non_null_fields","value":"(\"tangled_knot_member\".\"deleted\" = true or (\"tangled_knot_member\".\"subject\" is not null and \"tangled_knot_member\".\"domain\" is not null and \"tangled_knot_member\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_label_definition":{"name":"tangled_label_definition","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"name":{"name":"name","type":"text","primaryKey":false,"notNull":false},"value_type":{"name":"value_type","type":"text","primaryKey":false,"notNull":false},"value_format":{"name":"value_format","type":"text","primaryKey":false,"notNull":false},"value_enum":{"name":"value_enum","type":"text[]","primaryKey":false,"notNull":false},"scope":{"name":"scope","type":"text[]","primaryKey":false,"notNull":false},"color":{"name":"color","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"multiple":{"name":"multiple","type":"boolean","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_label_definition_did_rkey_pk":{"name":"tangled_label_definition_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_label_definition_cid_only_null_if_deleted":{"name":"tangled_label_definition_cid_only_null_if_deleted","value":"(\"tangled_label_definition\".\"cid\" is not null or \"tangled_label_definition\".\"deleted\" = true)"},"tangled_label_definition_non_null_fields":{"name":"tangled_label_definition_non_null_fields","value":"(\"tangled_label_definition\".\"deleted\" = true or (\"tangled_label_definition\".\"name\" is not null and \"tangled_label_definition\".\"value_type\" is not null and \"tangled_label_definition\".\"value_format\" is not null and \"tangled_label_definition\".\"scope\" is not null and \"tangled_label_definition\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_label_op":{"name":"tangled_label_op","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"subject":{"name":"subject","type":"text","primaryKey":false,"notNull":false},"performed_at":{"name":"performed_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"add":{"name":"add","type":"jsonb","primaryKey":false,"notNull":false},"delete":{"name":"delete","type":"jsonb","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_label_op_did_rkey_pk":{"name":"tangled_label_op_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_label_op_cid_only_null_if_deleted":{"name":"tangled_label_op_cid_only_null_if_deleted","value":"(\"tangled_label_op\".\"cid\" is not null or \"tangled_label_op\".\"deleted\" = true)"},"tangled_label_op_non_null_fields":{"name":"tangled_label_op_non_null_fields","value":"(\"tangled_label_op\".\"deleted\" = true or (\"tangled_label_op\".\"subject\" is not null and \"tangled_label_op\".\"add\" is not null and \"tangled_label_op\".\"delete\" is not null and \"tangled_label_op\".\"performed_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_pipeline":{"name":"tangled_pipeline","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"trigger_metadata_kind":{"name":"trigger_metadata_kind","type":"tangled_pipeline_trigger_metadata_kind","typeSchema":"public","primaryKey":false,"notNull":false},"trigger_metadata_repo_knot":{"name":"trigger_metadata_repo_knot","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_repo_did":{"name":"trigger_metadata_repo_did","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_repo_repo_did":{"name":"trigger_metadata_repo_repo_did","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_repo_repo":{"name":"trigger_metadata_repo_repo","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_repo_default_branch":{"name":"trigger_metadata_repo_default_branch","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_push_ref":{"name":"trigger_metadata_push_ref","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_push_new_sha":{"name":"trigger_metadata_push_new_sha","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_push_old_sha":{"name":"trigger_metadata_push_old_sha","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_pull_source_branch":{"name":"trigger_metadata_pull_source_branch","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_pull_target_branch":{"name":"trigger_metadata_pull_target_branch","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_pull_source_sha":{"name":"trigger_metadata_pull_source_sha","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_pull_action":{"name":"trigger_metadata_pull_action","type":"text","primaryKey":false,"notNull":false},"trigger_metadata_manual":{"name":"trigger_metadata_manual","type":"jsonb","primaryKey":false,"notNull":false},"workflows":{"name":"workflows","type":"jsonb","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_pipeline_did_rkey_pk":{"name":"tangled_pipeline_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_pipeline_cid_only_null_if_deleted":{"name":"tangled_pipeline_cid_only_null_if_deleted","value":"(\"tangled_pipeline\".\"cid\" is not null or \"tangled_pipeline\".\"deleted\" = true)"},"tangled_pipeline_non_null_fields":{"name":"tangled_pipeline_non_null_fields","value":"(\"tangled_pipeline\".\"deleted\" = true or (\"tangled_pipeline\".\"trigger_metadata_kind\" is not null and \"tangled_pipeline\".\"trigger_metadata_repo_knot\" is not null and \"tangled_pipeline\".\"trigger_metadata_repo_did\" is not null and \"tangled_pipeline\".\"trigger_metadata_repo_default_branch\" is not null and \"tangled_pipeline\".\"workflows\" is not null))"}},"isRLSEnabled":false},"public.tangled_pipeline_status":{"name":"tangled_pipeline_status","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"pipeline":{"name":"pipeline","type":"text","primaryKey":false,"notNull":false},"workflow":{"name":"workflow","type":"text","primaryKey":false,"notNull":false},"status":{"name":"status","type":"tangled_pipeline_status_status","typeSchema":"public","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"error":{"name":"error","type":"text","primaryKey":false,"notNull":false},"exit_code":{"name":"exit_code","type":"integer","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_pipeline_status_did_rkey_pk":{"name":"tangled_pipeline_status_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_pipeline_status_cid_only_null_if_deleted":{"name":"tangled_pipeline_status_cid_only_null_if_deleted","value":"(\"tangled_pipeline_status\".\"cid\" is not null or \"tangled_pipeline_status\".\"deleted\" = true)"},"tangled_pipeline_status_non_null_fields":{"name":"tangled_pipeline_status_non_null_fields","value":"(\"tangled_pipeline_status\".\"deleted\" = true or (\"tangled_pipeline_status\".\"pipeline\" is not null and \"tangled_pipeline_status\".\"workflow\" is not null and \"tangled_pipeline_status\".\"status\" is not null and \"tangled_pipeline_status\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_profile":{"name":"tangled_profile","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":true,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"avatar":{"name":"avatar","type":"text","primaryKey":false,"notNull":false},"description":{"name":"description","type":"text","primaryKey":false,"notNull":false},"links":{"name":"links","type":"text[]","primaryKey":false,"notNull":false},"stats":{"name":"stats","type":"text[]","primaryKey":false,"notNull":false},"bluesky":{"name":"bluesky","type":"boolean","primaryKey":false,"notNull":false},"location":{"name":"location","type":"text","primaryKey":false,"notNull":false},"pinned_repositories":{"name":"pinned_repositories","type":"text[]","primaryKey":false,"notNull":false},"pronouns":{"name":"pronouns","type":"text","primaryKey":false,"notNull":false},"preferred_handle":{"name":"preferred_handle","type":"text","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_profile_cid_only_null_if_deleted":{"name":"tangled_profile_cid_only_null_if_deleted","value":"(\"tangled_profile\".\"cid\" is not null or \"tangled_profile\".\"deleted\" = true)"},"tangled_profile_non_null_fields":{"name":"tangled_profile_non_null_fields","value":"(\"tangled_profile\".\"deleted\" = true or \"tangled_profile\".\"bluesky\" is not null)"}},"isRLSEnabled":false},"public.tangled_public_key":{"name":"tangled_public_key","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"key":{"name":"key","type":"text","primaryKey":false,"notNull":false},"name":{"name":"name","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_public_key_did_rkey_pk":{"name":"tangled_public_key_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_public_key_cid_only_null_if_deleted":{"name":"tangled_public_key_cid_only_null_if_deleted","value":"(\"tangled_public_key\".\"cid\" is not null or \"tangled_public_key\".\"deleted\" = true)"},"tangled_public_key_non_null_fields":{"name":"tangled_public_key_non_null_fields","value":"(\"tangled_public_key\".\"deleted\" = true or (\"tangled_public_key\".\"key\" is not null and \"tangled_public_key\".\"name\" is not null and \"tangled_public_key\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_pull":{"name":"tangled_pull","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"title":{"name":"title","type":"text","primaryKey":false,"notNull":false},"body":{"name":"body","type":"text","primaryKey":false,"notNull":false},"rounds":{"name":"rounds","type":"jsonb","primaryKey":false,"notNull":false},"source_branch":{"name":"source_branch","type":"text","primaryKey":false,"notNull":false},"source_repo":{"name":"source_repo","type":"text","primaryKey":false,"notNull":false},"source_repo_did":{"name":"source_repo_did","type":"text","primaryKey":false,"notNull":false},"target_branch":{"name":"target_branch","type":"text","primaryKey":false,"notNull":false},"target_repo":{"name":"target_repo","type":"text","primaryKey":false,"notNull":false},"target_repo_did":{"name":"target_repo_did","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"mentions":{"name":"mentions","type":"text[]","primaryKey":false,"notNull":false},"references":{"name":"references","type":"text[]","primaryKey":false,"notNull":false},"dependent_on":{"name":"dependent_on","type":"text","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_pull_did_rkey_pk":{"name":"tangled_pull_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_pull_cid_only_null_if_deleted":{"name":"tangled_pull_cid_only_null_if_deleted","value":"(\"tangled_pull\".\"cid\" is not null or \"tangled_pull\".\"deleted\" = true)"},"tangled_pull_non_null_fields":{"name":"tangled_pull_non_null_fields","value":"(\"tangled_pull\".\"deleted\" = true or (\"tangled_pull\".\"target_branch\" is not null and \"tangled_pull\".\"title\" is not null and \"tangled_pull\".\"created_at\" is not null and \"tangled_pull\".\"rounds\" is not null))"}},"isRLSEnabled":false},"public.tangled_pull_comment":{"name":"tangled_pull_comment","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"pull":{"name":"pull","type":"text","primaryKey":false,"notNull":false},"body":{"name":"body","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"mentions":{"name":"mentions","type":"text[]","primaryKey":false,"notNull":false},"references":{"name":"references","type":"text[]","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_pull_comment_did_rkey_pk":{"name":"tangled_pull_comment_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_pull_comment_cid_only_null_if_deleted":{"name":"tangled_pull_comment_cid_only_null_if_deleted","value":"(\"tangled_pull_comment\".\"cid\" is not null or \"tangled_pull_comment\".\"deleted\" = true)"},"tangled_pull_comment_non_null_fields":{"name":"tangled_pull_comment_non_null_fields","value":"(\"tangled_pull_comment\".\"deleted\" = true or (\"tangled_pull_comment\".\"pull\" is not null and \"tangled_pull_comment\".\"body\" is not null and \"tangled_pull_comment\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_pull_status":{"name":"tangled_pull_status","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"pull":{"name":"pull","type":"text","primaryKey":false,"notNull":false},"status":{"name":"status","type":"text","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_pull_status_did_rkey_pk":{"name":"tangled_pull_status_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_pull_status_cid_only_null_if_deleted":{"name":"tangled_pull_status_cid_only_null_if_deleted","value":"(\"tangled_pull_status\".\"cid\" is not null or \"tangled_pull_status\".\"deleted\" = true)"},"tangled_pull_status_non_null_fields":{"name":"tangled_pull_status_non_null_fields","value":"(\"tangled_pull_status\".\"deleted\" = true or (\"tangled_pull_status\".\"pull\" is not null and \"tangled_pull_status\".\"status\" is not null))"}},"isRLSEnabled":false},"public.tangled_reaction":{"name":"tangled_reaction","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"subject":{"name":"subject","type":"text","primaryKey":false,"notNull":false},"reaction":{"name":"reaction","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_reaction_did_rkey_pk":{"name":"tangled_reaction_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_reaction_cid_only_null_if_deleted":{"name":"tangled_reaction_cid_only_null_if_deleted","value":"(\"tangled_reaction\".\"cid\" is not null or \"tangled_reaction\".\"deleted\" = true)"},"tangled_reaction_non_null_fields":{"name":"tangled_reaction_non_null_fields","value":"(\"tangled_reaction\".\"deleted\" = true or (\"tangled_reaction\".\"subject\" is not null and \"tangled_reaction\".\"reaction\" is not null and \"tangled_reaction\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_ref_update":{"name":"tangled_ref_update","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"ref":{"name":"ref","type":"text","primaryKey":false,"notNull":false},"committer_did":{"name":"committer_did","type":"text","primaryKey":false,"notNull":false},"owner_did":{"name":"owner_did","type":"text","primaryKey":false,"notNull":false},"repo_did":{"name":"repo_did","type":"text","primaryKey":false,"notNull":false},"repo_name":{"name":"repo_name","type":"text","primaryKey":false,"notNull":false},"old_sha":{"name":"old_sha","type":"text","primaryKey":false,"notNull":false},"new_sha":{"name":"new_sha","type":"text","primaryKey":false,"notNull":false},"meta_is_default_ref":{"name":"meta_is_default_ref","type":"boolean","primaryKey":false,"notNull":false},"meta_lang_breakdown":{"name":"meta_lang_breakdown","type":"jsonb","primaryKey":false,"notNull":false},"meta_commit_count":{"name":"meta_commit_count","type":"jsonb","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_ref_update_did_rkey_pk":{"name":"tangled_ref_update_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_ref_update_cid_only_null_if_deleted":{"name":"tangled_ref_update_cid_only_null_if_deleted","value":"(\"tangled_ref_update\".\"cid\" is not null or \"tangled_ref_update\".\"deleted\" = true)"},"tangled_ref_update_non_null_fields":{"name":"tangled_ref_update_non_null_fields","value":"(\"tangled_ref_update\".\"deleted\" = true or (\"tangled_ref_update\".\"ref\" is not null and \"tangled_ref_update\".\"committer_did\" is not null and \"tangled_ref_update\".\"repo_name\" is not null and \"tangled_ref_update\".\"old_sha\" is not null and \"tangled_ref_update\".\"new_sha\" is not null and \"tangled_ref_update\".\"meta_is_default_ref\" is not null and \"tangled_ref_update\".\"meta_commit_count\" is not null))"}},"isRLSEnabled":false},"public.tangled_repo":{"name":"tangled_repo","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"name":{"name":"name","type":"text","primaryKey":false,"notNull":false},"knot":{"name":"knot","type":"text","primaryKey":false,"notNull":false},"spindle":{"name":"spindle","type":"text","primaryKey":false,"notNull":false},"description":{"name":"description","type":"text","primaryKey":false,"notNull":false},"website":{"name":"website","type":"text","primaryKey":false,"notNull":false},"topics":{"name":"topics","type":"text[]","primaryKey":false,"notNull":false},"source":{"name":"source","type":"text","primaryKey":false,"notNull":false},"labels":{"name":"labels","type":"text[]","primaryKey":false,"notNull":false},"repo_did":{"name":"repo_did","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_repo_did_rkey_pk":{"name":"tangled_repo_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_repo_cid_only_null_if_deleted":{"name":"tangled_repo_cid_only_null_if_deleted","value":"(\"tangled_repo\".\"cid\" is not null or \"tangled_repo\".\"deleted\" = true)"},"tangled_repo_non_null_fields":{"name":"tangled_repo_non_null_fields","value":"(\"tangled_repo\".\"deleted\" = true or (\"tangled_repo\".\"name\" is not null and \"tangled_repo\".\"knot\" is not null and \"tangled_repo\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_spindle":{"name":"tangled_spindle","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_spindle_did_rkey_pk":{"name":"tangled_spindle_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_spindle_cid_only_null_if_deleted":{"name":"tangled_spindle_cid_only_null_if_deleted","value":"(\"tangled_spindle\".\"cid\" is not null or \"tangled_spindle\".\"deleted\" = true)"},"tangled_spindle_non_null_fields":{"name":"tangled_spindle_non_null_fields","value":"(\"tangled_spindle\".\"deleted\" = true or \"tangled_spindle\".\"created_at\" is not null)"}},"isRLSEnabled":false},"public.tangled_spindle_member":{"name":"tangled_spindle_member","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"subject":{"name":"subject","type":"text","primaryKey":false,"notNull":false},"instance":{"name":"instance","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_spindle_member_did_rkey_pk":{"name":"tangled_spindle_member_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_spindle_member_cid_only_null_if_deleted":{"name":"tangled_spindle_member_cid_only_null_if_deleted","value":"(\"tangled_spindle_member\".\"cid\" is not null or \"tangled_spindle_member\".\"deleted\" = true)"},"tangled_spindle_member_non_null_fields":{"name":"tangled_spindle_member_non_null_fields","value":"(\"tangled_spindle_member\".\"deleted\" = true or (\"tangled_spindle_member\".\"subject\" is not null and \"tangled_spindle_member\".\"instance\" is not null and \"tangled_spindle_member\".\"created_at\" is not null))"}},"isRLSEnabled":false},"public.tangled_star":{"name":"tangled_star","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"subject":{"name":"subject","type":"text","primaryKey":false,"notNull":false},"subject_did":{"name":"subject_did","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_star_did_rkey_pk":{"name":"tangled_star_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_star_cid_only_null_if_deleted":{"name":"tangled_star_cid_only_null_if_deleted","value":"(\"tangled_star\".\"cid\" is not null or \"tangled_star\".\"deleted\" = true)"},"tangled_star_non_null_fields":{"name":"tangled_star_non_null_fields","value":"(\"tangled_star\".\"deleted\" = true or \"tangled_star\".\"created_at\" is not null)"}},"isRLSEnabled":false},"public.tangled_string":{"name":"tangled_string","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"filename":{"name":"filename","type":"text","primaryKey":false,"notNull":false},"description":{"name":"description","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false},"contents":{"name":"contents","type":"text","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_string_did_rkey_pk":{"name":"tangled_string_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_string_cid_only_null_if_deleted":{"name":"tangled_string_cid_only_null_if_deleted","value":"(\"tangled_string\".\"cid\" is not null or \"tangled_string\".\"deleted\" = true)"},"tangled_string_non_null_fields":{"name":"tangled_string_non_null_fields","value":"(\"tangled_string\".\"deleted\" = true or (\"tangled_string\".\"filename\" is not null and \"tangled_string\".\"description\" is not null and \"tangled_string\".\"created_at\" is not null and \"tangled_string\".\"contents\" is not null))"}},"isRLSEnabled":false},"public.tangled_vouch":{"name":"tangled_vouch","schema":"","columns":{"did":{"name":"did","type":"text","primaryKey":false,"notNull":true},"rev":{"name":"rev","type":"text","primaryKey":false,"notNull":true},"rkey":{"name":"rkey","type":"text","primaryKey":false,"notNull":true},"cid":{"name":"cid","type":"text","primaryKey":false,"notNull":false},"deleted":{"name":"deleted","type":"boolean","primaryKey":false,"notNull":true},"kind":{"name":"kind","type":"tangled_vouch_kind","typeSchema":"public","primaryKey":false,"notNull":false},"reason":{"name":"reason","type":"text","primaryKey":false,"notNull":false},"created_at":{"name":"created_at","type":"timestamp with time zone","primaryKey":false,"notNull":false}},"indexes":{},"foreignKeys":{},"compositePrimaryKeys":{"tangled_vouch_did_rkey_pk":{"name":"tangled_vouch_did_rkey_pk","columns":["did","rkey"]}},"uniqueConstraints":{},"policies":{},"checkConstraints":{"tangled_vouch_cid_only_null_if_deleted":{"name":"tangled_vouch_cid_only_null_if_deleted","value":"(\"tangled_vouch\".\"cid\" is not null or \"tangled_vouch\".\"deleted\" = true)"},"tangled_vouch_non_null_fields":{"name":"tangled_vouch_non_null_fields","value":"(\"tangled_vouch\".\"deleted\" = true or (\"tangled_vouch\".\"kind\" is not null and \"tangled_vouch\".\"created_at\" is not null))"}},"isRLSEnabled":false}},"enums":{"public.raw_action":{"name":"raw_action","schema":"public","values":["create","update","delete"]},"public.tangled_pipeline_status_status":{"name":"tangled_pipeline_status_status","schema":"public","values":["pending","running","failed","timeout","cancelled","success"]},"public.tangled_pipeline_trigger_metadata_kind":{"name":"tangled_pipeline_trigger_metadata_kind","schema":"public","values":["push","pull_request","manual"]},"public.tangled_vouch_kind":{"name":"tangled_vouch_kind","schema":"public","values":["vouch","denounce"]}},"schemas":{},"sequences":{},"roles":{},"policies":{},"views":{},"_meta":{"columns":{},"schemas":{},"tables":{}}} diff --git a/api/src/db/drizzle/meta/_journal.json b/api/src/db/drizzle/meta/_journal.json index eacda96..58fe05b 100644 --- a/api/src/db/drizzle/meta/_journal.json +++ b/api/src/db/drizzle/meta/_journal.json @@ -22,6 +22,13 @@ "when": 1777821401885, "tag": "0002_tangled_repo", "breakpoints": true + }, + { + "idx": 3, + "version": "7", + "when": 1777827302131, + "tag": "0003_add_level_one_tables", + "breakpoints": true } ] } \ No newline at end of file diff --git a/api/src/db/tables/tangled.ts b/api/src/db/tables/tangled.ts index 6b329ff..5dc9561 100644 --- a/api/src/db/tables/tangled.ts +++ b/api/src/db/tables/tangled.ts @@ -1,5 +1,5 @@ import { and, eq, isNotNull, or, sql } from "drizzle-orm"; -import { boolean, check, pgTable, primaryKey, text, timestamp } from "drizzle-orm/pg-core"; +import { boolean, check, integer, jsonb, pgEnum, pgTable, primaryKey, text, timestamp } from "drizzle-orm/pg-core"; export const tangledProfile = pgTable("tangled_profile", { did: text().primaryKey(), @@ -29,6 +29,574 @@ export const tangledProfile = pgTable("tangled_profile", { ) ]); +export const tangledReaction = pgTable("tangled_reaction", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + subject: text(), + reaction: text(), + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_reaction_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_reaction_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.subject), + isNotNull(table.reaction), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledStar = pgTable("tangled_star", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + subject: text(), + subjectDid: text(), + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_star_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_star_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledRefUpdate = pgTable("tangled_ref_update", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + ref: text(), + committerDid: text(), + ownerDid: text(), + repoDid: text(), + repoName: text(), + oldSha: text(), + newSha: text(), + metaIsDefaultRef: boolean(), + metaLangBreakdown: jsonb(), + metaCommitCount: jsonb(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_ref_update_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_ref_update_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.ref), + isNotNull(table.committerDid), + isNotNull(table.repoName), + isNotNull(table.oldSha), + isNotNull(table.newSha), + isNotNull(table.metaIsDefaultRef), + isNotNull(table.metaCommitCount), + ) + )! + ) +]); + +export const tangledFollow = pgTable("tangled_follow", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + subject: text(), + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_follow_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_follow_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.subject), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledVouchKind = pgEnum('tangled_vouch_kind', ["vouch", "denounce"]); + +export const tangledVouch = pgTable("tangled_vouch", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + kind: tangledVouchKind(), + reason: text(), + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_vouch_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_vouch_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.kind), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledIssueComment = pgTable("tangled_issue_comment", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + issue: text(), + body: text(), + createdAt: timestamp({ withTimezone: true }), + replyTo: text(), + mentions: text().array(), + references: text().array(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_issue_comment_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_issue_comment_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.issue), + isNotNull(table.body), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledIssue = pgTable("tangled_issue", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + repo: text(), + repoDid: text(), + title: text(), + body: text(), + createdAt: timestamp({ withTimezone: true }), + mentions: text().array(), + references: text().array(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_issue_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_issue_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.title), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledIssueState = pgTable("tangled_issue_state", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + issue: text(), + state: text(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_issue_state_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_issue_state_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.issue), + isNotNull(table.state), + ) + )! + ) +]); + +export const tangledKnot = pgTable("tangled_knot", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_knot_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_knot_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledKnotMember = pgTable("tangled_knot_member", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + subject: text(), + domain: text(), + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_knot_member_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_knot_member_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.subject), + isNotNull(table.domain), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledLabelDefinition = pgTable("tangled_label_definition", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + name: text(), + valueType: text(), + valueFormat: text(), + valueEnum: text().array(), + scope: text().array(), + color: text(), + createdAt: timestamp({ withTimezone: true }), + multiple: boolean(), + +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_label_definition_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_label_definition_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.name), + isNotNull(table.valueType), + isNotNull(table.valueFormat), + isNotNull(table.scope), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledLabelOp = pgTable("tangled_label_op", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + subject: text(), + performedAt: timestamp({ withTimezone: true }), + add: jsonb(), + delete: jsonb(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_label_op_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_label_op_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.subject), + isNotNull(table.add), + isNotNull(table.delete), + isNotNull(table.performedAt), + ) + )! + ) +]); + +export const tangledPipelineTriggerMetadataKind = pgEnum('tangled_pipeline_trigger_metadata_kind', ["push", "pull_request", "manual"]); + +export const tangledPipeline = pgTable("tangled_pipeline", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + triggerMetadataKind: tangledPipelineTriggerMetadataKind(), + triggerMetadataRepoKnot: text(), + triggerMetadataRepoDid: text(), + triggerMetadataRepoRepoDid: text(), // I know, confusing + triggerMetadataRepoRepo: text(), // i know, I know, + triggerMetadataRepoDefaultBranch: text(), + triggerMetadataPushRef: text(), + triggerMetadataPushNewSha: text(), + triggerMetadataPushOldSha: text(), + triggerMetadataPullSourceBranch: text(), + triggerMetadataPullTargetBranch: text(), + triggerMetadataPullSourceSha: text(), + triggerMetadataPullAction: text(), + triggerMetadataManual: jsonb(), + + workflows: jsonb(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_pipeline_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_pipeline_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.triggerMetadataKind), + isNotNull(table.triggerMetadataRepoKnot), + isNotNull(table.triggerMetadataRepoDid), + isNotNull(table.triggerMetadataRepoDefaultBranch), + isNotNull(table.workflows), + ) + )! + ) +]); + +export const tangledPipelineStatusStatus = pgEnum('tangled_pipeline_status_status', [ + "pending", + "running", + "failed", + "timeout", + "cancelled", + "success" +]); + +export const tangledPipelineStatus = pgTable("tangled_pipeline_status", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + pipeline: text(), + workflow: text(), + status: tangledPipelineStatusStatus(), + createdAt: timestamp({ withTimezone: true }), + error: text(), + exitCode: integer(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_pipeline_status_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_pipeline_status_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.pipeline), + isNotNull(table.workflow), + isNotNull(table.status), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledPublicKey = pgTable("tangled_public_key", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + key: text(), + name: text(), + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_public_key_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_public_key_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.key), + isNotNull(table.name), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledPullComment = pgTable("tangled_pull_comment", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + pull: text(), + body: text(), + createdAt: timestamp({ withTimezone: true }), + mentions: text().array(), + references: text().array(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_pull_comment_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_pull_comment_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.pull), + isNotNull(table.body), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledPull = pgTable("tangled_pull", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + title: text(), + body: text(), + rounds: jsonb(), + sourceBranch: text(), + sourceRepo: text(), + sourceRepoDid: text(), + targetBranch: text(), + targetRepo: text(), + targetRepoDid: text(), + createdAt: timestamp({ withTimezone: true }), + mentions: text().array(), + references: text().array(), + dependentOn: text(), + +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_pull_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_pull_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.targetBranch), + isNotNull(table.title), + isNotNull(table.createdAt), + isNotNull(table.rounds), + ) + )! + ) +]); + +export const tangledPullStatus = pgTable("tangled_pull_status", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + pull: text(), + status: text(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_pull_status_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_pull_status_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.pull), + isNotNull(table.status), + ) + )! + ) +]); + +export const tangledArtifact = pgTable("tangled_artifact", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + name: text(), + repo: text(), + repoDid: text(), + tag: text(), // TODO: look into making this... bytes + createdAt: timestamp({ withTimezone: true }), + artifactRef: text(), + artifactSize: integer(), + artifactMimeType: text(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_artifact_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_artifact_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.name), + isNotNull(table.tag), + isNotNull(table.createdAt), + isNotNull(table.artifactRef), + isNotNull(table.artifactSize), + isNotNull(table.artifactMimeType), + ) + )! + ) +]); + +export const tangledCollaborator = pgTable("tangled_collaborator", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + subject: text(), + repo: text(), + repoDid: text(), + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_collaborator_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_collaborator_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.subject), + isNotNull(table.createdAt), + ) + )! + ) +]); + export const tangledRepo = pgTable("tangled_repo", { did: text().notNull(), rev: text().notNull(), @@ -60,3 +628,76 @@ export const tangledRepo = pgTable("tangled_repo", { )! ) ]); + +export const tangledSpindleMember = pgTable("tangled_spindle_member", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + subject: text(), + instance: text(), + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_spindle_member_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_spindle_member_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.subject), + isNotNull(table.instance), + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledSpindle = pgTable("tangled_spindle", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + createdAt: timestamp({ withTimezone: true }), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_spindle_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_spindle_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.createdAt), + ) + )! + ) +]); + +export const tangledString = pgTable("tangled_string", { + did: text().notNull(), + rev: text().notNull(), + rkey: text().notNull(), + cid: text(), + deleted: boolean().notNull(), + + filename: text(), + description: text(), + createdAt: timestamp({ withTimezone: true }), + contents: text(), +}, (table) => [ + primaryKey({ columns: [table.did, table.rkey] }), + check("tangled_string_cid_only_null_if_deleted", or(isNotNull(table.cid), eq(table.deleted, sql`true`))!), + check("tangled_string_non_null_fields", + or( + eq(table.deleted, sql`true`), + and( + isNotNull(table.filename), + isNotNull(table.description), + isNotNull(table.createdAt), + isNotNull(table.contents), + ) + )! + ) +]); -- 2.51.2