feat(tradein/db): user_events table — unified login/IP audit + behavior event log #2515

Merged
lekss361 merged 1 commit from feat/tradein-user-events-schema into main 2026-07-13 19:47:27 +00:00
Owner

Что

Фундамент для фич 2 (учёт входов/IP + что ищут) и 3 (поведенческая аналитика): одна унифицированная append-only таблица user_events.

Воскрешает дизайн таблицы audit_log (была в 002_core_tables.sql, удалена в 095_dead_schema.sql как неиспользуемая) — теперь она нужна ровно в той же форме.

Схема

id          bigint GENERATED ALWAYS AS IDENTITY PK
event_type  text NOT NULL     -- login / estimate_request / pdf_download / listing_click / page_view / ...
username    text NOT NULL     -- X-Authenticated-User
ip_address  inet
user_agent  text
path, method text
estimate_id uuid              -- без FK: лог decoupled от lifecycle оценок
payload     jsonb NOT NULL DEFAULT '{}'
created_at  timestamptz NOT NULL DEFAULT now()

Индексы: (username, created_at DESC), (event_type, created_at DESC), (ip_address), (created_at DESC).

Решения продукта (подтверждены)

  • In-house event-таблица (не PostHog/Plausible — cookieless-инструменты не умеют атрибуцию «кто что искал» к аккаунту).
  • Логируем IP/UA/всё нужное без 152-ФЗ consent-gating и без обязательного retention для MVP.
  • Читают только админы.

Свойства

  • Аддитивно, idempotent (IF NOT EXISTS), BEGIN/COMMIT. Auto-apply на деплое (strict exit-1).
  • Пока никто не пишет/читает эту таблицу — безопасно мержить первой, до backend-слоя.

Следующие PR: request-audit middleware (capture IP/UA/username), POST /api/v1/events, admin-дашборды /admin/audit + /admin/analytics.

## Что Фундамент для фич 2 (учёт входов/IP + что ищут) и 3 (поведенческая аналитика): одна унифицированная append-only таблица `user_events`. Воскрешает дизайн таблицы `audit_log` (была в `002_core_tables.sql`, удалена в `095_dead_schema.sql` как неиспользуемая) — теперь она нужна ровно в той же форме. ## Схема ``` id bigint GENERATED ALWAYS AS IDENTITY PK event_type text NOT NULL -- login / estimate_request / pdf_download / listing_click / page_view / ... username text NOT NULL -- X-Authenticated-User ip_address inet user_agent text path, method text estimate_id uuid -- без FK: лог decoupled от lifecycle оценок payload jsonb NOT NULL DEFAULT '{}' created_at timestamptz NOT NULL DEFAULT now() ``` Индексы: `(username, created_at DESC)`, `(event_type, created_at DESC)`, `(ip_address)`, `(created_at DESC)`. ## Решения продукта (подтверждены) - **In-house** event-таблица (не PostHog/Plausible — cookieless-инструменты не умеют атрибуцию «кто что искал» к аккаунту). - Логируем IP/UA/всё нужное **без 152-ФЗ consent-gating** и без обязательного retention для MVP. - Читают только админы. ## Свойства - Аддитивно, idempotent (`IF NOT EXISTS`), BEGIN/COMMIT. Auto-apply на деплое (strict exit-1). - Пока никто не пишет/читает эту таблицу — безопасно мержить первой, до backend-слоя. Следующие PR: request-audit middleware (capture IP/UA/username), `POST /api/v1/events`, admin-дашборды `/admin/audit` + `/admin/analytics`.
lekss361 added 1 commit 2026-07-13 19:42:41 +00:00
feat(tradein/db): user_events table - unified login/IP audit + behavior event log
All checks were successful
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 8s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 54s
2a419aca18
lekss361 merged commit 5647c2b40e into main 2026-07-13 19:47:27 +00:00
lekss361 deleted branch feat/tradein-user-events-schema 2026-07-13 19:47:27 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2515
No description provided.