25 lines
988 B
SQL
25 lines
988 B
SQL
-- Activity events table for unified event logging
|
|
CREATE TYPE EVENT_TYPE AS ENUM (
|
|
'grab', 'import', 'download_complete', 'download_failed',
|
|
'quality_upgrade', 'safety_block', 'error', 'info'
|
|
);
|
|
|
|
CREATE TABLE activity_events (
|
|
id BIGSERIAL,
|
|
event_type EVENT_TYPE NOT NULL,
|
|
media_id BIGINT,
|
|
media_type MEDIA_TYPE,
|
|
title TEXT NOT NULL,
|
|
description TEXT,
|
|
data JSONB DEFAULT '{}',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (id, created_at)
|
|
) PARTITION BY RANGE (created_at);
|
|
|
|
CREATE TABLE activity_events_current PARTITION OF activity_events
|
|
FOR VALUES FROM (CURRENT_DATE - INTERVAL '30 days') TO (MAXVALUE);
|
|
|
|
CREATE INDEX idx_activity_type ON activity_events (event_type, created_at DESC);
|
|
CREATE INDEX idx_activity_media ON activity_events (media_id, media_type, created_at DESC) WHERE media_id IS NOT NULL;
|
|
CREATE INDEX idx_activity_created ON activity_events (created_at DESC);
|