Family Budget — Backend
API-сервер на Express + TypeScript + PostgreSQL.
Запуск
Сервер стартует на http://localhost:3000 (или на порту из PORT).
Скрипты
| Скрипт |
Команда |
Описание |
dev |
npm run dev -w backend |
Запуск с hot-reload (tsx watch) |
build |
npm run build -w backend |
Компиляция TypeScript → dist/ |
start |
npm run start -w backend |
Запуск скомпилированного сервера |
migrate |
npm run migrate -w backend |
Применить миграции вручную (без старта) |
Переменные окружения
| Переменная |
По умолчанию |
Описание |
DB_HOST |
localhost |
Хост PostgreSQL |
DB_PORT |
5432 |
Порт PostgreSQL |
DB_NAME |
family_budget |
Имя базы данных |
DB_USER |
postgres |
Пользователь БД |
DB_PASSWORD |
postgres |
Пароль БД |
APP_USER_LOGIN |
admin |
Логин для входа в приложение |
APP_USER_PASSWORD |
changeme |
Пароль для входа в приложение |
SESSION_TIMEOUT_MS |
10800000 |
Таймаут сессии по бездействию (3 часа) |
PORT |
3000 |
Порт HTTP-сервера |
LLM_API_KEY |
— |
Ключ OpenAI API для конвертации PDF в JSON; без него импорт PDF возвращает 503 |
LLM_API_BASE_URL |
https://api.openai.com/v1 |
Адрес LLM API (OpenAI-совместимый); для локальной модели, напр. Ollama: http://localhost:11434/v1 |
Структура проекта
API-эндпоинты
Авторизация
| Метод |
URL |
Описание |
| POST |
/api/auth/login |
Вход (login + password) |
| POST |
/api/auth/logout |
Выход (инвалидация сессии) |
| GET |
/api/auth/me |
Текущий пользователь |
Импорт
| Метод |
URL |
Описание |
| POST |
/api/import/statement |
Импорт банковской выписки (PDF или JSON 1.0; PDF конвертируется через LLM) |
Транзакции
| Метод |
URL |
Описание |
| GET |
/api/transactions |
Список с фильтрами и пагинацией |
| PUT |
/api/transactions/:id |
Обновить категорию / комментарий |
Справочники
| Метод |
URL |
Описание |
| GET |
/api/accounts |
Список счетов |
| PUT |
/api/accounts/:id |
Обновить алиас счёта |
| GET |
/api/categories |
Список категорий |
Правила категоризации
| Метод |
URL |
Описание |
| GET |
/api/category-rules |
Список правил |
| POST |
/api/category-rules |
Создать правило |
| PATCH |
/api/category-rules/:id |
Частичное обновление / деактивация |
| POST |
/api/category-rules/:id/apply |
Применить к прошлым транзакциям |
Аналитика
| Метод |
URL |
Описание |
| GET |
/api/analytics/summary |
Сводка: расходы, доходы, топ-5 |
| GET |
/api/analytics/by-category |
Расходы по категориям |
| GET |
/api/analytics/timeseries |
Динамика (day / week / month) |
База данных
Миграции применяются автоматически при старте сервера. Таблицы:
- accounts — банковские счета (bank, account_number, currency, alias)
- categories — 23 категории с типами expense / income / transfer (seed)
- transactions — операции с fingerprint-дедупликацией, привязкой к счёту и категории
- category_rules — правила авто-категоризации (pattern, match_type, priority)
- sessions — серверные сессии с таймаутом по бездействию