mirror of
https://github.com/umami-software/umami.git
synced 2026-02-06 13:47:15 +01:00
Added Prisma migration to support user identification: 1. Session Table Enhancement - Added user_id column (VARCHAR(36)) to session table - Stores WordPress user ID for logged-in users - Indexed for efficient lookups 2. User Mapping Table - New table to track visitor_id to user_id relationships - Maps anonymous visitors to authenticated users - Tracks first_seen_at, last_seen_at, and session_count - Unique constraint on (visitor_id, user_id) pair 3. Indexes - idx_session_user_id - Fast user_id lookups - idx_session_visitor_user - Composite index for visitor+user queries - idx_user_mapping_visitor - Visitor ID lookups - idx_user_mapping_user - User ID lookups - idx_user_mapping_last_seen - Time-based queries This migration enables unified user tracking across anonymous and authenticated sessions, supporting the WordPress plugin's user identification feature.
36 lines
1.6 KiB
SQL
36 lines
1.6 KiB
SQL
-- Migration: Add User ID Mapping
|
|
-- Description: Add user_id column to session table for unified user identification
|
|
-- Date: 2025-11-05
|
|
|
|
-- Add user_id column to session table
|
|
ALTER TABLE session ADD COLUMN IF NOT EXISTS user_id VARCHAR(36);
|
|
|
|
-- Add index for user_id lookups
|
|
CREATE INDEX IF NOT EXISTS idx_session_user_id ON session(user_id);
|
|
|
|
-- Add composite index for visitor_id and user_id
|
|
CREATE INDEX IF NOT EXISTS idx_session_visitor_user ON session(visitor_id, user_id);
|
|
|
|
-- Create user_mapping table for tracking visitor_id to user_id relationships
|
|
CREATE TABLE IF NOT EXISTS user_mapping (
|
|
id SERIAL PRIMARY KEY,
|
|
visitor_id VARCHAR(36) NOT NULL,
|
|
user_id VARCHAR(36) NOT NULL,
|
|
first_seen_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
last_seen_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
|
session_count INTEGER DEFAULT 1,
|
|
UNIQUE(visitor_id, user_id)
|
|
);
|
|
|
|
-- Add indexes for user_mapping
|
|
CREATE INDEX IF NOT EXISTS idx_user_mapping_visitor ON user_mapping(visitor_id);
|
|
CREATE INDEX IF NOT EXISTS idx_user_mapping_user ON user_mapping(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_user_mapping_last_seen ON user_mapping(last_seen_at);
|
|
|
|
-- Add comments
|
|
COMMENT ON COLUMN session.user_id IS 'WordPress user ID for logged-in users';
|
|
COMMENT ON TABLE user_mapping IS 'Maps visitor IDs to user IDs for unified identification';
|
|
COMMENT ON COLUMN user_mapping.visitor_id IS 'Umami visitor ID (anonymous)';
|
|
COMMENT ON COLUMN user_mapping.user_id IS 'WordPress user ID (logged-in)';
|
|
COMMENT ON COLUMN user_mapping.session_count IS 'Number of sessions for this visitor-user pair';
|
|
|