Files
family_budget/docs/agents/agent_backend.md
Anton 172246db0b fix: align docs and code with actual DB schema and format spec
- Rewrite db.md as canonical schema: add categories, sessions tables; add alias to accounts, is_category_confirmed/comment to transactions, FK references to categories(id); mark budgets as post-MVP

- Fix account masking to use fixed 6 asterisks (code + docs)

- Remove budgets from MVP requirements in agent_backend.md

- Add explicit 'not in MVP' note to analytics.md budgets section

- Fix test_Statement.json: convert amounts to kopecks (integers), remove fingerprint fields (computed by backend)

Made-with: Cursor
2026-03-02 11:34:00 +03:00

89 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Агент: Backend (Node.js + PostgreSQL)
## Стек и требования
- Node.js (Express или Fastify — на усмотрение, но держать код компактным).
- БД: PostgreSQL (подключение через `pg` или иной официальный драйвер).
- Типизация: TypeScript.
- Миграции БД — через миграционный инструмент (например, Knex/Drizzle/TypeORM) или собственные SQL-файлы.
## Обязательные спецификации (читать целиком)
- `format.md`
- `db.md`
- `category.md`
- `api_history.md`
- `edit_and_rules.md`
- `analytics.md`
- `auth.md`
- `api_reference_accounts_categories.md`
## Основные задачи MVP
1 Структура проекта
- Создать каркас BE: `src/app.ts`, `src/routes/*`, `src/db/*`, `src/middleware/*`, `src/services/*`.
- Реализовать конфигурацию:
- переменные окружения (в т.ч. логин/пароль для авторизации),
- строки подключения к Postgres.
2 Миграции БД
- Реализовать таблицы и поля строго по `db.md`, `category.md`, `edit_and_rules.md`, `analytics.md`.
- Включить все описанные CHECK/UNIQUE/FOREIGN KEY/дополнительные поля (`is_category_confirmed`, `comment`, `alias` для accounts и т.д.).
3 Авторизация и сессии
- Реализовать эндпоинты:
- `POST /api/auth/login`
- `POST /api/auth/logout`
- `GET /api/auth/me`
- Ввести модель сессий с полями:
- `id`, `created_at`, `last_activity_at`, `is_active`
- Реализовать middleware, которое:
- проверяет наличие и валидность session cookie,
- проверяет 3-часовой таймаут бездействия,
- обнуляет сессию и отдаёт `401` по истечении таймаута.
4 Импорт выписки
- Эндпоинт (например) `POST /api/import/statement`:
- Принимает JSON строго формата 1.0 (см. `format.md`).
- Валидирует структуру и типы.
- Находит или создаёт `accounts` по `bank + accountNumber` и заполняет `alias = NULL`.
- Для каждой транзакции:
- считает `fingerprint`,
- определяет `direction`,
- вставляет в `transactions` с учётом уникального индекса `(account_id, fingerprint)`,
- по умолчанию `is_category_confirmed = FALSE`, `category_id = NULL`.
5 История операций
- Реализовать `GET /api/transactions` по `api_history.md`:
- все фильтры и сортировки,
- пагинация,
- поля `accountAlias`, `categoryName`, `isCategoryConfirmed`, `comment`.
6 Редактирование транзакций и правила категорий
- Эндпоинт `PUT /api/transactions/{id}`:
- Обновляет `category_id`, `comment`, `is_category_confirmed`.
- Эндпоинты для `category_rules`:
- создание правила на основе входных данных (pattern, match_type, category_id, priority, requires_confirmation),
- обновление/деактивация (PATCH),
- применение правила к прошлым транзакциям (bulk-обновление: только `category_id IS NULL` или `is_category_confirmed = FALSE`).
7 Аналитика
- Реализовать:
- `GET /api/analytics/summary`
- `GET /api/analytics/by-category`
- `GET /api/analytics/timeseries`
по агрегатам, описанным в `analytics.md`.
## Ограничения
- Не менять контракты API без явной инструкции пользователя.
- Все суммы — в копейках (`BIGINT`), все даты/время — `TIMESTAMPTZ`.
- Обязательно обрабатывать ошибки валидации и возвращать понятные сообщения.