-- Add missing fields to job_seeker_profiles ALTER TABLE job_seeker_profiles ADD COLUMN IF NOT EXISTS full_name VARCHAR(255), ADD COLUMN IF NOT EXISTS location VARCHAR(255), ADD COLUMN IF NOT EXISTS summary TEXT, ADD COLUMN IF NOT EXISTS experience_years INTEGER DEFAULT 0, ADD COLUMN IF NOT EXISTS skills TEXT[] DEFAULT '{}', ADD COLUMN IF NOT EXISTS resume_url VARCHAR(500), ADD COLUMN IF NOT EXISTS active_application_count INTEGER NOT NULL DEFAULT 0, ADD COLUMN IF NOT EXISTS status VARCHAR(50) NOT NULL DEFAULT 'ACTIVE'; -- Requirements (customer leads) CREATE TABLE IF NOT EXISTS requirements ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), customer_id UUID NOT NULL REFERENCES customer_profiles(id) ON DELETE CASCADE, profession_key VARCHAR(50) NOT NULL, title VARCHAR(200) NOT NULL, description TEXT NOT NULL, location VARCHAR(255) NOT NULL, budget INTEGER, -- in paise preferred_date DATE, extra_data_json JSONB, status VARCHAR(50) NOT NULL DEFAULT 'DRAFT', -- DRAFT, PENDING_APPROVAL, OPEN, CLOSED, EXPIRED, REJECTED rejection_reason TEXT, request_count INTEGER NOT NULL DEFAULT 0, accepted_count INTEGER NOT NULL DEFAULT 0, expires_at TIMESTAMPTZ, approved_at TIMESTAMPTZ, approved_by UUID REFERENCES users(id), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- professionals unified table (parent for all 9 profession subtypes) CREATE TABLE IF NOT EXISTS professionals ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE UNIQUE, profession_key VARCHAR(50) NOT NULL, display_name VARCHAR(255) NOT NULL, location VARCHAR(255), bio TEXT, extra_data_json JSONB, status VARCHAR(50) NOT NULL DEFAULT 'ACTIVE', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Lead requests (professional → requirement) CREATE TABLE IF NOT EXISTS lead_requests ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), requirement_id UUID NOT NULL REFERENCES requirements(id) ON DELETE CASCADE, professional_id UUID NOT NULL REFERENCES professionals(id) ON DELETE CASCADE, status VARCHAR(50) NOT NULL DEFAULT 'PENDING', -- PENDING, ACCEPTED, REJECTED, EXPIRED, CANCELLED tracecoins_reserved INTEGER NOT NULL DEFAULT 25, expires_at TIMESTAMPTZ NOT NULL, requested_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), resolved_at TIMESTAMPTZ, UNIQUE(requirement_id, professional_id) ); -- Add missing fields to customer_profiles ALTER TABLE customer_profiles ADD COLUMN IF NOT EXISTS full_name VARCHAR(255), ADD COLUMN IF NOT EXISTS phone VARCHAR(20), ADD COLUMN IF NOT EXISTS city VARCHAR(100), ADD COLUMN IF NOT EXISTS area VARCHAR(100), ADD COLUMN IF NOT EXISTS preferred_professions TEXT[] DEFAULT '{}', ADD COLUMN IF NOT EXISTS active_requirement_count INTEGER NOT NULL DEFAULT 0, ADD COLUMN IF NOT EXISTS status VARCHAR(50) NOT NULL DEFAULT 'ACTIVE'; CREATE INDEX IF NOT EXISTS idx_requirements_customer_id ON requirements(customer_id); CREATE INDEX IF NOT EXISTS idx_requirements_status ON requirements(status); CREATE INDEX IF NOT EXISTS idx_requirements_profession_key ON requirements(profession_key); CREATE INDEX IF NOT EXISTS idx_lead_requests_requirement_id ON lead_requests(requirement_id); CREATE INDEX IF NOT EXISTS idx_lead_requests_professional_id ON lead_requests(professional_id); CREATE INDEX IF NOT EXISTS idx_lead_requests_status ON lead_requests(status); CREATE INDEX IF NOT EXISTS idx_professionals_profession_key ON professionals(profession_key);