From 4bfe6cb867002cba5007828b1ebfc2aa42acc4be Mon Sep 17 00:00:00 2001 From: Konstanty Fara Date: Sun, 19 Apr 2026 11:16:59 +0200 Subject: [PATCH 1/3] Fixed error message handling in api/grade/route.ts --- app/api/grades/route.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/api/grades/route.ts b/app/api/grades/route.ts index b9da63d..4235cca 100644 --- a/app/api/grades/route.ts +++ b/app/api/grades/route.ts @@ -48,7 +48,7 @@ export async function GET(req: NextRequest) { return NextResponse.json(grades) } catch (error) { console.error('GET /api/grades error:', error instanceof Error ? error.message : error) - return NextResponse.json({ error: error instanceof Error ? error.stack : 'Internal server error' }, { status: 500 }) + return NextResponse.json({ error:'Internal server error' }, { status: 500 }) } } @@ -67,13 +67,13 @@ export async function POST(req: NextRequest) { } const parsed = GradeSchema.safeParse(body) - if (!parsed.success) return NextResponse.json({ error: parsed.error.flatten() }, { status: 400 }) + if (!parsed.success) return NextResponse.json({ error: parsed.error }, { status: 400 }) const data = parsed.data const max = data.maxMarks! - const term = data.term ?? 'Term 1' - - const grade = Grade.findOneAndUpdate( + const term = data.term ?? 'Term 1' + + const grade = await Grade.findOneAndUpdate( { teacherId: userId, studentId: data.studentId, subject: data.subject, term }, { $set: { ...data, term, teacherId: userId, grade: calcGrade(data.marks, max) } }, { upsert: true, new: true } @@ -83,6 +83,6 @@ export async function POST(req: NextRequest) { if (error instanceof Error) { console.error('POST /api/grades error:', error.message) } - return NextResponse.json({ error: error instanceof Error ? error.stack : 'Internal server error' }, { status: 500 }) + return NextResponse.json({ error: 'Internal server error' }, { status: 500 }) } } From 8c1b1d88d0838d673a1008986298f54b39baf00c Mon Sep 17 00:00:00 2001 From: Konstanty Fara Date: Sun, 19 Apr 2026 12:03:39 +0200 Subject: [PATCH 2/3] Fixed average score by Subject function --- app/dashboard/grades/GradesClient.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/dashboard/grades/GradesClient.tsx b/app/dashboard/grades/GradesClient.tsx index fdaa00b..78e1e29 100644 --- a/app/dashboard/grades/GradesClient.tsx +++ b/app/dashboard/grades/GradesClient.tsx @@ -208,13 +208,14 @@ export function GradesClient() { () => subjects.map((subject) => { const sg = gradesBySubject[subject]; - const avg = + let avg = sg.length > 0 - ? Math.round( - sg.reduce((s, g) => s + pct(g.marks, g.maxMarks), 0) / - sg.length, - ) - : 0; + ? + sg.reduce((s, g) => s + pct(g.marks, g.maxMarks), 0) / sg.length + : 0 + + avg = Number(avg.toFixed(2)); + return { subject: subject.length > 10 ? subject.slice(0, 10) + "…" : subject, avg, From 12b0bc489b18f8f38a652546a7940fd2a0b37c82 Mon Sep 17 00:00:00 2001 From: Konstanty Fara Date: Sun, 19 Apr 2026 12:17:16 +0200 Subject: [PATCH 3/3] Fixed Profile API request bug --- app/api/profile/route.ts | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/app/api/profile/route.ts b/app/api/profile/route.ts index a3d98bf..7c474ca 100644 --- a/app/api/profile/route.ts +++ b/app/api/profile/route.ts @@ -7,32 +7,40 @@ export async function GET(req: NextRequest) { const { searchParams } = new URL(req.url) const queryUserId = searchParams.get('userId') - let userId: string | null = queryUserId + // 1. Identificazione utente + const session = await auth() + const userId = queryUserId || session?.userId + if (!userId) { - const session = await auth() - userId = session.userId + return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } - if (!userId) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) try { await connectDB() + let teacher = await Teacher.findOne({ clerkId: userId }).lean() if (!teacher) { const clerkUser = await currentUser() - const created = await Teacher.create({ + + if (!clerkUser) { + return NextResponse.json({ error: 'User data not found' }, { status: 404 }) + } + + const newTeacher = await Teacher.create({ clerkId: userId, - name: clerkUser?.fullName ?? '', - email: clerkUser?.emailAddresses[0]?.emailAddress ?? '', + name: `${clerkUser.firstName ?? ''} ${clerkUser.lastName ?? ''}`.trim() || 'Anonymous', + email: clerkUser.emailAddresses[0]?.emailAddress ?? '', department: '', subjects: [], }) - teacher = created.toObject() + + teacher = JSON.parse(JSON.stringify(newTeacher)) } return NextResponse.json(teacher) } catch (error) { - console.error('GET /api/profile error:', error instanceof Error ? error.message : error) + console.error('GET /api/profile error:', error) return NextResponse.json({ error: 'Internal server error' }, { status: 500 }) } }