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

58 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# План: Мульти-пользовательские промпты
**v1.0.86+**
## Схема БД
```sql
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