gohorsejobs/backend/migrations/006_create_applications_table.sql

44 lines
1.7 KiB
SQL
Executable file

-- Migration: Create applications table
-- Description: Job applications (can be from registered users or guests)
CREATE TABLE IF NOT EXISTS applications (
id UUID PRIMARY KEY DEFAULT uuid_generate_v7(),
job_id UUID NOT NULL,
user_id UUID, -- NULL for guest applications
-- Applicant Info (required for guest applications)
name VARCHAR(255),
phone VARCHAR(30),
line_id VARCHAR(100),
whatsapp VARCHAR(30),
email VARCHAR(255),
-- Application Content
message TEXT,
resume_url TEXT,
documents JSONB, -- Array of document objects {type: string, url: string}
-- Status & Notes
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'reviewed', 'shortlisted', 'rejected', 'hired')),
notes TEXT, -- Recruiter notes
-- Metadata
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- Foreign keys
FOREIGN KEY (job_id) REFERENCES jobs(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
);
-- Indexes
CREATE INDEX idx_applications_job ON applications(job_id);
CREATE INDEX idx_applications_user ON applications(user_id);
CREATE INDEX idx_applications_status ON applications(status);
CREATE INDEX idx_applications_created_at ON applications(created_at DESC);
-- Comments
COMMENT ON TABLE applications IS 'Job applications from users or guests';
COMMENT ON COLUMN applications.user_id IS 'NULL if guest application';
COMMENT ON COLUMN applications.documents IS 'JSON array of uploaded documents (residence card, resume, etc.)';
COMMENT ON COLUMN applications.notes IS 'Internal notes from recruiters';