11// This is your Prisma schema file,
22// learn more about it in the docs: https://pris.ly/d/prisma-schema
33
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-
74generator client {
85 provider = " prisma-client-js "
96 output = " ../src/generated/prisma "
@@ -16,12 +13,12 @@ datasource db {
1613}
1714
1815model Member {
19- id String @id @default (uuid () )
16+ id String @id @default (uuid () )
2017 name String
21- email String @unique
22- phone String ? // Single phone number
18+ email String @unique
19+ phone String ? // Single phone number
2320 bio String ?
24- profilePhoto String ? // URL to profile photo
21+ profilePhoto String ? // URL to profile photo
2522 github String ?
2623 linkedin String ?
2724 twitter String ?
@@ -30,44 +27,67 @@ model Member {
3027 codechef String ?
3128 codeforces String ?
3229 passoutYear DateTime
33- isApproved Boolean @default (false )
34- isManager Boolean @default (false )
35- createdAt DateTime @default (now () )
36- updatedAt DateTime @updatedAt
37-
38- // Relations
39- accounts Account []
40- achievements MemberAchievement []
41- projects MemberProject []
42- topicsCreated Topic [] @relation (" MemberTopics " )
43- questionsCreated Question [] @relation (" MemberQuestionsCreated " )
44- interviews InterviewExperience []
45- completedQs CompletedQuestion []
30+ isApproved Boolean @default (false )
31+ isManager Boolean @default (false )
32+ createdAt DateTime @default (now () )
33+ updatedAt DateTime @updatedAt
34+
35+ // Approval audit (self-reference)
36+ approvedBy Member ? @relation (" MemberApprovals " , fields : [approvedById ] , references : [id ] )
37+ approvedById String ?
38+ approvedMembers Member [] @relation (" MemberApprovals " )
39+
40+ // Authentication & Relations
41+ accounts Account []
42+ achievements MemberAchievement []
43+ projects MemberProject []
44+ interviews InterviewExperience []
45+ completedQs CompletedQuestion []
46+
47+ // Back-relations for audit fields
48+ createdTopics Topic [] @relation (" TopicCreatedBy " )
49+ updatedTopics Topic [] @relation (" TopicUpdatedBy " )
50+ createdQuestions Question [] @relation (" QuestionCreatedBy " )
51+ updatedQuestions Question [] @relation (" QuestionUpdatedBy " )
52+ createdAchievements Achievement [] @relation (" AchievementCreatedBy " )
53+ updatedAchievements Achievement [] @relation (" AchievementUpdatedBy " )
54+ createdProjects Project [] @relation (" ProjectCreatedBy " )
55+ updatedProjects Project [] @relation (" ProjectUpdatedBy " )
4656}
4757
4858model Account {
49- id String @id @default (uuid () )
59+ id String @id @default (uuid () )
5060 provider String
5161 providerAccountId String
52- password String ? // for email/password auth
62+ password String ? // for email/password auth
5363 accessToken String ?
5464 refreshToken String ?
5565 expiresAt DateTime ?
56- createdAt DateTime @default (now () )
57- updatedAt DateTime @updatedAt
66+ createdAt DateTime @default (now () )
67+ updatedAt DateTime @updatedAt
5868
59- member Member @relation (fields : [memberId ] , references : [id ] , onDelete : Cascade )
69+ member Member @relation (fields : [memberId ] , references : [id ] , onDelete : Cascade )
6070 memberId String
6171
6272 @@unique ([provider , providerAccountId ] )
6373}
6474
6575model Achievement {
66- id Int @id @default (autoincrement () )
67- title String
68- achievedAt DateTime
69- imageUrl String ?
70- members MemberAchievement []
76+ id Int @id @default (autoincrement () )
77+ title String
78+ description String
79+ achievedAt DateTime
80+ imageUrl String
81+
82+ // Audit fields
83+ createdBy Member ? @relation (" AchievementCreatedBy " , fields : [createdById ] , references : [id ] , onDelete : SetNull )
84+ createdById String ?
85+ createdAt DateTime @default (now () )
86+ updatedBy Member ? @relation (" AchievementUpdatedBy " , fields : [updatedById ] , references : [id ] , onDelete : SetNull )
87+ updatedById String ?
88+ updatedAt DateTime @updatedAt
89+
90+ members MemberAchievement []
7191}
7292
7393model MemberAchievement {
@@ -80,46 +100,66 @@ model MemberAchievement {
80100}
81101
82102model Project {
83- id Int @id @default (autoincrement () )
84- name String
85- imageUrl String ?
86- githubUrl String ?
87- deployUrl String ?
88- members MemberProject []
103+ id Int @id @default (autoincrement () )
104+ name String
105+ imageUrl String ?
106+ githubUrl String ?
107+ deployUrl String ?
108+
109+ // Audit fields
110+ createdBy Member ? @relation (" ProjectCreatedBy " , fields : [createdById ] , references : [id ] , onDelete : SetNull )
111+ createdById String ?
112+ createdAt DateTime @default (now () )
113+ updatedBy Member ? @relation (" ProjectUpdatedBy " , fields : [updatedById ] , references : [id ] , onDelete : SetNull )
114+ updatedById String ?
115+ updatedAt DateTime @updatedAt
116+
117+ members MemberProject []
89118}
90119
91120model MemberProject {
92- member Member @relation (fields : [memberId ] , references : [id ] , onDelete : Cascade )
121+ member Member @relation (fields : [memberId ] , references : [id ] , onDelete : Cascade )
93122 memberId String
94- project Project @relation (fields : [projectId ] , references : [id ] , onDelete : Cascade )
123+ project Project @relation (fields : [projectId ] , references : [id ] , onDelete : Cascade )
95124 projectId Int
96125
97126 @@id ([memberId , projectId ] )
98127}
99128
100129model Topic {
101- id Int @id @default (autoincrement () )
130+ id Int @id @default (autoincrement () )
102131 title String
103132 description String
104- /// Who created this topic; optional to allow system-generated topics or imports
105- createdBy Member ? @relation (" MemberTopics " , fields : [createdById ] , references : [id ] , onDelete : SetNull )
133+
134+ // Audit fields
135+ createdBy Member ? @relation (" TopicCreatedBy " , fields : [createdById ] , references : [id ] , onDelete : SetNull )
106136 createdById String ?
107- createdAt DateTime @default (now () )
108- updatedAt DateTime @updatedAt
109- questions Question []
137+ createdAt DateTime @default (now () )
138+ updatedBy Member ? @relation (" TopicUpdatedBy " , fields : [updatedById ] , references : [id ] , onDelete : SetNull )
139+ updatedById String ?
140+ updatedAt DateTime @updatedAt
141+
142+ questions Question []
110143}
111144
112145model Question {
113146 id Int @id @default (autoincrement () )
114147 questionName String
115148 difficulty Difficulty
116149 link String
117- topic Topic @relation (fields : [topicId ] , references : [id ] , onDelete : Cascade )
118- topicId Int
119- // Who added this question; optional in case the member is deleted
120- createdBy Member ? @relation (" MemberQuestionsCreated " , fields : [createdById ] , references : [id ] , onDelete : SetNull )
121- createdById String ?
122- completedBy CompletedQuestion []
150+
151+ topic Topic @relation (fields : [topicId ] , references : [id ] , onDelete : Cascade )
152+ topicId Int
153+
154+ // Audit fields
155+ createdBy Member ? @relation (" QuestionCreatedBy " , fields : [createdById ] , references : [id ] , onDelete : SetNull )
156+ createdById String ?
157+ createdAt DateTime @default (now () )
158+ updatedBy Member ? @relation (" QuestionUpdatedBy " , fields : [updatedById ] , references : [id ] , onDelete : SetNull )
159+ updatedById String ?
160+ updatedAt DateTime @updatedAt
161+
162+ completedBy CompletedQuestion []
123163}
124164
125165enum Difficulty {
@@ -129,26 +169,27 @@ enum Difficulty {
129169}
130170
131171model InterviewExperience {
132- id Int @id @default (autoincrement () )
133- company String
134- role String
135- verdict Verdict
136- content String
172+ id Int @id @default (autoincrement () )
173+ company String
174+ role String
175+ verdict Verdict
176+ content String
137177 isAnonymous Boolean
138- member Member @relation (fields : [memberId ] , references : [id ] , onDelete : Cascade )
139- memberId String
178+ member Member @relation (fields : [memberId ] , references : [id ] , onDelete : Cascade )
179+ memberId String
140180}
181+
141182enum Verdict {
142183 Selected
143184 Rejected
144185 Pending
145186}
146187
147188model CompletedQuestion {
148- member Member @relation (fields : [memberId ] , references : [id ] , onDelete : Cascade )
149- memberId String
150- question Question @relation (fields : [questionId ] , references : [id ] , onDelete : Cascade )
151- questionId Int
189+ member Member @relation (fields : [memberId ] , references : [id ] , onDelete : Cascade )
190+ memberId String
191+ question Question @relation (fields : [questionId ] , references : [id ] , onDelete : Cascade )
192+ questionId Int
152193
153194 @@id ([memberId , questionId ] )
154- }
195+ }
0 commit comments