@adaptware/eagles-db 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -0
- package/bin/db-cli.js +113 -0
- package/client/client.d.ts +1 -0
- package/client/client.js +4 -0
- package/client/default.d.ts +1 -0
- package/client/default.js +4 -0
- package/client/edge.d.ts +1 -0
- package/client/edge.js +1039 -0
- package/client/index-browser.js +1022 -0
- package/client/index.d.ts +94904 -0
- package/client/index.js +1064 -0
- package/client/libquery_engine-darwin.dylib.node +0 -0
- package/client/libquery_engine-linux-arm64-openssl-1.1.x.so.node +0 -0
- package/client/package.json +150 -0
- package/client/runtime/edge-esm.js +34 -0
- package/client/runtime/edge.js +34 -0
- package/client/runtime/index-browser.d.ts +370 -0
- package/client/runtime/index-browser.js +16 -0
- package/client/runtime/library.d.ts +3976 -0
- package/client/runtime/library.js +146 -0
- package/client/runtime/react-native.js +83 -0
- package/client/runtime/wasm-compiler-edge.js +83 -0
- package/client/runtime/wasm-engine-edge.js +35 -0
- package/client/schema.prisma +1158 -0
- package/client/wasm.d.ts +1 -0
- package/client/wasm.js +1022 -0
- package/package.json +55 -0
- package/prisma/schema/CandidateQuestionResponse.prisma +21 -0
- package/prisma/schema/UserRole.prisma +20 -0
- package/prisma/schema/action.prisma +35 -0
- package/prisma/schema/applications.prisma +44 -0
- package/prisma/schema/approval.prisma +14 -0
- package/prisma/schema/assessment.prisma +40 -0
- package/prisma/schema/assessmentLibrary.prisma +33 -0
- package/prisma/schema/assessmentQuestion.prisma +17 -0
- package/prisma/schema/assignmentLibrary.prisma +20 -0
- package/prisma/schema/budget.prisma +38 -0
- package/prisma/schema/calendly.prisma +18 -0
- package/prisma/schema/candidateProfile.prisma +26 -0
- package/prisma/schema/contactUs.prisma +12 -0
- package/prisma/schema/evaluationPlan.prisma +91 -0
- package/prisma/schema/feedback.prisma +18 -0
- package/prisma/schema/fitCheck.prisma +54 -0
- package/prisma/schema/google.prisma +16 -0
- package/prisma/schema/intermediateFeedback.prisma +18 -0
- package/prisma/schema/interview.prisma +65 -0
- package/prisma/schema/interviewLibrary.prisma +33 -0
- package/prisma/schema/interviewNotes.prisma +17 -0
- package/prisma/schema/jobDescription.prisma +43 -0
- package/prisma/schema/jobDescriptionData.prisma +16 -0
- package/prisma/schema/message.prisma +15 -0
- package/prisma/schema/ongoingEvaluation.prisma +59 -0
- package/prisma/schema/organisation.prisma +44 -0
- package/prisma/schema/overallFeedback.prisma +35 -0
- package/prisma/schema/panelist.prisma +24 -0
- package/prisma/schema/permission.prisma +13 -0
- package/prisma/schema/questions.prisma +36 -0
- package/prisma/schema/resume.prisma +26 -0
- package/prisma/schema/resumeData.prisma +15 -0
- package/prisma/schema/schema.prisma +16 -0
- package/prisma/schema/suggestion.prisma +21 -0
- package/prisma/schema/transcript.prisma +26 -0
- package/prisma/schema/user.prisma +68 -0
- package/prisma/schema/userProfile.prisma +15 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/// Defines the category or purpose of the interview, suitable for any job role.
|
|
2
|
+
enum InterviewCategory {
|
|
3
|
+
SCREENING // Initial screening interview
|
|
4
|
+
TECHNICAL // Skill or role-specific interview
|
|
5
|
+
BEHAVIORAL // Behavioral or situational round
|
|
6
|
+
CASE_STUDY // Case-based or analytical round
|
|
7
|
+
MANAGERIAL // Leadership or management-focused
|
|
8
|
+
CULTURAL_FIT // Checks alignment with company culture
|
|
9
|
+
FINAL_DISCUSSION // Final HR or offer discussion
|
|
10
|
+
GENERAL // Generic or flexible-purpose interview
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/// Represents a reusable interview template applicable to any job type.
|
|
14
|
+
model InterviewLibrary {
|
|
15
|
+
id String @id @default(uuid())
|
|
16
|
+
title String
|
|
17
|
+
description String
|
|
18
|
+
organisation_id String
|
|
19
|
+
category InterviewCategory
|
|
20
|
+
evaluation_type EvaluationType
|
|
21
|
+
duration Float
|
|
22
|
+
passing_marks Float
|
|
23
|
+
is_active Boolean @default(true)
|
|
24
|
+
created_by String
|
|
25
|
+
updated_by String
|
|
26
|
+
created_at DateTime @default(now())
|
|
27
|
+
updated_at DateTime @updatedAt
|
|
28
|
+
organisation Organisation @relation(fields: [organisation_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
29
|
+
|
|
30
|
+
@@index([organisation_id])
|
|
31
|
+
@@index([category])
|
|
32
|
+
@@index([created_at])
|
|
33
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
model InterviewNotes {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
interview_id String
|
|
4
|
+
note String
|
|
5
|
+
details Json?
|
|
6
|
+
timestamp DateTime @default(now())
|
|
7
|
+
created_at DateTime @default(now())
|
|
8
|
+
updated_at DateTime @updatedAt
|
|
9
|
+
created_by String
|
|
10
|
+
updated_by String
|
|
11
|
+
is_active Boolean @default(true)
|
|
12
|
+
|
|
13
|
+
// Relations
|
|
14
|
+
interview Interview @relation(fields: [interview_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
15
|
+
|
|
16
|
+
@@index([interview_id])
|
|
17
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
enum JobDescriptionStatus {
|
|
2
|
+
CREATED
|
|
3
|
+
DRAFT
|
|
4
|
+
ACTIVE
|
|
5
|
+
DEACTIVATED
|
|
6
|
+
CLOSED
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
model JobDescription {
|
|
10
|
+
id String @id @default(uuid())
|
|
11
|
+
hiring_manager_id String?
|
|
12
|
+
status JobDescriptionStatus @default(DRAFT)
|
|
13
|
+
organisation_id String
|
|
14
|
+
screeningQuestions String[]
|
|
15
|
+
recommendedQuestions Json[]
|
|
16
|
+
created_at DateTime @default(now())
|
|
17
|
+
updated_at DateTime @updatedAt
|
|
18
|
+
created_by String
|
|
19
|
+
updated_by String
|
|
20
|
+
uploaded_job_description_path String?
|
|
21
|
+
is_active Boolean @default(true)
|
|
22
|
+
is_plan_locked Boolean @default(false)
|
|
23
|
+
is_posted Boolean @default(false)
|
|
24
|
+
openings Int @default(1)
|
|
25
|
+
organisation Organisation @relation(fields: [organisation_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
26
|
+
ai_insight Json?
|
|
27
|
+
applications Application[]
|
|
28
|
+
interviews Interview[]
|
|
29
|
+
fit_check FitCheck[] // one-to-many link
|
|
30
|
+
job_description_data JobDescriptionData[] // one-to-many link
|
|
31
|
+
evaluationPlan EvaluationPlan[] // relation to evaluation methods
|
|
32
|
+
ongoing_evaluations OngoingEvaluation[] // optional one-to-many
|
|
33
|
+
assignment_library AssignmentLibrary[]
|
|
34
|
+
approvals Approval[] // one-to-many relation
|
|
35
|
+
resumes Resume[] // one-to-many link
|
|
36
|
+
budget Budget?
|
|
37
|
+
hiring_manager User? @relation("HiringManager", fields: [hiring_manager_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
38
|
+
recruiters User[]
|
|
39
|
+
transcripts Transcript[]
|
|
40
|
+
|
|
41
|
+
@@index([organisation_id])
|
|
42
|
+
@@index([hiring_manager_id])
|
|
43
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
model JobDescriptionData {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
job_description_id String
|
|
4
|
+
key String
|
|
5
|
+
value String
|
|
6
|
+
created_at DateTime @default(now())
|
|
7
|
+
updated_at DateTime @updatedAt
|
|
8
|
+
created_by String
|
|
9
|
+
updated_by String
|
|
10
|
+
is_active Boolean @default(true)
|
|
11
|
+
|
|
12
|
+
jobDescription JobDescription @relation(fields: [job_description_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
13
|
+
|
|
14
|
+
@@unique([job_description_id, key])
|
|
15
|
+
@@index([created_at])
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
model Message {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
sender_id String
|
|
4
|
+
receiver_id String
|
|
5
|
+
message String
|
|
6
|
+
|
|
7
|
+
sender User @relation("Sent Messages", fields: [sender_id], references: [id])
|
|
8
|
+
receiver User @relation("Received Messages", fields: [receiver_id], references: [id])
|
|
9
|
+
|
|
10
|
+
created_at DateTime @default(now())
|
|
11
|
+
updated_at DateTime @updatedAt
|
|
12
|
+
created_by String
|
|
13
|
+
updated_by String
|
|
14
|
+
is_active Boolean @default(true)
|
|
15
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
enum OngoingEvaluationStatus {
|
|
2
|
+
LOCKED
|
|
3
|
+
ACTION_REQUIRED
|
|
4
|
+
IN_PROGRESS
|
|
5
|
+
EVALUATED
|
|
6
|
+
CLEARED
|
|
7
|
+
NOT_CLEARED
|
|
8
|
+
SKIPPED
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
enum OngoingEvaluationState {
|
|
12
|
+
NOT_STARTED
|
|
13
|
+
IN_PROGRESS
|
|
14
|
+
CLEARED
|
|
15
|
+
SKIPPED
|
|
16
|
+
NOT_CLEARED
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
enum OngoingEvaluationRoundStatus {
|
|
20
|
+
NOT_SCHEDULED
|
|
21
|
+
REQUESTED_SCHEDULING
|
|
22
|
+
SCHEDULED
|
|
23
|
+
IN_PROGRESS
|
|
24
|
+
PENDING_EVALUATION
|
|
25
|
+
EVALUATED
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
model OngoingEvaluation {
|
|
29
|
+
id String @id @default(uuid())
|
|
30
|
+
application_id String
|
|
31
|
+
candidate_id String
|
|
32
|
+
resume_id String
|
|
33
|
+
organisation_id String
|
|
34
|
+
job_description_id String
|
|
35
|
+
evaluation_plan_id String
|
|
36
|
+
interview_id String? @unique
|
|
37
|
+
status OngoingEvaluationStatus?
|
|
38
|
+
state OngoingEvaluationState? @default(NOT_STARTED)
|
|
39
|
+
round_status OngoingEvaluationRoundStatus? @default(NOT_SCHEDULED)
|
|
40
|
+
comments String? @default("")
|
|
41
|
+
// Relations
|
|
42
|
+
jobDescription JobDescription? @relation(fields: [job_description_id], references: [id], onDelete: SetNull)
|
|
43
|
+
application Application @relation(fields: [application_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
44
|
+
candidate User? @relation(fields: [candidate_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
45
|
+
resume Resume? @relation(fields: [resume_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
46
|
+
organisation Organisation? @relation(fields: [organisation_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
47
|
+
evaluation_plan EvaluationPlan @relation(fields: [evaluation_plan_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
48
|
+
interview Interview? @relation(fields: [interview_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
49
|
+
created_at DateTime @default(now())
|
|
50
|
+
updated_at DateTime @updatedAt
|
|
51
|
+
created_by String
|
|
52
|
+
updated_by String
|
|
53
|
+
is_active Boolean @default(true)
|
|
54
|
+
is_current Boolean @default(false)
|
|
55
|
+
|
|
56
|
+
@@unique([application_id, evaluation_plan_id])
|
|
57
|
+
@@index([application_id])
|
|
58
|
+
@@index([evaluation_plan_id])
|
|
59
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
enum OrganisationSize {
|
|
2
|
+
ONE_TO_TEN @map("1-10")
|
|
3
|
+
ELEVEN_TO_FIFTY @map("11-50")
|
|
4
|
+
FIFTY_ONE_TO_TWO_HUNDRED @map("51-200")
|
|
5
|
+
TWO_HUNDRED_ONE_TO_FIVE_HUNDRED @map("201-500")
|
|
6
|
+
FIVE_HUNDRED_PLUS @map("500+")
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
model Organisation {
|
|
10
|
+
id String @id @default(uuid())
|
|
11
|
+
name String @unique
|
|
12
|
+
industry String
|
|
13
|
+
about String
|
|
14
|
+
website String
|
|
15
|
+
size OrganisationSize @default(ONE_TO_TEN)
|
|
16
|
+
phone String
|
|
17
|
+
address String
|
|
18
|
+
company_values Json[]
|
|
19
|
+
|
|
20
|
+
interviewers User[]
|
|
21
|
+
created_at DateTime @default(now())
|
|
22
|
+
updated_at DateTime @updatedAt
|
|
23
|
+
created_by String
|
|
24
|
+
updated_by String
|
|
25
|
+
is_active Boolean @default(true)
|
|
26
|
+
alias String? @unique
|
|
27
|
+
logo String?
|
|
28
|
+
applications Application[]
|
|
29
|
+
user_roles UserRole[]
|
|
30
|
+
job_descriptions JobDescription[]
|
|
31
|
+
assessment_library AssessmentLibrary[]
|
|
32
|
+
assignment_library AssignmentLibrary[]
|
|
33
|
+
interview_library InterviewLibrary[]
|
|
34
|
+
interviews Interview[]
|
|
35
|
+
fit_check FitCheck[] // one-to-many link
|
|
36
|
+
resumes Resume[] // one-to-many link
|
|
37
|
+
panelists Panelist[] // one-to-many link
|
|
38
|
+
approvals Approval[] // one-to-many link
|
|
39
|
+
suggestions Suggestion[]
|
|
40
|
+
ongoing_evaluations OngoingEvaluation[] // optional one-to-many
|
|
41
|
+
actions Action[]
|
|
42
|
+
|
|
43
|
+
@@index([name])
|
|
44
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
enum FeedbackType {
|
|
2
|
+
HUMAN
|
|
3
|
+
AI
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
enum OverallRecommendation {
|
|
7
|
+
StrongHire
|
|
8
|
+
Hire
|
|
9
|
+
LeaningHire
|
|
10
|
+
NoHire
|
|
11
|
+
StrongNoHire
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
model OverallFeedback {
|
|
15
|
+
id String @id @default(uuid())
|
|
16
|
+
interview_id String
|
|
17
|
+
interviewer_id String? // 👈 optional field
|
|
18
|
+
feedback_type FeedbackType
|
|
19
|
+
overall_score Float
|
|
20
|
+
overall_recommendation OverallRecommendation
|
|
21
|
+
overall_feedback Json
|
|
22
|
+
created_at DateTime @default(now())
|
|
23
|
+
updated_at DateTime @updatedAt
|
|
24
|
+
created_by String
|
|
25
|
+
updated_by String
|
|
26
|
+
is_active Boolean @default(true)
|
|
27
|
+
// Relations
|
|
28
|
+
interview Interview @relation(fields: [interview_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
29
|
+
interviewer Panelist? @relation(fields: [interviewer_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
30
|
+
intermediateFeedbacks IntermediateFeedback[] // 👈 one-to-many relation added here
|
|
31
|
+
|
|
32
|
+
@@unique([interview_id, interviewer_id]) // 👈 updated uniqueness logic
|
|
33
|
+
@@index([interview_id])
|
|
34
|
+
@@index([interviewer_id])
|
|
35
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
model Panelist {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
name String
|
|
4
|
+
designation String
|
|
5
|
+
experience String // e.g. "10+", keeping as String for flexibility
|
|
6
|
+
expertise String // e.g. "Product Strategy, Figma..."
|
|
7
|
+
suited_interview String // e.g. "Consulting, Customer understanding..."
|
|
8
|
+
industry String // e.g. "Healthcare, Fintech"
|
|
9
|
+
special_areas String? // Optional field
|
|
10
|
+
organisation_id String
|
|
11
|
+
user_id String @unique
|
|
12
|
+
|
|
13
|
+
user User @relation(fields: [user_id], references: [id])
|
|
14
|
+
organisation Organisation @relation(fields: [organisation_id], references: [id])
|
|
15
|
+
evaluationPlans EvaluationPlan[]
|
|
16
|
+
overallFeedbacks OverallFeedback[]
|
|
17
|
+
created_at DateTime @default(now())
|
|
18
|
+
updated_at DateTime @updatedAt
|
|
19
|
+
created_by String
|
|
20
|
+
updated_by String
|
|
21
|
+
is_active Boolean @default(true)
|
|
22
|
+
|
|
23
|
+
assessments Assessment[]
|
|
24
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
model Permission {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
permissions String[] @default([])
|
|
4
|
+
created_by String?
|
|
5
|
+
updated_by String?
|
|
6
|
+
updated_at DateTime @updatedAt
|
|
7
|
+
created_at DateTime @default(now())
|
|
8
|
+
is_active Boolean @default(true)
|
|
9
|
+
user User?
|
|
10
|
+
user_roles UserRole?
|
|
11
|
+
|
|
12
|
+
@@index([created_at])
|
|
13
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
enum Difficulty {
|
|
2
|
+
EASY // simple/basic questions
|
|
3
|
+
MEDIUM // moderate difficulty
|
|
4
|
+
HARD // challenging questions
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
enum QuestionType {
|
|
8
|
+
MCQ
|
|
9
|
+
TRUE_FALSE
|
|
10
|
+
THEORY
|
|
11
|
+
CODING
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
model Question {
|
|
15
|
+
id String @id @default(uuid())
|
|
16
|
+
assessment_library_id String?
|
|
17
|
+
evaluation_plan_id String?
|
|
18
|
+
candidate_id String?
|
|
19
|
+
skill String?
|
|
20
|
+
question_type QuestionType?
|
|
21
|
+
question String
|
|
22
|
+
answer String
|
|
23
|
+
options String[] // For MCQ's
|
|
24
|
+
max_score Float?
|
|
25
|
+
difficulty Difficulty?
|
|
26
|
+
created_by String
|
|
27
|
+
updated_by String
|
|
28
|
+
created_at DateTime @default(now())
|
|
29
|
+
updated_at DateTime @updatedAt
|
|
30
|
+
is_active Boolean @default(true)
|
|
31
|
+
candidate User? @relation(fields: [candidate_id], references: [id], onDelete: SetNull)
|
|
32
|
+
assessments AssessmentQuestion[] @relation("QuestionToAssessmentQuestion")
|
|
33
|
+
assessmentLibrary AssessmentLibrary? @relation(fields: [assessment_library_id], references: [id], onDelete: Cascade)
|
|
34
|
+
evaluationPlan EvaluationPlan? @relation(fields: [evaluation_plan_id], references: [id], onDelete: SetNull)
|
|
35
|
+
candidateResponse CandidateQuestionResponse[]
|
|
36
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
model Resume {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
user_id String?
|
|
4
|
+
organisation_id String?
|
|
5
|
+
job_description_id String?
|
|
6
|
+
uploaded_resume_path String?
|
|
7
|
+
created_at DateTime @default(now())
|
|
8
|
+
updated_at DateTime @updatedAt
|
|
9
|
+
created_by String
|
|
10
|
+
updated_by String
|
|
11
|
+
is_active Boolean @default(true)
|
|
12
|
+
user User? @relation(fields: [user_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
13
|
+
organisation Organisation? @relation(fields: [organisation_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
14
|
+
job_description JobDescription? @relation(fields: [job_description_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
15
|
+
applications Application[]
|
|
16
|
+
interviews Interview[]
|
|
17
|
+
ongoing_evaluations OngoingEvaluation[] // optional one-to-many
|
|
18
|
+
|
|
19
|
+
resume_data ResumeData[] // one-to-many link
|
|
20
|
+
fit_check FitCheck[] // one-to-many link
|
|
21
|
+
// inverse side of the relation — no foreign key here
|
|
22
|
+
candidate_profile CandidateProfile? // one-to-one link
|
|
23
|
+
yearsOfExperience Int?
|
|
24
|
+
|
|
25
|
+
@@index([user_id])
|
|
26
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
model ResumeData {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
resume_id String
|
|
4
|
+
key String
|
|
5
|
+
value String
|
|
6
|
+
created_at DateTime @default(now())
|
|
7
|
+
updated_at DateTime @updatedAt
|
|
8
|
+
created_by String
|
|
9
|
+
updated_by String
|
|
10
|
+
is_active Boolean @default(true)
|
|
11
|
+
|
|
12
|
+
resume Resume @relation(fields: [resume_id], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
|
13
|
+
|
|
14
|
+
@@index([created_at])
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// This is your Prisma schema file,
|
|
2
|
+
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
|
3
|
+
|
|
4
|
+
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
|
|
5
|
+
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
|
6
|
+
|
|
7
|
+
generator client {
|
|
8
|
+
provider = "prisma-client-js"
|
|
9
|
+
output = "../../client"
|
|
10
|
+
binaryTargets = ["native", "linux-arm64-openssl-1.1.x"]
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
datasource db {
|
|
14
|
+
provider = "postgresql"
|
|
15
|
+
url = env("DATABASE_URL")
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
model Suggestion {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
interview_id String?
|
|
4
|
+
transcript_id String? @unique // ✅ ensures one-to-one
|
|
5
|
+
organisation_id String
|
|
6
|
+
suggestion String
|
|
7
|
+
question String?
|
|
8
|
+
created_at DateTime @default(now())
|
|
9
|
+
updated_at DateTime @updatedAt
|
|
10
|
+
created_by String
|
|
11
|
+
updated_by String
|
|
12
|
+
is_active Boolean @default(true)
|
|
13
|
+
|
|
14
|
+
// Relations
|
|
15
|
+
interview Interview? @relation(fields: [interview_id], references: [id], onDelete: SetNull)
|
|
16
|
+
transcripts Transcript[]
|
|
17
|
+
organisation Organisation @relation(fields: [organisation_id], references: [id], onDelete: Cascade)
|
|
18
|
+
|
|
19
|
+
@@index([interview_id])
|
|
20
|
+
@@index([transcript_id])
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
model Transcript {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
interview_id String?
|
|
4
|
+
suggestion_id String?
|
|
5
|
+
intermediate_feedback_id String?
|
|
6
|
+
job_description_id String?
|
|
7
|
+
interviewer_timestamp DateTime?
|
|
8
|
+
candidate_timestamp DateTime?
|
|
9
|
+
interviewer String
|
|
10
|
+
candidate String
|
|
11
|
+
order_no Int @default(autoincrement())
|
|
12
|
+
created_at DateTime @default(now())
|
|
13
|
+
updated_at DateTime @updatedAt
|
|
14
|
+
created_by String
|
|
15
|
+
updated_by String
|
|
16
|
+
is_active Boolean @default(true)
|
|
17
|
+
// Relations
|
|
18
|
+
interview Interview? @relation(fields: [interview_id], references: [id], onDelete: SetNull, onUpdate: SetNull)
|
|
19
|
+
suggestion Suggestion? @relation(fields: [suggestion_id], references: [id], onDelete: SetNull)
|
|
20
|
+
intermediate_feedback IntermediateFeedback? @relation(fields: [intermediate_feedback_id], references: [id], onDelete: SetNull)
|
|
21
|
+
job_description JobDescription? @relation(fields: [job_description_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
22
|
+
|
|
23
|
+
@@unique([interview_id, order_no])
|
|
24
|
+
@@index([interview_id])
|
|
25
|
+
@@index([job_description_id])
|
|
26
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
enum FirstLoginStatus {
|
|
2
|
+
PENDING
|
|
3
|
+
COMPLETED
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
model User {
|
|
7
|
+
id String @id @default(uuid())
|
|
8
|
+
email String @unique
|
|
9
|
+
password String
|
|
10
|
+
role_id String
|
|
11
|
+
role UserRole @relation(fields: [role_id], references: [id], onDelete: Restrict, onUpdate: Cascade)
|
|
12
|
+
// Back-relations are defined from Resume side via user_id
|
|
13
|
+
google_id String? @unique
|
|
14
|
+
refresh_token String?
|
|
15
|
+
created_at DateTime @default(now())
|
|
16
|
+
updated_at DateTime @updatedAt
|
|
17
|
+
created_by String
|
|
18
|
+
updated_by String
|
|
19
|
+
is_active Boolean @default(true)
|
|
20
|
+
is_self_registered Boolean @default(true)
|
|
21
|
+
permission_id String? @unique
|
|
22
|
+
permission Permission? @relation(fields: [permission_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
23
|
+
organisation_id String?
|
|
24
|
+
organisation Organisation? @relation(fields: [organisation_id], references: [id], onDelete: SetNull, onUpdate: Cascade)
|
|
25
|
+
applications Application[]
|
|
26
|
+
resume Resume[]
|
|
27
|
+
candidate_profile CandidateProfile?
|
|
28
|
+
user_profile UserProfile?
|
|
29
|
+
job_description JobDescription[]
|
|
30
|
+
hiring_manager_job_descriptions JobDescription[] @relation("HiringManager")
|
|
31
|
+
approvals Approval[]
|
|
32
|
+
panelist Panelist?
|
|
33
|
+
sent_messages Message[] @relation("Sent Messages")
|
|
34
|
+
received_messages Message[] @relation("Received Messages")
|
|
35
|
+
profile_created Boolean
|
|
36
|
+
first_login_status FirstLoginStatus @default(PENDING)
|
|
37
|
+
// Back-relations for interviews (optional but recommended for clarity)
|
|
38
|
+
candidate_interviews Interview[] @relation("CandidateInterviews")
|
|
39
|
+
interviewer_interviews Interview[] @relation("InterviewerInterviews")
|
|
40
|
+
assessment_results Assessment[]
|
|
41
|
+
candidate_assessments Assessment[] @relation("CandidateAssessments")
|
|
42
|
+
reviewer_assessments Assessment[] @relation("ReviewerAssessments")
|
|
43
|
+
candidateResponses CandidateQuestionResponse[]
|
|
44
|
+
questions Question[]
|
|
45
|
+
ongoing_evaluations OngoingEvaluation[] // optional one-to-many
|
|
46
|
+
actions Action[]
|
|
47
|
+
calendly Calendly?
|
|
48
|
+
google Google?
|
|
49
|
+
|
|
50
|
+
name String?
|
|
51
|
+
phone String?
|
|
52
|
+
description String?
|
|
53
|
+
date_of_birth DateTime?
|
|
54
|
+
designation String?
|
|
55
|
+
location String?
|
|
56
|
+
salary String?
|
|
57
|
+
work_experience Json?
|
|
58
|
+
education Json?
|
|
59
|
+
notice_period String?
|
|
60
|
+
gender String?
|
|
61
|
+
ethnicity String?
|
|
62
|
+
veteran_status String?
|
|
63
|
+
disability_status String?
|
|
64
|
+
|
|
65
|
+
@@index([role_id])
|
|
66
|
+
@@index([permission_id])
|
|
67
|
+
@@index([organisation_id])
|
|
68
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
model UserProfile {
|
|
2
|
+
id String @id @default(uuid())
|
|
3
|
+
created_at DateTime @default(now())
|
|
4
|
+
updated_at DateTime @updatedAt
|
|
5
|
+
name String
|
|
6
|
+
phone String
|
|
7
|
+
description String
|
|
8
|
+
date_of_birth String
|
|
9
|
+
designation String
|
|
10
|
+
is_active Boolean @default(true)
|
|
11
|
+
user User? @relation(fields: [user_id], references: [id])
|
|
12
|
+
user_id String? @unique
|
|
13
|
+
|
|
14
|
+
work_experience Json?
|
|
15
|
+
}
|