feat(fields): мягкое удаление полей формы — архив удалённых с восстановлением и блок «Удалённые поля» в задаче

This commit is contained in:
2026-09-21 14:35:45 +03:00
parent d5f2925886
commit e3f0ebfb89
18 changed files with 296 additions and 48 deletions

View File

@@ -561,10 +561,11 @@ export const formFields = pgTable("form_fields", {
linkToUserProfile: boolean("link_to_user_profile").default(false), // связывать задачи формы с профилем пользователя (поле типа user)
allowMultiple: boolean("allow_multiple").default(false), // разрешить множественный выбор для select/table
ganttRole: varchar("gantt_role", { length: 20 }), // 'start' | 'end' | 'milestone' | null — роль поля в Гантте
deletedAt: timestamp("deleted_at"), // мягкое удаление: скрыто везде, значения в задачах сохранены
createdAt: timestamp("created_at").defaultNow(),
}, (table) => ({
// Уникальность кода поля внутри формы
uniqueFieldCode: unique().on(table.formId, table.code),
// Уникальность кода поля внутри формы — только среди активных (удалённые не мешают)
uniqueFieldCode: uniqueIndex("form_fields_form_id_code_active_key").on(table.formId, table.code).where(sql`${table.deletedAt} IS NULL`),
// Композитный уникальный ключ для referential integrity
fieldFormComposite: unique().on(table.id, table.formId),
}));