feat(documents): папки шаблонов, маппинги и поле document_template; fix(batch): атомарное создание задач, idempotency и массовое удаление в реестре
This commit is contained in:
53
migrations/0040_document_template_folders_and_targets.sql
Normal file
53
migrations/0040_document_template_folders_and_targets.sql
Normal file
@@ -0,0 +1,53 @@
|
||||
-- Document Center: template folders, folder-level variable mappings, and generation targets
|
||||
-- Safe to run multiple times (CREATE TABLE IF NOT EXISTS, CREATE INDEX IF NOT EXISTS).
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "document_template_folders" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"organization_id" integer NOT NULL,
|
||||
"parent_id" integer,
|
||||
"name" varchar(100) NOT NULL,
|
||||
"position" integer DEFAULT 0 NOT NULL,
|
||||
"created_at" timestamp DEFAULT now(),
|
||||
"updated_at" timestamp DEFAULT now()
|
||||
);
|
||||
--> statement-breakpoint
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "document_folder_mappings" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"folder_id" integer NOT NULL,
|
||||
"code" varchar(100) NOT NULL,
|
||||
"label" varchar(200),
|
||||
"description" text,
|
||||
"source" varchar(30) NOT NULL,
|
||||
"mapping" jsonb DEFAULT '{}'::jsonb,
|
||||
"default_value" text,
|
||||
"sort_order" integer DEFAULT 0,
|
||||
"created_at" timestamp DEFAULT now()
|
||||
);
|
||||
--> statement-breakpoint
|
||||
|
||||
-- Add folder and target columns to document_templates
|
||||
ALTER TABLE "document_templates" ADD COLUMN IF NOT EXISTS "folder_id" integer;
|
||||
ALTER TABLE "document_templates" ADD COLUMN IF NOT EXISTS "target_form_id" integer;
|
||||
ALTER TABLE "document_templates" ADD COLUMN IF NOT EXISTS "target_field_code" varchar(100);
|
||||
ALTER TABLE "document_templates" ADD COLUMN IF NOT EXISTS "target_task_source" varchar(20) DEFAULT 'current';
|
||||
ALTER TABLE "document_templates" ADD COLUMN IF NOT EXISTS "target_source_field_code" varchar(100);
|
||||
|
||||
-- Foreign keys
|
||||
ALTER TABLE "document_template_folders" DROP CONSTRAINT IF EXISTS "document_template_folders_organization_id_organizations_id_fk";
|
||||
ALTER TABLE "document_template_folders" ADD CONSTRAINT "document_template_folders_organization_id_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "organizations"("id") ON DELETE cascade;
|
||||
-- parent_id не объявляем как FK, чтобы избежать циклической ссылки в Drizzle ORM (как у других деревьев: form_folders, directory_folders, roles)
|
||||
|
||||
ALTER TABLE "document_folder_mappings" DROP CONSTRAINT IF EXISTS "document_folder_mappings_folder_id_document_template_folders_id_fk";
|
||||
ALTER TABLE "document_folder_mappings" ADD CONSTRAINT "document_folder_mappings_folder_id_document_template_folders_id_fk" FOREIGN KEY ("folder_id") REFERENCES "document_template_folders"("id") ON DELETE cascade;
|
||||
|
||||
ALTER TABLE "document_templates" DROP CONSTRAINT IF EXISTS "document_templates_folder_id_document_template_folders_id_fk";
|
||||
ALTER TABLE "document_templates" ADD CONSTRAINT "document_templates_folder_id_document_template_folders_id_fk" FOREIGN KEY ("folder_id") REFERENCES "document_template_folders"("id") ON DELETE set null;
|
||||
ALTER TABLE "document_templates" DROP CONSTRAINT IF EXISTS "document_templates_target_form_id_forms_id_fk";
|
||||
ALTER TABLE "document_templates" ADD CONSTRAINT "document_templates_target_form_id_forms_id_fk" FOREIGN KEY ("target_form_id") REFERENCES "forms"("id") ON DELETE set null;
|
||||
|
||||
-- Indexes
|
||||
CREATE INDEX IF NOT EXISTS "document_template_folders_org_parent_idx" ON "document_template_folders" ("organization_id", "parent_id");
|
||||
CREATE INDEX IF NOT EXISTS "document_template_folders_position_idx" ON "document_template_folders" ("position");
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "document_folder_mappings_code_unique" ON "document_folder_mappings" ("folder_id", "code");
|
||||
CREATE INDEX IF NOT EXISTS "document_templates_org_folder_idx" ON "document_templates" ("organization_id", "folder_id");
|
||||
Reference in New Issue
Block a user