Backend: mi-dia siempre local, vocabulario canónico, AplicacionPago con usuario Mi día: modal español real, cita desde modal, score falso eliminado Cotizador: barra sticky, persistencia local con folio Alta Clientes: redirect eliminado, foto conectada, asesor desde sesión, refs dinámicas Cobranza: contrato Mora arreglado, link a Plan, abono próximo pago, WhatsApp Landing: contactos locales, ModalContacto eliminado, ModoTrabajo eliminado Dashboards: MiTablero unificado, funnel con descartados, drill-down, rango fechas Chat FRASA: corpus 5 desarrollos, 6 herramientas, historial conversaciones 69 archivos, 7 apps construidas
61 lines
2.6 KiB
TypeScript
61 lines
2.6 KiB
TypeScript
import type { Request, Response } from 'express'
|
|
import * as clienteMaestroService from '../services/cliente-maestro.service.js'
|
|
import { NotFoundError, BadRequestError } from '../utils/errors.js'
|
|
import { requireAdmin } from './config.controller.js'
|
|
|
|
// ── GET /api/clientes-maestro ────────────────────────────────────────
|
|
|
|
export async function listarEndpoint(req: Request, res: Response): Promise<void> {
|
|
const busqueda = (req.query.busqueda as string) ?? undefined
|
|
const desarrollo = (req.query.desarrollo as string) ?? undefined
|
|
const estatus = (req.query.estatus as string) ?? undefined
|
|
const pagina = req.query.pagina ? Number(req.query.pagina) : undefined
|
|
const limite = req.query.limite ? Number(req.query.limite) : undefined
|
|
|
|
const resultado = await clienteMaestroService.listar({
|
|
busqueda,
|
|
desarrollo,
|
|
estatus,
|
|
...(pagina !== undefined ? { pagina } : {}),
|
|
...(limite !== undefined ? { limite } : {}),
|
|
})
|
|
res.json(resultado)
|
|
}
|
|
|
|
// ── GET /api/clientes-maestro/exportar ───────────────────────────────
|
|
|
|
export async function exportarEndpoint(req: Request, res: Response): Promise<void> {
|
|
const busqueda = (req.query.busqueda as string) ?? undefined
|
|
const desarrollo = (req.query.desarrollo as string) ?? undefined
|
|
const estatus = (req.query.estatus as string) ?? undefined
|
|
|
|
const datos = await clienteMaestroService.exportar({ busqueda, desarrollo, estatus })
|
|
res.json(datos)
|
|
}
|
|
|
|
// ── GET /api/clientes-maestro/:numCliente ────────────────────────────
|
|
|
|
export async function obtenerEndpoint(req: Request, res: Response): Promise<void> {
|
|
const numCliente = String(req.params['numCliente'] ?? '')
|
|
if (!numCliente) throw new BadRequestError('numCliente requerido')
|
|
|
|
const cliente = await clienteMaestroService.obtener(numCliente)
|
|
if (!cliente) throw new NotFoundError('Cliente no encontrado')
|
|
res.json(cliente)
|
|
}
|
|
|
|
// ── POST /api/clientes-maestro/importar ──────────────────────────────
|
|
|
|
export async function importarEndpoint(req: Request, res: Response): Promise<void> {
|
|
const datos = req.body
|
|
if (!Array.isArray(datos) || datos.length === 0) {
|
|
throw new BadRequestError('Se esperaba un array de clientes')
|
|
}
|
|
|
|
const resultado = await clienteMaestroService.importarDesdeExcel(datos)
|
|
res.json(resultado)
|
|
}
|
|
|
|
// Re-exportar requireAdmin para las rutas
|
|
export { requireAdmin }
|