Files
contracts/History/multi-user-prompts-plan.md

2.4 KiB

План: Мульти-пользовательские промпты

v1.0.86+

Схема БД

CREATE TABLE IF NOT EXISTS prompts (
    id TEXT PRIMARY KEY,            -- {user_id}_{timestamp}, например "0000_20260621143000"
    user_id TEXT NOT NULL,          -- "0000" для тестов, потом Keycloak ID
    name TEXT NOT NULL,             -- имя промпта
    content TEXT NOT NULL,          -- тело промпта
    created_at TIMESTAMPTZ DEFAULT now(),
    updated_at TIMESTAMPTZ DEFAULT now()
);

API: prompt.cfm

action Метод Что
list&user_id=0000 GET Список промптов юзера
save POST {id?, user_id, name, content} Создать (без id) или обновить (с id)
delete&id=... GET/POST Удалить промпт
duplicate&id=... GET/POST Копия с новым ID = user_id + now

Ответ всегда JSON {ok: true/false, ...}.

UI (index.cfm)

Вместо текущего <textarea> + кнопок «Сохранить»/«По умолчанию»:

Компоненты:

  1. <select> — выпадающий список промптов (имя + время создания)
  2. Кнопка «Новый» — очищает поля, ждёт ввода имени + текста
  3. Кнопка «Дублировать» — копирует выбранный с именем «Копия ...»
  4. Кнопка «Удалить» — с подтверждением
  5. <input> — поле имени промпта
  6. <textarea> — тело промпта (как сейчас)
  7. Кнопка «Сохранить» — сохраняет текущий

Формат времени:

"21.06.2026 14:30" (DD.MM.YYYY HH:MM)

Порядок реализации

  1. Фаза 1 — БД: таблица prompts
  2. Фаза 2 — prompt.cfm: API list/save/delete/duplicate
  3. Фаза 3 — index.cfm: UI с селектом, новым/дубль/удалить/сохранить
  4. Фаза 4 — миграция: текущий промпт из localStorage → первый промпт в БД

Примечания

  • Пока user_id = "0000" (тестовый)
  • Keycloak: user_id = sub из JWT
  • Таблица одна на всех юзеров, ID самодостаточен
  • localStorage пока оставить как fallback