veza/veza-backend-api/migrations/045_create_user_sessions.sql

37 lines
1.8 KiB
MySQL
Raw Normal View History

2025-12-03 19:29:37 +00:00
-- Migration: Create user_sessions table (alias for sessions compatibility)
-- Description: Alternative sessions table for legacy compatibility
-- This is actually just a view or alias for the sessions table
-- The sessions table already exists and serves this purpose
-- If we really need a separate user_sessions table:
CREATE TABLE IF NOT EXISTS user_sessions (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
session_token VARCHAR(255) NOT NULL,
ip_address VARCHAR(45),
user_agent TEXT,
is_active BOOLEAN DEFAULT true,
last_activity TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
revoked_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_user_sessions_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Indexes
CREATE UNIQUE INDEX IF NOT EXISTS idx_user_sessions_token ON user_sessions(session_token);
CREATE INDEX IF NOT EXISTS idx_user_sessions_user_id ON user_sessions(user_id);
CREATE INDEX IF NOT EXISTS idx_user_sessions_is_active ON user_sessions(is_active) WHERE is_active = true;
CREATE INDEX IF NOT EXISTS idx_user_sessions_expires_at ON user_sessions(expires_at);
CREATE INDEX IF NOT EXISTS idx_user_sessions_last_activity ON user_sessions(last_activity DESC);
-- Comments
COMMENT ON TABLE user_sessions IS 'User sessions for authentication tracking (alternative to sessions table)';
COMMENT ON COLUMN user_sessions.session_token IS 'Unique session token (hashed)';
COMMENT ON COLUMN user_sessions.revoked_at IS 'Timestamp when session was revoked';
COMMENT ON COLUMN user_sessions.last_activity IS 'Last activity timestamp (updated periodically with debounce)';