-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprisma-file.txt
134 lines (120 loc) · 3.27 KB
/
prisma-file.txt
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
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @default(uuid()) @unique @id
email String @unique
password String
name String?
role Role @default(STUDENT)
group_membership Group_membership[]
result Result[]
response Response[]
// if he is a student then he can have many results
// user can have many group membership
}
model Group {
id String @default(uuid()) @unique @id
name String
group_membership Group_membership[]
quiz Quiz[]
// can have many members
// can have many/one admin -> adminId[] -> group admin
// a group can have many quizes
}
model Group_membership {
creator Boolean @default(false)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId String
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
groupId String
@@id([userId, groupId]) // composite
// id String @default(uuid()) @unique @id
// User Id -> one to one
// group id
// user type -> could be enum
}
model Quiz {
id String @default(uuid()) @unique @id
name String
full_marks Int
pass_marks Int
category_name Category_name @default(ACHIEVEMENT) // Enum
questions Question[]
answers Answer[]
result Result[]
response Response[]
group Group @relation(fields: [groupId], references: [id], onDelete: Cascade)
groupId String
// A quiz has many results
// has one category
// can have many result
// negative marks
// full marks
// pass marks
// a group can many quizes
}
model Question {
id String @default(uuid()) @unique @id
question_text String
quiz Quiz @relation(fields: [quizId], references: [id], onDelete: Cascade)
quizId String
options Option[]
answer Answer?
}
model Option {
id String @default(uuid()) @unique @id
option String
txt String
mark Int
question Question @relation(fields: [questionId], references: [id], onDelete: Cascade)
questionId String
}
model Answer {
id String @default(uuid()) @unique @id
answer_text String
question Question @relation(fields: [questionId], references: [id], onDelete: Cascade)
questionId String @unique
quiz Quiz @relation(fields: [quizId], references: [id], onDelete: Cascade)
quizId String
}
model Response {
id String @default(uuid()) @unique @id
student_response String[]
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId String
quiz Quiz @relation(fields: [quizId], references: [id], onDelete: Cascade)
quizId String
result Result? // A response can have zero or only one result
}
model Result {
id String @default(uuid()) @unique @id
marks Int
quiz Quiz @relation(fields: [quizId], references: [id], onDelete: Cascade)
quizId String
response Response @relation(fields: [responseId], references: [id], onDelete: Cascade)
responseId String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId String
// quiz id
// student Id -> user Id -> might duplicate
// Group Id
// marks -> achieved marks after quiz
// negativity
// Before result there must be a response
// status : pass or fail
}
enum Category_name {
ACHIEVEMENT
IQ
PERSONALITY
PSYCHOLOGICAL
}
enum Role {
STUDENT
TEACHER
}