CREATE TABLE IF NOT EXISTS "projects" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"number" serial NOT NULL,
"repository_id" uuid NOT NULL,
"owner_id" uuid NOT NULL,
"title" text NOT NULL,
"description" text NOT NULL DEFAULT '',
"state" text NOT NULL DEFAULT 'open',
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp DEFAULT now() NOT NULL,
CONSTRAINT "projects_repo_fk" FOREIGN KEY ("repository_id") REFERENCES "repositories"("id") ON DELETE cascade,
CONSTRAINT "projects_owner_fk" FOREIGN KEY ("owner_id") REFERENCES "users"("id")
);
CREATE INDEX IF NOT EXISTS "projects_repo" ON "projects" ("repository_id");
CREATE UNIQUE INDEX IF NOT EXISTS "projects_repo_number" ON "projects" ("repository_id", "number");
CREATE TABLE IF NOT EXISTS "project_columns" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"project_id" uuid NOT NULL,
"name" text NOT NULL,
"position" integer NOT NULL DEFAULT 0,
"created_at" timestamp DEFAULT now() NOT NULL,
CONSTRAINT "project_columns_project_fk" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE cascade
);
CREATE INDEX IF NOT EXISTS "project_columns_project" ON "project_columns" ("project_id");
CREATE TABLE IF NOT EXISTS "project_items" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"project_id" uuid NOT NULL,
"column_id" uuid NOT NULL,
"position" integer NOT NULL DEFAULT 0,
"item_type" text NOT NULL DEFAULT 'note',
"item_id" uuid,
"title" text NOT NULL DEFAULT '',
"note" text NOT NULL DEFAULT '',
"created_at" timestamp DEFAULT now() NOT NULL,
"updated_at" timestamp DEFAULT now() NOT NULL,
CONSTRAINT "project_items_project_fk" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE cascade,
CONSTRAINT "project_items_column_fk" FOREIGN KEY ("column_id") REFERENCES "project_columns"("id") ON DELETE cascade
);
CREATE INDEX IF NOT EXISTS "project_items_project" ON "project_items" ("project_id");
CREATE INDEX IF NOT EXISTS "project_items_column" ON "project_items" ("column_id", "position");
|