CREATE TABLE IF NOT EXISTS "file" ( "id" text PRIMARY KEY NOT NULL, "filename" text NOT NULL, "original_name" text NOT NULL, "mime_type" text NOT NULL, "size" integer NOT NULL, "hash" text NOT NULL, "bucket_name" text NOT NULL, "object_key" text NOT NULL, "r2_url" text NOT NULL, "metadata" json, "tags" json, "visibility" varchar(16) DEFAULT 'private' NOT NULL, "user_id" text NOT NULL, "status" varchar(16) DEFAULT 'processing' NOT NULL, "processing_error" text, "uploaded_at" timestamp NOT NULL, "last_accessed_at" timestamp, "expires_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "file_access" ( "id" serial PRIMARY KEY NOT NULL, "file_id" text NOT NULL, "user_id" text NOT NULL, "can_read" boolean DEFAULT false NOT NULL, "can_write" boolean DEFAULT false NOT NULL, "can_delete" boolean DEFAULT false NOT NULL, "can_share" boolean DEFAULT false NOT NULL, "accessed_at" timestamp, "granted_at" timestamp NOT NULL, "expires_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL ); --> statement-breakpoint DO $$ BEGIN ALTER TABLE "file" ADD CONSTRAINT "file_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 "file_access" ADD CONSTRAINT "file_access_file_id_file_id_fk" FOREIGN KEY ("file_id") REFERENCES "public"."file"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "file_access" ADD CONSTRAINT "file_access_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 $$;