@@ -8,18 +8,36 @@ datasource db {
8
8
}
9
9
10
10
model User {
11
- id String @id @default (auto () ) @map (" _id " ) @db.ObjectId
11
+ id String @id @default (auto () ) @map (" _id " ) @db.ObjectId
12
12
username String
13
- email String @unique
14
- password String ?
15
- emailVerified DateTime ?
16
- image String ?
17
- accounts Account []
18
-
13
+ email String @unique
14
+ password String ?
15
+ emailVerified DateTime ?
16
+ image String ?
17
+ level Int @default (1 )
18
+ xp Int @default (5 )
19
+ currentRank String @default (" Novice " )
20
+ accounts Account []
21
+ educationProgress EducationProgress []
22
+ achievements Achievement []
23
+ skillTrees UserSkillTree []
24
+ dailyStreak Int @default (0 )
25
+ lastActiveDate DateTime ?
26
+
19
27
createdAt DateTime @default (now () )
20
28
updatedAt DateTime @updatedAt
21
29
}
22
30
31
+ model UserSkillTree {
32
+ id String @id @default (uuid () ) @map (" _id " )
33
+ user User @relation (fields : [userId ] , references : [id ] )
34
+ userId String @db.ObjectId
35
+ skillTreeId String
36
+ progress Json // Stores completed nodes, etc.
37
+
38
+ @@unique ([userId , skillTreeId ] )
39
+ }
40
+
23
41
model Account {
24
42
id String @id @default (auto () ) @map (" _id " ) @db.ObjectId
25
43
userId String @db.ObjectId
@@ -32,29 +50,137 @@ model Account {
32
50
scope String ?
33
51
id_token String ? @db.String
34
52
session_state String ?
35
-
53
+
36
54
createdAt DateTime @default (now () )
37
55
updatedAt DateTime @updatedAt
38
-
56
+
39
57
user User @relation (fields : [userId ] , references : [id ] , onDelete : Cascade )
40
-
58
+
41
59
@@unique ([provider , providerAccountId ] )
42
60
}
43
-
44
61
45
62
model EmailVerificationToken {
46
- id String @id @default (auto () ) @map (" _id " ) @db.ObjectId
47
- userId String @unique @db.ObjectId
48
- token String @unique
49
- expireAt DateTime
50
- createdAt DateTime @default (now () )
63
+ id String @id @default (auto () ) @map (" _id " ) @db.ObjectId
64
+ userId String @unique @db.ObjectId
65
+ token String @unique
66
+ expireAt DateTime
67
+ createdAt DateTime @default (now () )
51
68
}
52
69
53
70
model PasswordResetToken {
54
- id String @id @default (auto () ) @map (" _id " ) @db.ObjectId
55
- userId String @unique @db.ObjectId
56
- token String @unique
57
- expireAt DateTime
58
- isUsed Boolean @default (false )
59
- createdAt DateTime @default (now () )
60
- }
71
+ id String @id @default (auto () ) @map (" _id " ) @db.ObjectId
72
+ userId String @unique @db.ObjectId
73
+ token String @unique
74
+ expireAt DateTime
75
+ isUsed Boolean @default (false )
76
+ createdAt DateTime @default (now () )
77
+ }
78
+
79
+ model EducationProgress {
80
+ id String @id @default (uuid () ) @map (" _id " )
81
+ user User @relation (fields : [userId ] , references : [id ] )
82
+ userId String @db.ObjectId
83
+ lessonId String
84
+ completed Boolean @default (false )
85
+ xpEarned Int @default (0 )
86
+ completedAt DateTime ?
87
+
88
+ @@unique ([userId , lessonId ] )
89
+ }
90
+
91
+ model Lesson {
92
+ id String @id @default (uuid () ) @map (" _id " )
93
+ title String
94
+ description String
95
+ duration Int // in minutes
96
+ xpReward Int
97
+ category String
98
+ icon String ?
99
+ learningPath LearningPath ? @relation (fields : [learningPathId ] , references : [id ] )
100
+ learningPathId String ? @db.ObjectId
101
+ quizzes Quiz []
102
+ flashcardDecks FlashcardDeck []
103
+ createdAt DateTime @default (now () )
104
+ updatedAt DateTime @updatedAt
105
+ }
106
+
107
+ model Quiz {
108
+ id String @id @default (uuid () ) @map (" _id " )
109
+ lesson Lesson ? @relation (fields : [lessonId ] , references : [id ] )
110
+ lessonId String ? @db.ObjectId
111
+ title String
112
+ description String
113
+ xpReward Int
114
+ questions QuizQuestion []
115
+ createdAt DateTime @default (now () )
116
+ updatedAt DateTime @updatedAt
117
+ }
118
+
119
+ model QuizQuestion {
120
+ id String @id @default (uuid () ) @map (" _id " )
121
+ quiz Quiz @relation (fields : [quizId ] , references : [id ] )
122
+ quizId String @db.ObjectId
123
+ question String
124
+ options String []
125
+ correctAnswer Int
126
+ explanation String
127
+ }
128
+
129
+ model FlashcardDeck {
130
+ id String @id @default (uuid () ) @map (" _id " )
131
+ lesson Lesson ? @relation (fields : [lessonId ] , references : [id ] )
132
+ lessonId String ? @db.ObjectId
133
+ title String
134
+ description String
135
+ flashcards Flashcard []
136
+ createdAt DateTime @default (now () )
137
+ updatedAt DateTime @updatedAt
138
+ }
139
+
140
+ model Flashcard {
141
+ id String @id @default (uuid () ) @map (" _id " )
142
+ deck FlashcardDeck @relation (fields : [deckId ] , references : [id ] )
143
+ deckId String @db.ObjectId
144
+ front String
145
+ back String
146
+ }
147
+
148
+ model LearningPath {
149
+ id String @id @default (uuid () ) @map (" _id " )
150
+ title String
151
+ color String
152
+ icon String ?
153
+ lessons Lesson []
154
+ createdAt DateTime @default (now () )
155
+ updatedAt DateTime @updatedAt
156
+ }
157
+
158
+ model SkillChallenge {
159
+ id String @id @default (uuid () ) @map (" _id " )
160
+ title String
161
+ description String
162
+ difficulty String
163
+ xpReward Int
164
+ createdAt DateTime @default (now () )
165
+ updatedAt DateTime @updatedAt
166
+ }
167
+
168
+ model Reward {
169
+ id String @id @default (uuid () ) @map (" _id " )
170
+ title String
171
+ description String
172
+ icon String ?
173
+ unlockAtXp Int
174
+ }
175
+
176
+ model Achievement {
177
+ id String @id @default (uuid () ) @map (" _id " )
178
+ user User @relation (fields : [userId ] , references : [id ] )
179
+ userId String @db.ObjectId
180
+ type String
181
+ title String
182
+ description String
183
+ color String ?
184
+ requirement String ?
185
+ earnedAt DateTime @default (now () )
186
+ }
0 commit comments