план: мульти-пользовательские промпты
This commit is contained in:
@@ -0,0 +1,57 @@
|
|||||||
|
# План: Мульти-пользовательские промпты
|
||||||
|
|
||||||
|
**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
|
||||||
Reference in New Issue
Block a user