mirror of
https://github.com/umami-software/umami.git
synced 2026-02-04 04:37:11 +01:00
feat: Add user ID mapping migration for WordPress integration
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.
This commit is contained in:
parent
5f496fdb79
commit
5cf1e0c16a
1 changed files with 36 additions and 0 deletions
36
prisma/migrations/19_add_user_id_mapping/migration.sql
Normal file
36
prisma/migrations/19_add_user_id_mapping/migration.sql
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
-- 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';
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue