CREATE EXTENSION IF NOT EXISTS "pgcrypto"; CREATE TABLE IF NOT EXISTS tunnels ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), environment VARCHAR(10) NOT NULL, cf_tunnel_id UUID UNIQUE NOT NULL ); CREATE TABLE IF NOT EXISTS users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(50) NOT NULL ); CREATE TABLE IF NOT EXISTS mappings ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), tunnel_id UUID NOT NULL REFERENCES tunnels(id) ON DELETE CASCADE, port INT NOT NULL, subdomain VARCHAR(50) NOT NULL -- UNIQUE (tunnel_id, port), -- UNIQUE (tunnel_id, subdomain) ); CREATE TABLE IF NOT EXISTS requests ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), mapping_id UUID NOT NULL REFERENCES mappings(id) ON DELETE CASCADE, created_by UUID NOT NULL REFERENCES users(id) ON DELETE RESTRICT, accepted_by UUID REFERENCES users(id) ON DELETE SET NULL, status VARCHAR(20) NOT NULL CHECK (status IN ('PENDING', 'APPROVED', 'REJECTED')) );