44 lines
1.7 KiB
SQL
Executable file
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';
|