Spaces:
Sleeping
Sleeping
| CREATE TABLE IF NOT EXISTS "agent" ( | |
| "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, | |
| "name" text NOT NULL, | |
| "description" text, | |
| "icon" json, | |
| "user_id" uuid NOT NULL, | |
| "instructions" json, | |
| "created_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL, | |
| "updated_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL | |
| ); | |
| --> statement-breakpoint | |
| CREATE TABLE IF NOT EXISTS "archive" ( | |
| "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, | |
| "name" text NOT NULL, | |
| "description" text, | |
| "user_id" uuid NOT NULL, | |
| "created_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL, | |
| "updated_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL | |
| ); | |
| --> statement-breakpoint | |
| CREATE TABLE IF NOT EXISTS "archive_item" ( | |
| "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, | |
| "archive_id" uuid NOT NULL, | |
| "item_id" uuid NOT NULL, | |
| "user_id" uuid NOT NULL, | |
| "added_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL | |
| ); | |
| --> statement-breakpoint | |
| -- Migrate data from project to agent and archive if project table exists | |
| DO $$ | |
| BEGIN | |
| IF EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'project') | |
| AND EXISTS (SELECT FROM information_schema.columns | |
| WHERE table_name = 'chat_thread' AND column_name = 'project_id') | |
| THEN | |
| -- 1. Migrate project system prompts to agent table | |
| INSERT INTO "agent" (id, name, user_id, instructions, created_at, updated_at) | |
| SELECT | |
| id, | |
| name, | |
| user_id, | |
| instructions, | |
| created_at, | |
| updated_at | |
| FROM "project" | |
| ON CONFLICT (id) DO NOTHING; | |
| -- 2. Create default archives for each project's threads | |
| INSERT INTO "archive" (id, name, description, user_id, created_at, updated_at) | |
| SELECT | |
| gen_random_uuid(), | |
| p.name || ' Archive', | |
| 'Migrated from project: ' || p.name, | |
| p.user_id, | |
| p.created_at, | |
| p.updated_at | |
| FROM "project" p | |
| WHERE EXISTS ( | |
| SELECT 1 FROM "chat_thread" ct WHERE ct.project_id = p.id | |
| ); | |
| -- 3. Move project threads to archives | |
| INSERT INTO "archive_item" (id, archive_id, item_id, user_id, added_at) | |
| SELECT | |
| gen_random_uuid(), | |
| a.id, | |
| ct.id, | |
| ct.user_id, | |
| ct.created_at | |
| FROM "chat_thread" ct | |
| JOIN "project" p ON ct.project_id = p.id | |
| JOIN "archive" a ON a.user_id = p.user_id | |
| AND a.name = p.name || ' Archive' | |
| WHERE ct.project_id IS NOT NULL; | |
| -- 4. Drop project table after migration | |
| DROP TABLE "project" CASCADE; | |
| END IF; | |
| END $$; | |
| --> statement-breakpoint | |
| DO $$ BEGIN | |
| ALTER TABLE "agent" ADD CONSTRAINT "agent_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE no action ON UPDATE no action; | |
| EXCEPTION | |
| WHEN duplicate_object THEN null; | |
| END $$; | |
| --> statement-breakpoint | |
| DO $$ BEGIN | |
| ALTER TABLE "archive" ADD CONSTRAINT "archive_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; | |
| EXCEPTION | |
| WHEN duplicate_object THEN null; | |
| END $$; | |
| --> statement-breakpoint | |
| DO $$ BEGIN | |
| ALTER TABLE "archive_item" ADD CONSTRAINT "archive_item_archive_id_archive_id_fk" FOREIGN KEY ("archive_id") REFERENCES "public"."archive"("id") ON DELETE cascade ON UPDATE no action; | |
| EXCEPTION | |
| WHEN duplicate_object THEN null; | |
| END $$; | |
| --> statement-breakpoint | |
| DO $$ BEGIN | |
| ALTER TABLE "archive_item" ADD CONSTRAINT "archive_item_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; | |
| EXCEPTION | |
| WHEN duplicate_object THEN null; | |
| END $$; | |
| --> statement-breakpoint | |
| CREATE INDEX IF NOT EXISTS "archive_item_item_id_idx" ON "archive_item" USING btree ("item_id"); | |
| --> statement-breakpoint | |
| -- Remove project_id column from chat_thread if it exists | |
| DO $$ | |
| BEGIN | |
| IF EXISTS (SELECT 1 FROM information_schema.columns | |
| WHERE table_name = 'chat_thread' AND column_name = 'project_id') THEN | |
| ALTER TABLE "chat_thread" DROP COLUMN "project_id"; | |
| END IF; | |
| END $$; |