120 lines
4.3 KiB
TypeScript
120 lines
4.3 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { dataService, isCarlosAdmin } from '@/lib/data-service';
|
|
import { User } from '@/types';
|
|
|
|
export async function GET(request: Request) {
|
|
const { searchParams } = new URL(request.url);
|
|
const phone = searchParams.get('phone');
|
|
const id = searchParams.get('id');
|
|
|
|
if (phone) {
|
|
const cleanPhone = phone.replace(/\D/g, '');
|
|
const user = dataService.getUsers().find((u) => u.phone.replace(/\D/g, '') === cleanPhone);
|
|
const existingOrders = dataService.getOrders().filter(
|
|
(o) => o.customerPhone.replace(/\D/g, '') === cleanPhone
|
|
);
|
|
const hasCompletedPreviousOrder = Boolean(
|
|
(user && (user.totalOrders || 0) > 0) ||
|
|
existingOrders.some((o) => o.status === 'dispatched' || o.status === 'deposit_received' || o.status === 'supplier_notified')
|
|
);
|
|
const requiresShippingDeposit = !hasCompletedPreviousOrder;
|
|
const depositAmount = requiresShippingDeposit ? 10000 : 0;
|
|
const depositReason = requiresShippingDeposit
|
|
? 'Garantía de separación requerida para primer pedido'
|
|
: 'Cliente distinguido exento de anticipo (100% Contraentrega)';
|
|
|
|
const isCarlos = isCarlosAdmin(cleanPhone);
|
|
const userRole = isCarlos ? 'admin' : (user?.role || 'customer');
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
isFirstPurchase: isCarlos ? false : !hasCompletedPreviousOrder,
|
|
requiresShippingDeposit: isCarlos ? false : requiresShippingDeposit,
|
|
depositAmount: isCarlos ? 0 : depositAmount,
|
|
depositReason: isCarlos ? 'Super Administrador DripZone' : depositReason,
|
|
phoneVerified: isCarlos ? true : (user ? user.phoneVerified === true : false),
|
|
user: user
|
|
? {
|
|
...user,
|
|
role: userRole,
|
|
phoneVerified: isCarlos ? true : user.phoneVerified,
|
|
requiresShippingDeposit: isCarlos ? false : requiresShippingDeposit,
|
|
depositReason: isCarlos ? 'Super Administrador DripZone' : depositReason,
|
|
}
|
|
: isCarlos
|
|
? {
|
|
id: 'usr-admin-carlos',
|
|
name: 'Administrador',
|
|
email: 'carlos.andres.lasso@gmail.com',
|
|
phone: cleanPhone,
|
|
city: 'Cali',
|
|
address: 'Sede Principal / Cali',
|
|
role: 'admin',
|
|
isActive: true,
|
|
phoneVerified: true,
|
|
requiresShippingDeposit: false,
|
|
depositReason: 'Super Administrador DripZone',
|
|
totalOrders: 0,
|
|
}
|
|
: null,
|
|
});
|
|
}
|
|
|
|
if (id) {
|
|
const user = dataService.getUserById(id);
|
|
return NextResponse.json({ success: true, user });
|
|
}
|
|
|
|
const users = dataService.getUsers();
|
|
return NextResponse.json({ success: true, users });
|
|
}
|
|
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const body = await request.json();
|
|
const newUser: User = {
|
|
id: `usr-${Date.now()}`,
|
|
name: body.name,
|
|
email: body.email,
|
|
phone: body.phone,
|
|
city: body.city || 'Cali',
|
|
address: body.address || '',
|
|
role: body.role || 'customer',
|
|
isActive: body.isActive !== false,
|
|
createdAt: new Date().toISOString().split('T')[0],
|
|
totalOrders: 0,
|
|
};
|
|
const saved = dataService.addUser(newUser);
|
|
return NextResponse.json({ success: true, user: saved });
|
|
} catch (error: any) {
|
|
return NextResponse.json({ success: false, error: error.message }, { status: 400 });
|
|
}
|
|
}
|
|
|
|
export async function PUT(request: Request) {
|
|
try {
|
|
const { id, updates } = await request.json();
|
|
const updated = dataService.updateUser(id, updates);
|
|
if (!updated) {
|
|
return NextResponse.json({ success: false, error: 'Usuario no encontrado' }, { status: 404 });
|
|
}
|
|
return NextResponse.json({ success: true, user: updated });
|
|
} catch (error: any) {
|
|
return NextResponse.json({ success: false, error: error.message }, { status: 400 });
|
|
}
|
|
}
|
|
|
|
export async function DELETE(request: Request) {
|
|
try {
|
|
const { searchParams } = new URL(request.url);
|
|
const id = searchParams.get('id');
|
|
if (!id) {
|
|
return NextResponse.json({ success: false, error: 'ID requerido' }, { status: 400 });
|
|
}
|
|
const deleted = dataService.deleteUser(id);
|
|
return NextResponse.json({ success: deleted });
|
|
} catch (error: any) {
|
|
return NextResponse.json({ success: false, error: error.message }, { status: 400 });
|
|
}
|
|
}
|