58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
// app/api/auth/check-student.ts
|
|
import { NextResponse } from 'next/server';
|
|
import type { NextRequest } from 'next/server';
|
|
import { prisma } from '@/lib/prisma';
|
|
import { normalizeEmail } from '@/lib/normalize-email';
|
|
|
|
export async function POST(req: NextRequest) {
|
|
try {
|
|
const body = await req.json();
|
|
const email = body?.email;
|
|
const normalizedEmail = normalizeEmail(email);
|
|
|
|
if (!normalizedEmail) {
|
|
return NextResponse.json({ error: 'Email required' }, { status: 400 });
|
|
}
|
|
|
|
const allowedStudent = await prisma.allowedStudent.findFirst({
|
|
where: {
|
|
email: {
|
|
equals: normalizedEmail,
|
|
mode: 'insensitive',
|
|
},
|
|
},
|
|
});
|
|
|
|
if (!allowedStudent || !allowedStudent.active) {
|
|
return NextResponse.json(
|
|
{
|
|
allowed: false,
|
|
message: 'Email not registered for access'
|
|
},
|
|
{ status: 200 }
|
|
);
|
|
}
|
|
|
|
// Parse course levels
|
|
const levels = allowedStudent.levels
|
|
.split(',')
|
|
.map((level) => level.trim())
|
|
.filter((level) => level.length > 0);
|
|
|
|
return NextResponse.json(
|
|
{
|
|
allowed: true,
|
|
levels,
|
|
studentId: allowedStudent.id,
|
|
},
|
|
{ status: 200 }
|
|
);
|
|
} catch (err) {
|
|
console.error('POST /api/auth/check-student error', err);
|
|
return NextResponse.json(
|
|
{ error: 'Failed to check student status' },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|