nexus/migrations/20260101000016_create_events.sql
2026-01-26 11:58:04 -05:00

41 lines
1.5 KiB
SQL

-- Migration 016: Create events table (audit trail)
-- Event: comprehensive audit trail for all system actions
-- Uses polymorphic actor (team_profile, customer_profile, or system)
-- Audit trail events
CREATE TABLE events (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
event_type event_type NOT NULL,
-- What entity was affected
entity_type VARCHAR(100) NOT NULL,
entity_id UUID NOT NULL,
-- Who triggered the event (polymorphic)
actor_type VARCHAR(20), -- 'team_profile', 'customer_profile', or 'system'
actor_id UUID,
-- Additional context (old_status, new_status, changed_fields, etc.)
metadata JSONB NOT NULL DEFAULT '{}'::JSONB,
-- When the event occurred (business timestamp, may differ from created_at)
timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Add FK from notifications to events
ALTER TABLE notifications
ADD CONSTRAINT fk_notifications_event
FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE SET NULL;
-- High-performance indexes for common query patterns
CREATE INDEX idx_events_entity ON events(entity_type, entity_id);
CREATE INDEX idx_events_actor ON events(actor_type, actor_id);
CREATE INDEX idx_events_timestamp ON events(timestamp DESC);
CREATE INDEX idx_events_type ON events(event_type);
CREATE INDEX idx_events_created ON events(created_at DESC);
-- Composite index for filtering by entity and time
CREATE INDEX idx_events_entity_timestamp ON events(entity_type, entity_id, timestamp DESC);