v1.2.4
[v1.2.4] — 2026-07-01
ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ БЕКАП! Перед обновлением сохраните копию базы (
data/buhgalter.db) и каталогаbackups/.
Добавлено
API
- API-токены: поля
never_expiresиexpires_at(RFC3339) вPOST /api/v1/user/tokens; по умолчанию срок действия — 30 дней; бессрочный токен (never_expires: true) — в UI предупреждение о риске; отозвать можно только свой токен (чужой —404 NOT_FOUND). См. docs/api/authentication.md
UI/UX
- DateTimePicker: кнопка «Сегодня» в календаре — быстрый выбор текущей даты
- Пагинация: компонент
TransactionPagination— единые кнопки «В начало / Назад / Вперёд / В конец» на/transactions, странице счёта, графике кредита и превью графика (ui-pagination.md)
Изменено
UI/UX
- Форматы даты и времени: единые правила отображения по всему UI — дата
31.12.2026, дата-время31.12.2026 12:00:00; в списках операций, долгах, кредитах, периодических операциях и плейсхолдерах уведомлений{date}/{requested_at}— без секунд (31.12.2026 12:00). Константы: web$lib/dates.ts(DISPLAY_*_FORMAT), Gotimeutil/display.go(Display*Layout); гайд docs/date-time-display.md - DateTimePicker: кнопка пикера и стандарты
operationDatetimePickerCreate/Edit,dateOnlyPicker— подписи в форматедд.мм.гггг/дд.мм.гггг чч:мм - Главная: блоки «Общий баланс» и «Долги» — в одной строке на десктопе (
sm:grid-cols-2); на мобильных — два отдельных блока - Главная — последние операции: плановые (
kind=future) и прошлые (kind=manual) — в спойлерах<details>по 10 записей; плановые сверху, свёрнуты по умолчанию; прошлые — открыты; внизу карточки — кнопка «Все операции» (transactions-display.md) - Настройки → уведомления: каждый шаблон — отдельная карточка с кнопкой Сохранить (без общей формы на все шаблоны сразу); предпросмотр и сброс — в карточке шаблона
- Админка — диагностика и бекапы:
build_timeиcreated_atчерезformatAPIDateTimeForDisplay(с секундами), а не сырой RFC3339 - Админка: компонент
AdminSupportLinks— ссылки «Поддержать проект» и «Репозиторий» на/admin/*и в Настройки → Администрирование → Система - Хлебные крошки: на всех разделах и вложенных экранах — цепочка от «Главная» через раздел (счета, настройки, админка и т.д.); в настройках и админке учитываются вкладки (ui-navigation.md)
- Уведомления — сброс пароля (Telegram/MAX): в сообщении о запросе сброса пароля — ссылка для перехода к сбросу (
/admin/users?reset=…); если внешний URL не настроен — текст «настройте внешний URL в админке». В редакторе шаблонов доступен плейсхолдер{reset_url}
Backend
- Уведомления: форматирование плейсхолдеров даты/времени через
timeutil.FormatDisplay*в часовом поясе пользователя;{date}и{requested_at}— без секунд - Уведомления — сброс пароля: плейсхолдер
{reset_url}в шаблонеpassword_reset— ссылка на/admin/users?reset={user_id}при настроенномexternal_url, иначе подсказка настроить внешний URL в админке - Экспорт Cubux (CSV): суммы в колонках «Сумма списания» / «Сумма пополнения» — десятичное число (
237.97), без суффикса_-₽; импорт по-прежнему принимает оба формата (import/cubux.md)
Сборка и релиз
- Docker (GHCR):
provenance: falseвrelease.yml— образы снова корректно отображают платформыlinux/amd64иlinux/arm64(раньше из-за attestation manifests в GHCR показывалосьunknown/unknown)
Исправлено
UI/UX
- Админка — сброс пароля: модальное окно при переходе по
?reset=из уведомления закрывается по «Отмена»; параметрresetснимается с URL, повторное открытие блокируется (dismissedResetQueryв/admin/users)
Техническое
- Unit/integration:
internal/user(handler, tokens),auth_integration_test— создание/отзыв API-токенов,never_expires,expires_at, отзыв чужого токена;internal/auth/session_test.go - Unit:
server/internal/timeutil/display_test.go,web/src/lib/dates.test.ts,web/src/lib/datetime-picker.test.ts,server/internal/notify/formatter_test.go,server/internal/importexport/cubux_test.go - e2e:
date-time-display.spec.ts— формат даты в списке операций иbuild_timeв диагностике;admin-advanced.spec.ts— закрытие сброса пароля по «Отмена», ссылки поддержки;settings-extended.spec.ts— API-токены;transaction-filters.spec.ts,transaction-actions.spec.ts— главная и пагинация - docs/release-notes-v1.2.4.md, date-time-display.md, transactions-display.md, ui-pagination.md, api/authentication.md, import/cubux.md
- Версия
1.2.4
Коммиты
Changelog
- ff7c8c9 API-документация
- a459c04 Документация
- abc2bad UI страницы настроек уведомлений
- c9904ad Пагинация - вынесена в отдельный компонент
- eeff5e3 Правки экспорта; UI главной страницы и списка операций
- c50f133 Ссылка на страницу сброса пароля в уведомлениях
- fa88325 API-токены: дата истечения, бессрочные токены. Тесты
- 369857d Пересборка документации
- 12d5910 docker-release fix
- 443a6ce Кнопка "Сегодня" в календаре. Мелкие UI исправления
- f8ffef2 Хлебные крошки
- b4cefca Окно сброса пароля - закрытие по кнопке "Отмена"
- 7a3fced Привёл в порядок отображение даты и времени
- f3411c8 UI админки: мелкие правки. Стандартизированный формат вывода даты-времени
Docker
Вложения docker-compose.yaml, .env и .env.example — compose из репозитория; .env с BUHGALTER_IMAGE_TAG=1.2.4. При необходимости: cp .env.example .env.
docker pull ghcr.io/kai-zer-ru/buhgalter:1.2.4
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.4