4.2 KiB
4.2 KiB
Агент: Backend (Node.js + PostgreSQL)
Стек и требования
- Node.js (Express или Fastify — на усмотрение, но держать код компактным).
- БД: PostgreSQL (подключение через
pgили иной официальный драйвер). - Типизация: TypeScript.
- Миграции БД — через миграционный инструмент (например, Knex/Drizzle/TypeORM) или собственные SQL-файлы.
Обязательные спецификации (читать целиком)
format.mddb.mdcategory.mdapi_history.mdedit_and_rules.mdanalytics.mdauth.mdapi_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,budgetsи т.д.).
3 Авторизация и сессии
- Реализовать эндпоинты:
POST /api/auth/loginPOST /api/auth/logoutGET /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.
- считает
- Принимает JSON строго формата 1.0 (см.
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/summaryGET /api/analytics/by-categoryGET /api/analytics/timeseriesпо агрегатам, описанным вanalytics.md.
Ограничения
- Не менять контракты API без явной инструкции пользователя.
- Все суммы — в копейках (
BIGINT), все даты/время —TIMESTAMPTZ. - Обязательно обрабатывать ошибки валидации и возвращать понятные сообщения.