Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
Hire-Guru
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vigneswaran Shanmugam
Hire-Guru
Commits
324b5c4d
Commit
324b5c4d
authored
Apr 12, 2026
by
AravindR-K
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Restored to the previous version
parent
15608f95
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
687 additions
and
2371 deletions
+687
-2371
Backend/middleware/auth.js
Backend/middleware/auth.js
+2
-0
Backend/models/Quiz.js
Backend/models/Quiz.js
+24
-2
Backend/routes/auth.js
Backend/routes/auth.js
+2
-3
Frontend/package-lock.json
Frontend/package-lock.json
+648
-2356
Frontend/src/app/app.routes.ts
Frontend/src/app/app.routes.ts
+10
-10
Frontend/src/app/pages/admin/generate-quiz/generate-quiz.ts
Frontend/src/app/pages/admin/generate-quiz/generate-quiz.ts
+1
-0
No files found.
Backend/middleware/auth.js
View file @
324b5c4d
...
...
@@ -18,7 +18,9 @@ const protect = async (req, res, next) => {
try
{
const
decoded
=
jwt
.
verify
(
token
,
process
.
env
.
JWT_SECRET
);
console
.
log
(
"
DECODED:
"
,
decoded
);
req
.
user
=
await
User
.
findById
(
decoded
.
id
).
select
(
'
-password
'
);
console
.
log
(
"
USER ROLE:
"
,
req
.
user
.
role
);
if
(
!
req
.
user
)
{
return
res
.
status
(
401
).
json
({
message
:
'
User not found
'
});
}
...
...
Backend/models/Quiz.js
View file @
324b5c4d
...
...
@@ -9,7 +9,7 @@ const quizSchema = new mongoose.Schema({
timer
:
{
type
:
Number
,
required
:
[
true
,
'
Timer is required
'
],
min
:
1
// minimum 1 minute
min
:
1
},
totalQuestions
:
{
type
:
Number
,
...
...
@@ -23,9 +23,31 @@ const quizSchema = new mongoose.Schema({
isActive
:
{
type
:
Boolean
,
default
:
true
},
// 🔥 ADD THESE (important)
category
:
{
type
:
String
,
default
:
'
General
'
},
assignToAll
:
{
type
:
Boolean
,
default
:
true
},
assignees
:
[{
type
:
mongoose
.
Schema
.
Types
.
ObjectId
,
ref
:
'
User
'
}],
difficulty
:
{
type
:
String
,
enum
:
[
'
Beginner
'
,
'
Intermediate
'
,
'
Hard
'
]
},
topic
:
{
type
:
String
}
},
{
timestamps
:
true
});
module
.
exports
=
mongoose
.
model
(
'
Quiz
'
,
quizSchema
);
module
.
exports
=
mongoose
.
model
(
'
Quiz
'
,
quizSchema
);
\ No newline at end of file
Backend/routes/auth.js
View file @
324b5c4d
...
...
@@ -72,9 +72,8 @@ router.post('/login', async (req, res) => {
// Generate token
const
token
=
generateToken
(
user
.
_id
);
// Update login status
user
.
isLoggedIn
=
true
;
await
user
.
save
();
// Update login status using updateOne to bypass the pre('save') password hash hook
await
User
.
updateOne
({
_id
:
user
.
_id
},
{
isLoggedIn
:
true
});
res
.
json
({
message
:
'
Login successful
'
,
...
...
Frontend/package-lock.json
View file @
324b5c4d
This source diff could not be displayed because it is too large. You can
view the blob
instead.
Frontend/src/app/app.routes.ts
View file @
324b5c4d
...
...
@@ -8,12 +8,12 @@ export const routes: Routes = [
// Auth routes (guest only)
{
path
:
'
login
'
,
canActivate
:
[
guestGuard
],
//
canActivate: [guestGuard],
loadComponent
:
()
=>
import
(
'
./pages/login/login
'
).
then
(
m
=>
m
.
LoginComponent
)
},
{
path
:
'
register
'
,
canActivate
:
[
guestGuard
],
//
canActivate: [guestGuard],
loadComponent
:
()
=>
import
(
'
./pages/register/register
'
).
then
(
m
=>
m
.
RegisterComponent
)
},
...
...
@@ -25,44 +25,44 @@ export const routes: Routes = [
},
{
path
:
'
admin/users
'
,
canActivate
:
[
adminGuard
],
//
canActivate: [adminGuard],
loadComponent
:
()
=>
import
(
'
./pages/admin/users/users
'
).
then
(
m
=>
m
.
AdminUsersComponent
)
},
{
path
:
'
admin/users/:userId/history
'
,
canActivate
:
[
adminGuard
],
//
canActivate: [adminGuard],
loadComponent
:
()
=>
import
(
'
./pages/admin/user-history/user-history
'
).
then
(
m
=>
m
.
UserHistoryComponent
)
},
{
path
:
'
admin/submissions/:submissionId
'
,
canActivate
:
[
adminGuard
],
//
canActivate: [adminGuard],
loadComponent
:
()
=>
import
(
'
./pages/admin/submission-detail/submission-detail
'
).
then
(
m
=>
m
.
SubmissionDetailComponent
)
},
{
path
:
'
admin/generate-quiz
'
,
canActivate
:
[
adminGuard
],
//
canActivate: [adminGuard],
loadComponent
:
()
=>
import
(
'
./pages/admin/generate-quiz/generate-quiz
'
).
then
(
m
=>
m
.
GenerateQuizComponent
)
},
// Student routes
{
path
:
'
student/dashboard
'
,
canActivate
:
[
studentGuard
],
//
canActivate: [studentGuard],
loadComponent
:
()
=>
import
(
'
./pages/student/dashboard/dashboard
'
).
then
(
m
=>
m
.
StudentDashboardComponent
)
},
{
path
:
'
student/quiz/:quizId
'
,
canActivate
:
[
studentGuard
],
//
canActivate: [studentGuard],
loadComponent
:
()
=>
import
(
'
./pages/student/take-quiz/take-quiz
'
).
then
(
m
=>
m
.
TakeQuizComponent
)
},
{
path
:
'
student/profile
'
,
canActivate
:
[
studentGuard
],
//
canActivate: [studentGuard],
loadComponent
:
()
=>
import
(
'
./pages/student/profile/profile
'
).
then
(
m
=>
m
.
StudentProfileComponent
)
},
{
path
:
'
student/results/:submissionId
'
,
canActivate
:
[
studentGuard
],
//
canActivate: [studentGuard],
loadComponent
:
()
=>
import
(
'
./pages/student/results/results
'
).
then
(
m
=>
m
.
StudentResultsComponent
)
},
...
...
Frontend/src/app/pages/admin/generate-quiz/generate-quiz.ts
View file @
324b5c4d
...
...
@@ -28,6 +28,7 @@ export class GenerateQuizComponent implements OnInit {
constructor
(
public
authService
:
AuthService
,
private
quizService
:
QuizService
)
{}
ngOnInit
():
void
{
console
.
log
(
"
Component loaded
"
);
this
.
loadQuizzes
();
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment