-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup-analytics.sql
More file actions
72 lines (64 loc) · 2.92 KB
/
setup-analytics.sql
File metadata and controls
72 lines (64 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
-- ================================================
-- YENZE Analytics Setup
-- ================================================
-- Este script crea la tabla analytics_events y configura
-- los permisos necesarios para el sistema de analíticas.
--
-- Instrucciones:
-- 1. Ve a Supabase Dashboard > SQL Editor
-- 2. Crea una nueva query
-- 3. Copia y pega este código completo
-- 4. Haz clic en "Run"
-- ================================================
-- Crear tabla analytics_events
CREATE TABLE IF NOT EXISTS analytics_events (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
event_type TEXT NOT NULL,
visitor_id TEXT NOT NULL,
session_id TEXT NOT NULL,
page_url TEXT,
referrer TEXT,
user_agent TEXT,
screen_width INTEGER,
screen_height INTEGER,
language TEXT,
metadata JSONB,
timestamp TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Crear índices para mejor rendimiento
CREATE INDEX IF NOT EXISTS idx_analytics_project_id ON analytics_events(project_id);
CREATE INDEX IF NOT EXISTS idx_analytics_event_type ON analytics_events(event_type);
CREATE INDEX IF NOT EXISTS idx_analytics_visitor_id ON analytics_events(visitor_id);
CREATE INDEX IF NOT EXISTS idx_analytics_session_id ON analytics_events(session_id);
CREATE INDEX IF NOT EXISTS idx_analytics_created_at ON analytics_events(created_at);
-- Habilitar Row Level Security (RLS)
ALTER TABLE analytics_events ENABLE ROW LEVEL SECURITY;
-- Eliminar políticas existentes si existen
DROP POLICY IF EXISTS "Users can read analytics for their projects" ON analytics_events;
DROP POLICY IF EXISTS "Anyone can insert analytics" ON analytics_events;
-- Política: Los usuarios autenticados pueden leer analytics de sus propios proyectos
CREATE POLICY "Users can read analytics for their projects"
ON analytics_events FOR SELECT
USING (
project_id IN (
SELECT id FROM projects WHERE user_id = auth.uid()
)
);
-- Política: Cualquiera puede insertar eventos de analytics (necesario para tracking público)
CREATE POLICY "Anyone can insert analytics"
ON analytics_events FOR INSERT
WITH CHECK (true);
-- Comentarios para documentación
COMMENT ON TABLE analytics_events IS 'Almacena eventos de analytics para todos los proyectos publicados';
COMMENT ON COLUMN analytics_events.project_id IS 'ID del proyecto al que pertenece este evento';
COMMENT ON COLUMN analytics_events.event_type IS 'Tipo de evento: page_view, click, etc.';
COMMENT ON COLUMN analytics_events.visitor_id IS 'ID único del visitante (localStorage)';
COMMENT ON COLUMN analytics_events.session_id IS 'ID único de la sesión';
COMMENT ON COLUMN analytics_events.metadata IS 'Datos adicionales en formato JSON';
-- Verificar que todo está correcto
SELECT
'analytics_events table created successfully!' as message,
COUNT(*) as total_events
FROM analytics_events;