From bbf3e8a8758f9f71db5b90b0d85b6ea1b462e397 Mon Sep 17 00:00:00 2001 From: Dizzy2507 Date: Wed, 2 Jul 2025 14:31:26 +0530 Subject: [PATCH] Backend settings of Achievement Page --- .../server/models/Achievement.ts | 27 +++++++++++++++++++ .../server/models/UserProgress.ts | 23 ++++++++++++++++ team-nishita-dashboard/server/models/user.ts | 6 ++++- .../server/utils/badgeChecker.ts | 2 +- .../server/utils/streakCalculator.ts | 4 +-- 5 files changed, 57 insertions(+), 5 deletions(-) diff --git a/team-nishita-dashboard/server/models/Achievement.ts b/team-nishita-dashboard/server/models/Achievement.ts index e69de29bb..9e896f6cd 100644 --- a/team-nishita-dashboard/server/models/Achievement.ts +++ b/team-nishita-dashboard/server/models/Achievement.ts @@ -0,0 +1,27 @@ +import mongoose, { Document, Schema } from 'mongoose'; + +export interface IAchievement extends Document { + name: string; + description: string; + isActive: boolean; + condition: { + field: string; + operator: string; + value: number; + }; + pointsAwarded: number; +} + +const AchievementSchema = new Schema({ + name: { type: String, required: true }, + description: { type: String, required: true }, + isActive: { type: Boolean, default: true }, + condition: { + field: { type: String, required: true }, + operator: { type: String, required: true }, + value: { type: Number, required: true } + }, + pointsAwarded: { type: Number, required: true } +}); + +export const Achievement = mongoose.model('Achievement', AchievementSchema); diff --git a/team-nishita-dashboard/server/models/UserProgress.ts b/team-nishita-dashboard/server/models/UserProgress.ts index e69de29bb..7ac5cf21f 100644 --- a/team-nishita-dashboard/server/models/UserProgress.ts +++ b/team-nishita-dashboard/server/models/UserProgress.ts @@ -0,0 +1,23 @@ +import mongoose, { Document, Schema } from 'mongoose'; + +export interface IUserProgress extends Document { + userId: mongoose.Types.ObjectId; + lessonsCompleted: number; + quizzesTaken: number; + studyTime: number; + pointsEarned: number; + isCheckedIn: boolean; + date: Date; +} + +const UserProgressSchema = new Schema({ + userId: { type: Schema.Types.ObjectId, ref: 'User', required: true }, + lessonsCompleted: { type: Number, default: 0 }, + quizzesTaken: { type: Number, default: 0 }, + studyTime: { type: Number, default: 0 }, + pointsEarned: { type: Number, default: 0 }, + isCheckedIn: { type: Boolean, default: false }, + date: { type: Date, required: true } +}); + +export const UserProgress = mongoose.model('UserProgress', UserProgressSchema); diff --git a/team-nishita-dashboard/server/models/user.ts b/team-nishita-dashboard/server/models/user.ts index 882671ee2..d09e7e3b2 100644 --- a/team-nishita-dashboard/server/models/user.ts +++ b/team-nishita-dashboard/server/models/user.ts @@ -6,6 +6,8 @@ interface IUser extends Document { lastLogin: Date; loginStreak: number; loginDays: Date[]; + currentStreak: number; + totalPoints: number; }; const userSchema = new mongoose.Schema({ @@ -14,7 +16,9 @@ const userSchema = new mongoose.Schema({ role: { type: String, enum: ['user', 'admin'], default: 'user' }, lastLogin: { type: Date }, loginStreak: { type: Number, default: 0 }, - loginDays: [{ type: Date }] + loginDays: [{ type: Date }], + currentStreak: { type: Number, default: 0 }, + totalPoints: { type: Number, default: 0 } }) export const User = mongoose.model('User', userSchema); diff --git a/team-nishita-dashboard/server/utils/badgeChecker.ts b/team-nishita-dashboard/server/utils/badgeChecker.ts index 694aba233..baa61f4a0 100644 --- a/team-nishita-dashboard/server/utils/badgeChecker.ts +++ b/team-nishita-dashboard/server/utils/badgeChecker.ts @@ -1,5 +1,5 @@ // utils/badgeChecker.ts -import { Achievement } from '../models/Achievement.js'; +import { Achievement, IAchievement } from '../models/Achievement.js'; import UserBadge from '../models/UserBadge.js'; import { UserProgress } from '../models/UserProgress.js'; import { User } from '../models/user.js'; diff --git a/team-nishita-dashboard/server/utils/streakCalculator.ts b/team-nishita-dashboard/server/utils/streakCalculator.ts index 8692dd74b..9b83da4ef 100644 --- a/team-nishita-dashboard/server/utils/streakCalculator.ts +++ b/team-nishita-dashboard/server/utils/streakCalculator.ts @@ -1,4 +1,4 @@ -import UserProgress from '../models/UserProgress.js'; +import { UserProgress } from '../models/UserProgress.js'; import { User } from '../models/user.js'; export const calculateStreak = async (userId: string): Promise => { @@ -61,8 +61,6 @@ export const updateUserLevel = async (userId: string, totalPoints: number): Prom // server/middleware/pointsTracker.ts import { Request, Response, NextFunction } from 'express'; -import { updateUserLevel } from '../utils/badgeChecker.js'; - export const pointsTracker = async (req: Request, res: Response, next: NextFunction) => { // This middleware can be used to automatically update user level after points change const originalSend = res.json;