v1.2.2
[v1.2.2] — 2026-06-28
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/.
Добавлено
Обновления
GET /api/v1/version/check— сравнение текущей версии с последним релизом на GitHub (кеш на сервере 24 ч)- Веб-клиент: раз в сутки проверка обновления; модальное предупреждение о бэкапе и release notes — только для администраторов; ссылка «скачайте бекап» → Настройки → Админка → Бекапы
Производительность и API
- Миграция
028: колонкаaccounts.current_balance— денормализованный баланс счёта; индексidx_tx_user_account_balanceнаtransactions accountbalance— пересчёт и хранениеcurrent_balanceпри изменении операций;BackfillAllпри миграции- Пакетные SQL-запросы для дашборда и прогноза (
ForecastsByUser, агрегаты future-операций по всем счетам за один проход) - In-memory кеш GET-ответов на сервере (
apicache): TTL 5 мин для справочников, 1 мин для остальных; инвалидация при любой мутации пользователя (docs/ui-api-cache.md) GET /api/v1/ui/meta— агрегированные справочники для старта веб-клиента (счета, банки, категории, должники, кредиты); банки из ответа попадают в клиентский кеш на 24 ч
Фоновые задачи
- Активация future-операций в фоне:
FutureRunnerвscheduler— раз в минуту и при старте сервера; допустимый лаг актуальности — до ~1 мин
UI/UX
- Главная (
/), Все операции (/transactions), страница счёта (/accounts/[id]): три кнопки-иконки Доход / Расход / Перевод (NewTransactionButtons, Font Awesome Solid:f067,f068,f0ec); подписи только вtitle/aria-label - На странице Все операции добавлена кнопка Перевод (раньше был только доход/расход через общую «Операция»)
- Форма новой операции (
TransactionForm): переключатель типа убран — тип задаётся кнопкой; заголовок модалки «Доход» или «Расход»; при редактировании тип по-прежнему только текстом - На странице счёта кнопки операций вынесены из меню «⋯» в шапку карточки (десктоп); на мобильных — в меню «⋯»; в меню — редактирование, основной, архив, удаление
/stats→ «По категориям»: отдельные секции доходы и расходы; процент считается внутри каждого типа
Изменено
Производительность
- Баланс счёта читается из
current_balance, а не пересчитывается на каждый запрос ActivateDueFutureTransactionsубран из hot-pathList,DashboardForUser,stats.Summary— активация только в фоне
UI/UX
- Блок контекстной статистики операций и
/stats: поле «Разница» убрано (дублировало баланс) - Баннер запросов сброса пароля у администратора: загрузка
GET /admin/password-reset-requestsодин раз при монтировании, без повторных запросов на каждую навигацию
Документация и контракты
- OpenAPI: уточнено описание
percentageвStatsCategoryItem; схемаUIMetaResponseдляGET /ui/meta - docs/ui-api-cache.md — серверный in-memory кеш GET; клиент кеширует только статические банки
Исправлено
UI/UX
- Страница счёта: клик по счёту-контрагенту в строке перевода корректно открывает страницу другого счёта (в обе стороны — и «с», и «на»)
Техническое
- Расширено покрытие e2e-тестами (счета, операции, фильтры, импорт, кредиты, долги, админка, perf-сценарии)
make prepare— автофикс Go (golangci-lint fmt,golangci-lint run --fix), web (npm run lint:fix) и генерация (sqlc, OpenAPI, иконки категорий)- Версия
1.2.2
Коммиты
Changelog
- 96c34cf docs
- 823f59e Активация future-операций в фоне
- 6a4f162 Страница счёта - клик на другой счёт в переводах
- bbf751c Убрать поле "Разница", дублирует баланс
- eb3349a отключить постоянные запросы api/v1/admin/password-reset-requests
- 69961b2 - линтеры для go и web - команда make prepare
- a8afbaf - оптимизирована работа с базой данных - добавлен серверный кеш - более полное покрытие проекта e2e тестами
- 323e764 - добавлена проверка обновлений (раз в сутки) - Кнопки создания операций разделены (доход, расход, перевод) на страницах: Главная, Счёт, Список операций - На страницу счёта кнопки создания операций вынесены из меню на смтраницу - На странице списка операций добавлена кнопка "Перевод" - В мобильной версии на странице счёта кнопки добавления операций убраны в меню - Окно создания операции - убран тип операции - Обновлены e2e-тесты - Переработан ROADMAP
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.2.2. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.2.2
docker compose -f docker-compose.yaml up -dИли без compose:
docker run -d --name buhgalter \
-p 8765:8765 \
-v buhgalter-data:/app/data \
-v buhgalter-backups:/app/backups \
--restart unless-stopped \
ghcr.io/kai-zer-ru/buhgalter:1.2.2