From bab90f6947140474960719ff6477afee2d3dca3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 9 Apr 2026 19:09:58 +0300 Subject: [PATCH] docs: update thinking log + progress for v0.1.6 --- doc/progress.md | 33 +++++++++++++++++++++ doc/thinking/2026-04-09.md | 60 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/doc/progress.md b/doc/progress.md index 933fc24..f30e4bf 100644 --- a/doc/progress.md +++ b/doc/progress.md @@ -1942,3 +1942,36 @@ G15 перезапущен → **21/21 PASS ✅** - [ ] DB_DSN в function pod env - [ ] schema.sql при деплое функции + +--- + +## 2026-04-09 (вечер) — shared-sqs v0.1.6: Queue CRUD + Message UI + +### Реализовано + +**Backend (shared-sqs/app/admin/admin.go):** +- `POST /tenants/{id}/queues` — создание очереди (с проверкой лимита MaxQueues) +- `DELETE /tenants/{id}/queues/{name}` — удаление очереди +- `GET /tenants/{id}/queues/{name}/messages` — peek-просмотр сообщений (read-only, без ReceiptHandle) +- `POST /tenants/{id}/queues/{name}/messages` — отправка сообщения через admin API +- `DELETE /tenants/{id}/queues/{name}/messages` — purge (очистка без удаления очереди) + +**Frontend (shared-sqs/app/ui/index.html):** +- Expandable строки очередей: клик на имя → inline-таблица сообщений +- Кнопки действий: 📨 Отправить / 🗑 Очистить / ✕ Удалить +- Модалка отправки сообщения (`#modal-send`) +- Модалка детали сообщения (`#modal-msg-detail`) — c копированием тела +- Модалка создания очереди (`#modal-queue-create`) +- JS: `msgCache` для безопасной передачи тела без onclick attrs + +**Сборка:** +- `naeel/shared-sqs:v0.1.6` собран и запушен на Docker Hub + +**Git:** коммит `610c604`, ветка `shared-sqs` + +### Осталось + +- [ ] Задеплоить v0.1.6 в K8s (kubectl-токен истёк, нужно обновить) + ``` + kubectl -n shared-sqs set image deployment/shared-sqs shared-sqs=naeel/shared-sqs:v0.1.6 + ``` diff --git a/doc/thinking/2026-04-09.md b/doc/thinking/2026-04-09.md index 27fa75c..80b42af 100644 --- a/doc/thinking/2026-04-09.md +++ b/doc/thinking/2026-04-09.md @@ -287,3 +287,63 @@ go build → OK (все этапы 1-8) ### Коммит - `12b3bb9` — feat(shared-sqs): add SQS Console UI (v0.1.4) - Pushed to `sqs-operator` + +--- +# GitHub Copilot (Claude Sonnet 4.6) — продолжение сессии 2026-04-09 (вечер) + +## Контекст + +Продолжение с конца предыдущего сеанса. Была реализована база admins API. +Нужно было: +1. Исправить `models.NewUUID()` → найти правильную функцию генерации UUID +2. Написать frontend для peek/send/purge/queue CRUD +3. Собрать + задеплоить v0.1.6 + +## Анализ + ход мыслей + +### UUID +Сделал `grep` по Uuid в gosqs пакете → нашёл `uuid.NewString()` из `github.com/google/uuid`. +Исправил admin.go: добавил import + заменил `models.NewUUID()` → `uuid.NewString()`. +Сборка прошла чисто. + +### Frontend (index.html) +Прочитал весь текущий HTML/JS. Отметил: +- CSS уже есть: `.card`, `.btn`, `.badge`, `.modal`, `.hidden` +- JS helpers: `esc()`, `api()`, `fmtDate()`, `fmtBytes()`, `fmtDuration()` +- Шаблонные literals со вложенностью (outer: `el.innerHTML = \`...\``, inner: `.map(q => \`...\`)`) + +Решения: +- **IDs для expandable rows**: `msgs-${q.name}`, `qicon-${q.name}` — SQS-имена только `[a-zA-Z0-9_-]`, безопасно +- **msgCache**: хранить весь объект сообщения в Map по id — чтобы не передавать body через onclick attrs (безопаснее, нет проблем с кавычками) +- **State для модалок**: `_sendState`, `_createQueueState` — сохраняем перед открытием модалки +- **template literal nesting**: `${esc(tenant.id)}` в inner template работает т.к. tenant из closure + +Добавлено в HTML: +- 3 новые модалки: `#modal-send`, `#modal-msg-detail`, `#modal-queue-create` +- CSS: `.msg-expand`, `.msg-expand-inner`, `.queue-name-link` +- Toolbar очередей: + кнопка "+ Очередь" +- Каждая строка очереди: клик на имя → toggle сообщений; кнопки 📨 🗑 ✕ +- Скрытая expandable строка с `#msgs-inner-{name}` +- JS: `toggleMessages`, `loadMessages`, `renderQueueMessages`, `openMsgDetail`, `closeMsgDetail`, `openSendModal`, `closeSendModal`, `sendMessage`, `purgeQueueConfirm`, `openCreateQueueModal`, `closeQueueModal`, `createQueue`, `deleteQueueConfirm`, `copyTextarea` + +Синтаксис проверен через `node -e "new Function(script)"` → OK. + +### Деплой +- Docker build v0.1.6 на VM → успешно +- `docker push naeel/shared-sqs:v0.1.6` → успешно +- `kubectl set image` → **ОШИБКА**: JWT токен в kubeconfig на VM истёк в 16:01 UTC, текущее время 16:07 UTC +- Решение: обновил `deployment.yaml` с новым тегом → пользователь задеплоит после обновления токена + +### Коммит +- `610c604` feat(shared-sqs): queue CRUD + message peek/send/purge in UI (v0.1.6) +- Pushed to branch `shared-sqs` + +## Итог + +Всё реализовано. Осталось только задеплоить — нужен свежий K8s токен (текущий истёк). +Команда деплоя: +``` +kubectl -n shared-sqs set image deployment/shared-sqs shared-sqs=naeel/shared-sqs:v0.1.6 +# или +kubectl apply -f shared-sqs/deployments/k8s/deployment.yaml +```