30 lines
1.6 KiB
MySQL
30 lines
1.6 KiB
MySQL
|
|
-- 043_analytics_events.sql
|
||
|
|
-- Generic Analytics Events Table for Job Worker
|
||
|
|
-- This table stores generic analytics events processed by the job worker
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS public.analytics_events (
|
||
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
|
|
event_name VARCHAR(100) NOT NULL,
|
||
|
|
user_id UUID REFERENCES public.users(id) ON DELETE SET NULL,
|
||
|
|
payload JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes for efficient querying
|
||
|
|
CREATE INDEX idx_analytics_events_name ON public.analytics_events(event_name);
|
||
|
|
CREATE INDEX idx_analytics_events_user_id ON public.analytics_events(user_id) WHERE user_id IS NOT NULL;
|
||
|
|
CREATE INDEX idx_analytics_events_created_at ON public.analytics_events(created_at DESC);
|
||
|
|
|
||
|
|
-- GIN index for JSONB payload queries
|
||
|
|
CREATE INDEX idx_analytics_events_payload_gin ON public.analytics_events USING GIN (payload);
|
||
|
|
|
||
|
|
-- Composite index for common queries (event_name + created_at)
|
||
|
|
CREATE INDEX idx_analytics_events_name_created_at ON public.analytics_events(event_name, created_at DESC);
|
||
|
|
|
||
|
|
COMMENT ON TABLE public.analytics_events IS 'Generic analytics events table for storing various application events processed by the job worker';
|
||
|
|
COMMENT ON COLUMN public.analytics_events.event_name IS 'Name of the event (e.g., track_play, user_login, file_upload)';
|
||
|
|
COMMENT ON COLUMN public.analytics_events.user_id IS 'ID of the user who triggered the event (nullable for anonymous events)';
|
||
|
|
COMMENT ON COLUMN public.analytics_events.payload IS 'JSON payload containing event-specific data';
|
||
|
|
COMMENT ON COLUMN public.analytics_events.created_at IS 'Timestamp when the event was created';
|
||
|
|
|