41 lines
1.5 KiB
SQL
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);
|