1+ CREATE EXTENSION IF NOT EXISTS vector;
2+
3+ CREATE TYPE UserRole AS ENUM (' CANDIDATE' , ' HR' );
4+
5+ CREATE TABLE Users (
6+ userID UUID PRIMARY KEY ,
7+ fullName VARCHAR (255 ),
8+ email VARCHAR (255 ) UNIQUE NOT NULL ,
9+ passwordHash TEXT NOT NULL ,
10+ role UserRole NOT NULL ,
11+ creationTimestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
12+ );
13+
14+ CREATE TYPE JobStatus AS ENUM (' OPEN' , ' CLOSED' , ' DRAFT' );
15+ CREATE TYPE RequirementType AS ENUM (' SKILL' , ' EXPERIENCE' , ' EDUCATION' , ' OTHER' );
16+
17+ CREATE TABLE JobPostings (
18+ jobID UUID PRIMARY KEY ,
19+ title VARCHAR (255 ),
20+ description TEXT ,
21+ status JobStatus,
22+ creationTimestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
23+ closingDate DATE ,
24+ lastModifiedTimestamp TIMESTAMP ,
25+ hrCreatorID UUID REFERENCES Users(userID),
26+ lastModifiedByUserID UUID REFERENCES Users(userID)
27+ );
28+
29+ CREATE TABLE JobRequirements (
30+ requirementID UUID PRIMARY KEY ,
31+ jobID UUID REFERENCES JobPostings(jobID) ON DELETE CASCADE ,
32+ description TEXT ,
33+ type RequirementType,
34+ isMandatory BOOLEAN
35+ );
36+
37+ CREATE TYPE ApplicationStatus AS ENUM (' SUBMITTED' , ' IN_REVIEW' , ' SHORTLISTED' , ' REJECTED' , ' INTERVIEWING' , ' OFFERED' , ' HIRED' );
38+
39+ CREATE TABLE Applications (
40+ applicationID UUID PRIMARY KEY ,
41+ submissionTimestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
42+ status ApplicationStatus,
43+ resumeContent TEXT ,
44+ originalResumeFilename VARCHAR (255 ),
45+ originalResumeFileReference VARCHAR (255 ),
46+ lastModifiedTimestamp TIMESTAMP ,
47+ candidateID UUID REFERENCES Users(userID),
48+ jobID UUID REFERENCES JobPostings(jobID),
49+ lastModifiedByUserID UUID REFERENCES Users(userID)
50+ );
51+
52+ CREATE TYPE FilterStatus AS ENUM (' PASSED_FILTER' , ' FAILED_FILTER' , ' NOT_EVALUATED' );
53+
54+ CREATE TABLE Assessments (
55+ assessmentID UUID PRIMARY KEY ,
56+ assessmentTimestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
57+ overallScore FLOAT,
58+ summary TEXT ,
59+ resumeAnalysisDetails JSON,
60+ filterStatus FilterStatus,
61+ lastModifiedTimestamp TIMESTAMP ,
62+ applicationID UUID REFERENCES Applications(applicationID),
63+ lastModifiedByUserID UUID REFERENCES Users(userID)
64+ );
65+
66+ CREATE TABLE ChatSessions (
67+ sessionID UUID PRIMARY KEY ,
68+ startTime TIMESTAMP ,
69+ endTime TIMESTAMP ,
70+ assessmentID UUID REFERENCES Assessments(assessmentID)
71+ );
72+
73+ CREATE TYPE MessageSender AS ENUM (' AI' , ' CANDIDATE' );
74+
75+ CREATE TABLE ChatMessages (
76+ messageID UUID PRIMARY KEY ,
77+ sender MessageSender,
78+ timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
79+ content TEXT ,
80+ messageOrder INTEGER ,
81+ sessionID UUID REFERENCES ChatSessions(sessionID)
82+ );
83+
84+ -- Store embeddings linked to documents or concepts used in GenAI
85+ CREATE TABLE Embeddings (
86+ embeddingID UUID PRIMARY KEY ,
87+ documentReference TEXT , -- where the embedding comes from (the link to the document)
88+ content TEXT ,
89+ embedding VECTOR(1536 ), -- adjust dimension as per model used (this one is text-embedding-ada-002 OpenAI 1536)
90+ createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
91+ );
0 commit comments