- таблица user_delegations (миграция 0067) + колонки delegated_from_user_id/pending_review в task_assignees - delegation.service: резолвер с цепочкой и защитой от циклов, bulk-до-назначение чанками, чистка истёкших замещений - центральный хук в addTaskAssignee: заместитель добавляется при любом назначении (ручном, автопереходе, user-поле, MCP) - контур ознакомления: после перехода отсутствующий остаётся в исполнителях с pending_review, снимается кнопкой «Ознакомлен» - inbox reasons delegation/delegation_review + фильтр «Замещение» на главной - блок «Замещение» в профиле пользователя, бейдж «за <имя>» и баннер ознакомления в карточке задачи
26 lines
1.6 KiB
SQL
26 lines
1.6 KiB
SQL
-- Замещение пользователей (delegation/substitution, референс — Pyrus).
|
|
-- user_delegations: кто кого замещает, на какой период и (опционально) по какой форме.
|
|
-- form_id IS NULL — заместитель по умолчанию для всех форм.
|
|
CREATE TABLE IF NOT EXISTS user_delegations (
|
|
id SERIAL PRIMARY KEY,
|
|
organization_id INTEGER NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
delegate_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
form_id INTEGER REFERENCES forms(id) ON DELETE CASCADE,
|
|
date_from DATE NOT NULL,
|
|
date_to DATE NOT NULL,
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS user_delegations_user_active_idx ON user_delegations(user_id, is_active);
|
|
CREATE INDEX IF NOT EXISTS user_delegations_org_idx ON user_delegations(organization_id);
|
|
|
|
-- task_assignees: признак строки заместителя (delegated_from_user_id — кого замещает)
|
|
-- и флаг «на ознакомлении» (pending_review — отсутствующий вернулся в задачу после перехода).
|
|
ALTER TABLE task_assignees
|
|
ADD COLUMN IF NOT EXISTS delegated_from_user_id INTEGER REFERENCES users(id) ON DELETE CASCADE;
|
|
ALTER TABLE task_assignees
|
|
ADD COLUMN IF NOT EXISTS pending_review BOOLEAN NOT NULL DEFAULT FALSE;
|