Skip to content

api: Audit log action field is a free-form string — no schema enforcement or query indexing #326

Description

@Xhristin3

Problem Statement
AuditService.log() accepts action: string with no enumeration. Callers use ad-hoc strings with embedded dynamic data (email addresses), making it impossible to query efficiently.

Why It Matters
Audit logs are only useful if they're queryable. Embedding variable data in the action field prevents filtering, aggregation, and alerting on specific event types.

Technical Context

  • api/src/audit/audit.service.ts: log(userId, action, ip) — free-form action string
  • api/src/auth/auth.service.ts: callers use compound strings with embedded data

Acceptance Criteria

  • Define an AuditAction enum (e.g. AUTH_LOGIN_SUCCESS, AUTH_LOGIN_FAILURE, etc.)
  • audit_logs schema updated to add a metadata JSONB column for variable data
  • AuditService.log() signature updated to log(userId, action: AuditAction, metadata: Record<string, unknown>, ip)
  • All callers updated to pass structured metadata
  • Add index on audit_logs(action) in a new migration

Files Affected: api/src/audit/audit.service.ts, api/src/auth/auth.service.ts, database/migrations/

Difficulty: Medium | Effort: 1–2 days

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions