-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathschema.prisma
More file actions
194 lines (163 loc) · 5.69 KB
/
schema.prisma
File metadata and controls
194 lines (163 loc) · 5.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client"
output = "../src/generated/prisma"
}
datasource db {
provider = "postgresql"
}
model Member {
id String @id @default(uuid())
name String
email String @unique
birth_date DateTime? @db.Date
phone String? // Single phone number
bio String?
profilePhoto String? // URL to profile photo
github String?
linkedin String?
twitter String?
geeksforgeeks String?
leetcode String?
codechef String?
codeforces String?
passoutYear DateTime?
isApproved Boolean @default(false)
isManager Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Approval audit (self-reference)
approvedBy Member? @relation("MemberApprovals", fields: [approvedById], references: [id])
approvedById String?
approvedMembers Member[] @relation("MemberApprovals")
// Authentication & Relations
accounts Account[]
achievements MemberAchievement[]
projects MemberProject[]
interviews InterviewExperience[]
completedQs CompletedQuestion[]
// Back-relations for audit fields
createdTopics Topic[] @relation("TopicCreatedBy")
updatedTopics Topic[] @relation("TopicUpdatedBy")
createdQuestions Question[] @relation("QuestionCreatedBy")
updatedQuestions Question[] @relation("QuestionUpdatedBy")
createdAchievements Achievement[] @relation("AchievementCreatedBy")
updatedAchievements Achievement[] @relation("AchievementUpdatedBy")
createdProjects Project[] @relation("ProjectCreatedBy")
updatedProjects Project[] @relation("ProjectUpdatedBy")
}
model Account {
id String @id @default(uuid())
provider String
providerAccountId String
password String? // for email/password auth
accessToken String?
refreshToken String?
expiresAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)
memberId String
@@unique([provider, providerAccountId])
}
model Achievement {
id Int @id @default(autoincrement())
title String
description String
achievedAt DateTime
imageUrl String
// Audit fields
createdBy Member? @relation("AchievementCreatedBy", fields: [createdById], references: [id], onDelete: SetNull)
createdById String?
createdAt DateTime @default(now())
updatedBy Member? @relation("AchievementUpdatedBy", fields: [updatedById], references: [id], onDelete: SetNull)
updatedById String?
updatedAt DateTime @updatedAt
members MemberAchievement[]
}
model MemberAchievement {
member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)
memberId String
achievement Achievement @relation(fields: [achievementId], references: [id], onDelete: Cascade)
achievementId Int
@@id([memberId, achievementId])
}
model Project {
id Int @id @default(autoincrement())
name String
imageUrl String
githubUrl String
deployUrl String?
// Audit fields
createdBy Member? @relation("ProjectCreatedBy", fields: [createdById], references: [id], onDelete: SetNull)
createdById String?
createdAt DateTime @default(now())
updatedBy Member? @relation("ProjectUpdatedBy", fields: [updatedById], references: [id], onDelete: SetNull)
updatedById String?
updatedAt DateTime @updatedAt
members MemberProject[]
}
model MemberProject {
member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)
memberId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
projectId Int
@@id([memberId, projectId])
}
model Topic {
id Int @id @default(autoincrement())
title String
description String
// Audit fields
createdBy Member? @relation("TopicCreatedBy", fields: [createdById], references: [id], onDelete: SetNull)
createdById String?
createdAt DateTime @default(now())
updatedBy Member? @relation("TopicUpdatedBy", fields: [updatedById], references: [id], onDelete: SetNull)
updatedById String?
updatedAt DateTime @updatedAt
questions Question[]
}
model Question {
id Int @id @default(autoincrement())
questionName String
difficulty Difficulty
link String
topic Topic @relation(fields: [topicId], references: [id], onDelete: Cascade)
topicId Int
// Audit fields
createdBy Member? @relation("QuestionCreatedBy", fields: [createdById], references: [id], onDelete: SetNull)
createdById String?
createdAt DateTime @default(now())
updatedBy Member? @relation("QuestionUpdatedBy", fields: [updatedById], references: [id], onDelete: SetNull)
updatedById String?
updatedAt DateTime @updatedAt
completedBy CompletedQuestion[]
}
enum Difficulty {
Easy
Medium
Hard
}
model InterviewExperience {
id Int @id @default(autoincrement())
company String
role String
verdict Verdict
content String
isAnonymous Boolean
member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)
memberId String
}
enum Verdict {
Selected
Rejected
Pending
}
model CompletedQuestion {
member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)
memberId String
question Question @relation(fields: [questionId], references: [id], onDelete: Cascade)
questionId Int
@@id([memberId, questionId])
}