docs: adds rules and agents specs

This commit is contained in:
Anton
2026-02-27 19:08:55 +03:00
commit 9551b93a09
12 changed files with 1151 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
# Агент: 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`.
- Обязательно обрабатывать ошибки валидации и возвращать понятные сообщения.