Spaces:
Sleeping
Sleeping
| -- 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(); | |