import { NextResponse } from 'next/server'; import supabase from '@/lib/db'; import bcrypt from 'bcryptjs'; export async function POST(request: Request) { try { const { username, nim, password } = await request.json(); // Validate input if (!username || !nim || !password) { return NextResponse.json( { error: 'Semua field harus diisi' }, { status: 400 } ); } // Validate NIM format (11 characters) if (nim.length !== 11) { return NextResponse.json( { error: 'NIM harus 11 karakter' }, { status: 400 } ); } // Check if NIM exists in mahasiswa table const { data: mahasiswa, error: mahasiswaError } = await supabase .from('mahasiswa') .select('nim') .eq('nim', nim) .single(); if (mahasiswaError || !mahasiswa) { return NextResponse.json( { error: 'NIM tidak terdaftar sebagai mahasiswa' }, { status: 400 } ); } // Check if NIM already exists in user_app table const { data: existingUsers, error: userError } = await supabase .from('user_app') .select('nim') .eq('nim', nim) .single(); if (!userError && existingUsers) { return NextResponse.json( { error: 'NIM sudah terdaftar sebagai pengguna' }, { status: 400 } ); } // Hash password const hashedPassword = await bcrypt.hash(password, 10); // Insert new user const { data: newUser, error: insertError } = await supabase .from('user_app') .insert({ nim: nim, username: username, password: hashedPassword, role: 'mahasiswa' }) .select() .single(); if (insertError) { console.error('Insert error:', insertError); return NextResponse.json( { error: 'Terjadi kesalahan saat registrasi' }, { status: 500 } ); } return NextResponse.json( { message: 'Registrasi berhasil' }, { status: 201 } ); } catch (error) { console.error('Registration error:', error); return NextResponse.json( { error: 'Terjadi kesalahan saat registrasi' }, { status: 500 } ); } }