Files
obsidian-vault/personal/lessons/cashinput-is-placeholder-fail.md
T

3.1 KiB

CashInput is_placeholder — failed deploy

Дата: 2026-06-23 Статус: Код написан, в прод не попал. Последняя транзакция (1770) не сохранилась.

Что было сделано

Бэкенд

  • Transaction.is_placeholder (Boolean, default false) — колонка добавлена в БД через alembic migration (add_is_placeholder_to_transaction)
  • API принимает/возвращает is_placeholder, фильтр ?is_placeholder=true/false
  • Миграция создалась и применилась корректно — колонка в БД есть

Фронтенд (CashInput.vue)

  • Выбор валюты первым шагом (крупные кнопки $ ₽ € С̲ ₸), сохраняется в localStorage (cash_last_currency)
  • Счёт — под валютой, все счета этой валюты. После добавления — сбрасывается на первый наличный (type=cash)
  • is_placeholder = acct.type !== 'cash' — если счёт cash, то обычная транзакция; если debit/credit — placeholder

Почему не сработало

Проект не был передеплоен. Docker-команды на macOS провалились:

  1. docker compose exec postgres psql -U budget_user — не принял синтаксис -U на macOS Docker
  2. docker exec budget-app-postgres-1 — контейнера с таким именем нет (postgres — внешний, не в docker)
  3. Код в контейнерах (budget-backend, budget-frontend) — старый, до правок

Текущее состояние (на момент 2026-06-23 сессии)

  • postgres на хосте (Eagle), не в docker: psql -h localhost -U budget_app -d budget_app
  • БД: transaction (ед.ч.), есть колонка is_placeholder
  • Последние транзакции — из старого Excel-импорта (2024-12-21 и старше), все is_placeholder=false
  • Последний успешный билд и деплой — до правок is_placeholder

Уроки

  1. После кода — деплой. Код без деплоя эфемерен. Не считать задачу завершённой, пока docker-compose build && docker-compose up -d не отработали на production.
  2. Проверять деплой. После деплоя — зайти на сайт и ввести тестовую транзакцию. Если в сумме не прибавилась — деплой не взлетел.
  3. Docker на macOS — команды docker compose exec ... -U могут не работать из-за конфликта флагов. Лучше сразу psql -h host.docker.internal или прямой psql на хосте.
  4. Контейнер postgres — если БД не в docker, не пытаться exec'ить. Сразу искать host-соединение.