bablo / стройплощадка
← Все сессии
Дата: 2026-05-20
Часов: 1.5
Кто:

2026-05-20 (вечер) — Фиксы загрузки файлов, метрика остатка аванса, UI документов

Контекст

Второй раунд фидбэка Руслана за день. 4 новые проблемы.

Фикс 1 — Округление суммы договора

При редактировании суммы договора она округлялась до целых (аванс отображался с копейками, договор нет).

Причина: maximumFractionDigits: 0 в отображении карточки договора.

Правка: app/app/(app)/projects/[id]/page.tsxmaximumFractionDigits: 02.

Фикс 2 — Метрика «Остаток на руках»

Руслан попросил видеть в моменте: получили аванс — потратили — сколько осталось.

Формула: Остаток на руках = Поступления от заказчика − Выплаты − Внесметные расходы

Добавлено поле cashBalance в MarginResult (margin.ts) и новая строка в MarginCard.tsx:

  • Поступило от заказчика: +345M ₽
  • Остаток на руках: 345M ₽ (зелёный если ≥ 0, красный если уходит в минус)

Фикс 3 — Загрузка файлов через веб

Проблема: «Счёт через веб интерфейс не загружается. Опять ошибка.»

Причина: MinIO бакет bablo-documents не был создан. Контейнер MinIO запускался чистым, бакет надо создавать явно.

Решение:

  1. Создан бакет: mc mb local/bablo-documents
  2. В uploadSingle.ts добавлено авто-создание бакета при первом обращении (HeadBucketCommand + CreateBucketCommand)

Верификация (curl с реальной сессией): {"documentId":"fd821101-..."} — PASS. Файл записан в MinIO и в БД.

Фикс 4 — Документы от бота не видны в веб

Проблема: «Загрузил через бота картинку. А в веб интерфейсе не могу посмотреть что загружено.»

Документы в БД есть, но UI показывал только тип и дату — ни имя файла, ни текст.

Правки в app/app/(app)/documents/page.tsx:

  • Имя файла — извлекается из S3-ключа (source_url.split("/").pop())
  • Канал — Telegram / Загрузка / Текст
  • Превью текста — разворачиваемый <details> с raw_text
  • Предупреждение для старых документов от бота без source_url: «Файл не сохранён — пришли ещё раз»

Коммиты сессии

КоммитОписание
255970afix(ruslan): contract rounding, cashBalance, MinIO bucket, docs UI

Стройплощадка

Передеплоена на Vercel после сессии. 21 страница, 10 work-логов.

Статус на конец сессии

  • Загрузка файлов работает — проверено
  • Ждём фидбэк Руслана по новым изменениям
  • Старые 3 документа без source_url (бот присылал до создания бакета) — Руслан должен переслать заново
  • Открытая задача: NPM Proxy Host (домен вместо порта 3010)