CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE IF NOT EXISTS users ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), email VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, role VARCHAR(50) DEFAULT 'free', created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS qr_codes ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID REFERENCES users(id) ON DELETE CASCADE, type VARCHAR(20) NOT NULL, -- 'static' or 'dynamic' data_type VARCHAR(50) NOT NULL, -- 'URL', 'Wi-Fi', etc. destination_url TEXT, short_url_id VARCHAR(50) UNIQUE, -- Only for dynamic routing e.g. 'xyz123' design_data JSONB, -- Custom styling created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS qr_scans ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), qr_code_id UUID REFERENCES qr_codes(id) ON DELETE CASCADE, ip_address VARCHAR(45), user_agent TEXT, os VARCHAR(50), device_type VARCHAR(50), browser VARCHAR(50), country VARCHAR(100), city VARCHAR(100), scanned_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP );