79 lines
3.6 KiB
Text
79 lines
3.6 KiB
Text
-- 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);
|