annator-atom / backend /migrations /005_create_user_sessions.sql
techprotrade's picture
Full stack ATOM backend + AIMONEYFLOW clients (port 7860) (part 5)
f84a02d verified
Raw
History Blame Contribute Delete
1.19 kB
-- User Sessions Table
-- Stores active sessions for security management (device tracking, revocation)
-- Works alongside NextAuth JWT strategy by tracking issued tokens
CREATE TABLE IF NOT EXISTS user_sessions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
session_token VARCHAR(255) UNIQUE NOT NULL,
user_agent TEXT,
ip_address VARCHAR(45),
device_type VARCHAR(50), -- 'desktop', 'mobile', 'tablet', 'unknown'
browser VARCHAR(50),
os VARCHAR(50),
is_active BOOLEAN DEFAULT TRUE,
last_active_at TIMESTAMP DEFAULT NOW(),
expires_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
-- Indexes for faster lookups
CREATE INDEX IF NOT EXISTS idx_user_sessions_user_id ON user_sessions(user_id);
CREATE INDEX IF NOT EXISTS idx_user_sessions_token ON user_sessions(session_token);
CREATE INDEX IF NOT EXISTS idx_user_sessions_active ON user_sessions(user_id, is_active);
-- Update timestamp trigger
CREATE TRIGGER update_user_sessions_last_active BEFORE UPDATE ON user_sessions
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();