Files
family_budget/docs/agents/agent_backend.md
2026-02-27 19:08:55 +03:00

88 lines
4.1 KiB
Markdown
Raw 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`
## Основные задачи MVP
1. Структура проекта
- Создать каркас BE: `src/app.ts`, `src/routes/*`, `src/db/*`, `src/middleware/*`, `src/services/*`.
- Реализовать конфигурацию:
- переменные окружения (в т.ч. логин/пароль для авторизации),
- строки подключения к Postgres.
1. Миграции БД
- Реализовать таблицы и поля строго по `db.md`, `category.md`, `edit_and_rules.md`, `analytics.md`.
- Включить все описанные CHECK/UNIQUE/FOREIGN KEY/дополнительные поля (`is_category_confirmed`, `comment`, `alias` для accounts, `budgets` и т.д.).
1. Авторизация и сессии
- Реализовать эндпоинты:
- `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` по истечении таймаута.
1. Импорт выписки
- Эндпоинт (например) `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`.
1. История операций
- Реализовать `GET /api/transactions` по `api_history.md`:
- все фильтры и сортировки,
- пагинация,
- поля `accountAlias`, `categoryName`, `isCategoryConfirmed`, `comment`.
1. Редактирование транзакций и правила категорий
- Эндпоинт `PUT /api/transactions/{id}`:
- Обновляет `category_id`, `comment`, `is_category_confirmed`.
- Эндпоинты для `category_rules`:
- создание правила на основе входных данных (pattern, match_type, category_id, priority),
- обновление/деактивация,
- опционально — применение правила к истории (bulk-обновление транзакций с `is_category_confirmed = FALSE`).
1. Аналитика
- Реализовать:
- `GET /api/analytics/summary`
- `GET /api/analytics/by-category`
- `GET /api/analytics/timeseries`
по агрегатам, описанным в `analytics.md`.
## Ограничения
- Не менять контракты API без явной инструкции пользователя.
- Все суммы — в копейках (`BIGINT`), все даты/время — `TIMESTAMPTZ`.
- Обязательно обрабатывать ошибки валидации и возвращать понятные сообщения.