mirror of
https://github.com/sassanix/Warracker.git
synced 2026-01-07 22:19:31 -06:00
64 lines
2.1 KiB
SQL
64 lines
2.1 KiB
SQL
-- Migration: Add users table and related tables
|
|
|
|
-- Users table
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(255) NOT NULL UNIQUE,
|
|
email VARCHAR(255) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
first_name VARCHAR(255),
|
|
last_name VARCHAR(255),
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
is_admin BOOLEAN DEFAULT FALSE,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
last_login TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_username ON users(username);
|
|
CREATE INDEX IF NOT EXISTS idx_email ON users(email);
|
|
|
|
-- Add user_id to warranties table if it doesn't exist
|
|
ALTER TABLE warranties ADD COLUMN IF NOT EXISTS user_id INTEGER;
|
|
|
|
-- Add foreign key constraint if it doesn't exist
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conname = 'fk_user' AND conrelid = 'warranties'::regclass
|
|
) THEN
|
|
ALTER TABLE warranties ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;
|
|
END IF;
|
|
END
|
|
$$;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_user_id ON warranties(user_id);
|
|
|
|
-- Create password reset tokens table
|
|
CREATE TABLE IF NOT EXISTS password_reset_tokens (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER NOT NULL,
|
|
token VARCHAR(255) NOT NULL,
|
|
expires_at TIMESTAMP NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_token ON password_reset_tokens(token);
|
|
CREATE INDEX IF NOT EXISTS idx_user_id_token ON password_reset_tokens(user_id);
|
|
|
|
-- Create user sessions table
|
|
CREATE TABLE IF NOT EXISTS user_sessions (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER NOT NULL,
|
|
session_token VARCHAR(255) NOT NULL,
|
|
expires_at TIMESTAMP NOT NULL,
|
|
ip_address VARCHAR(45),
|
|
user_agent TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_session_token ON user_sessions(session_token);
|
|
CREATE INDEX IF NOT EXISTS idx_user_id_session ON user_sessions(user_id);
|