feat(admin): add direct client onboarding modal and management directly in app.4ventures.es
This commit is contained in:
46
src/app/api/admin/create-client/route.ts
Normal file
46
src/app/api/admin/create-client/route.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { createClient } from '@/lib/supabase/server';
|
||||
|
||||
export async function POST(req: NextRequest) {
|
||||
try {
|
||||
const supabase = await createClient();
|
||||
const { data: { user } } = await supabase.auth.getUser();
|
||||
|
||||
if (!user) {
|
||||
return NextResponse.json({ error: 'No autorizado. Inicia sesión.' }, { status: 401 });
|
||||
}
|
||||
|
||||
const userRole = user.app_metadata?.role || user.user_metadata?.role || 'client';
|
||||
if (userRole !== 'admin' && userRole !== 'team') {
|
||||
return NextResponse.json({ error: 'Permisos insuficientes. Solo administradores pueden crear clientes.' }, { status: 403 });
|
||||
}
|
||||
|
||||
const body = await req.json();
|
||||
const { companyName, slug, email, password, role } = body;
|
||||
|
||||
if (!companyName || !slug || !email || !password) {
|
||||
return NextResponse.json({ error: 'Todos los campos son obligatorios.' }, { status: 400 });
|
||||
}
|
||||
|
||||
const sanitizedSlug = slug.toLowerCase().trim().replace(/[^a-z0-9-]/g, '-');
|
||||
const targetRole = role === 'admin' || role === 'team' ? role : 'client';
|
||||
|
||||
const { data, error } = await supabase.rpc('provision_client', {
|
||||
p_company_name: companyName.trim(),
|
||||
p_slug: sanitizedSlug,
|
||||
p_email: email.toLowerCase().trim(),
|
||||
p_password: password,
|
||||
p_role: targetRole,
|
||||
});
|
||||
|
||||
if (error) {
|
||||
console.error('Error in provision_client RPC:', error);
|
||||
return NextResponse.json({ error: error.message || 'Error al provisionar cliente en base de datos.' }, { status: 500 });
|
||||
}
|
||||
|
||||
return NextResponse.json({ success: true, client: data });
|
||||
} catch (err: any) {
|
||||
console.error('Server error creating client:', err);
|
||||
return NextResponse.json({ error: err?.message || 'Error interno del servidor.' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user