Архитектура

Обзор системы, модель данных, мультивалютная схема и модель аутентификации.

Обзор системы

Браузерный интерфейс  -->  Веб-приложение Next.js  -->  Postgres (RLS)
                               |                           ^
                               v                           |
                  Сервис аутентификации -------------------+
                               ^
                               |
             Программные клиенты через API Gateway
                               ^
                               |
             Воркер (загрузка валютных курсов) -----------

Пять компонентов, одна база данных:

  1. web — приложение на Next.js с пользовательскими дашбордами и API-маршрутами
  2. auth — вход по одноразовому коду из email и начальное подключение агентов на auth-домене
  3. sql-api — AWS Lambda за API Gateway для программных клиентов
  4. worker — ежедневная загрузка курсов ECB, CBR и NBS
  5. Postgres — единый источник истины с политиками RLS

Модель данных

  • ledger_entries — одна строка на каждое движение по счёту: доход, расход или перевод
  • budget_lines — ячейки бюджета в модели только с добавлением записей; при конфликте действует правило «последняя запись побеждает»
  • budget_comments — заметки к ячейкам бюджета в модели только с добавлением записей
  • workspace_settings — отчётная валюта и настройки рабочего пространства
  • account_metadata — метаданные по счетам, например классификация ликвидности
  • exchange_rates — ежедневные валютные курсы для конвертации во время запроса
  • workspaces / workspace_members — изоляция арендаторов в многопользовательской схеме
  • accounts — представление, построенное на основе ledger_entries

Мультивалютность

Все суммы хранятся в исходной валюте. Пересчёт в отчётную валюту выполняется во время чтения через SQL-соединения с exchange_rates. Предварительной конвертации с потерей точности нет.

Аутентификация

Через переменную окружения AUTH_MODE доступны два режима:

  • none — без аутентификации, одно локальное рабочее пространство
  • cognito — беспарольный вход по одноразовому коду из email через AWS Cognito с открытой регистрацией

Для программных клиентов публичной точкой входа служит GET /v1/. Подключение агента использует одноразовый код из email на auth-домене, возвращает долгоживущий ApiKey, а затем выполняет SQL через отдельный API для программных клиентов за API Gateway.

Каждый пользователь получает изолированное рабочее пространство. Политики RLS проверяют членство при каждом запросе, включая SQL-запросы от программных клиентов.