import type { Request, Response } from 'express' import { prisma } from '../services/prisma.js' import { resumenMiDiaLocal, type ActividadLocalMiDia, type UsuarioLocal } from '../services/mi-dia.service.js' import { AppError } from '../utils/errors.js' const ROLES_CON_EQUIPO = ['coordinador', 'corporativo', 'admin'] /** * GET /api/mi-dia/resumen — agenda del vendedor logueado. * SIEMPRE responde desde datos locales (LeadCaptura / Cliente / ActividadLocal): * Monday ya no participa en este endpoint. El "mío" se resuelve por el * usuarioId de cada captura; admin/dirección ven todas. */ export async function resumenMiDiaEndpoint(req: Request, res: Response): Promise { // Con AUTH_ENABLED=false (arranque temprano/tests) no hay token: se usa el admin const sub = req.usuarioToken?.sub const usuario = sub ? await prisma.usuario.findUnique({ where: { id: sub } }) : await prisma.usuario.findUnique({ where: { username: 'admin' } }) if (!usuario || !usuario.activo) throw new AppError(401, 'Credenciales inválidas') // Capturas de afluencia: admin ve todas, otros solo las suyas const esAdmin = usuario.rol === 'admin' || usuario.rol === 'direccion_general' || usuario.rol === 'director_ventas' const capturas = await prisma.leadCaptura.findMany({ where: esAdmin ? {} : { usuarioId: usuario.id }, orderBy: { createdAt: 'desc' }, }) // Altas de clientes: admin ve todas, otros solo las suyas const clientes = await prisma.cliente.findMany({ where: esAdmin ? {} : { capturadoPorId: usuario.id }, orderBy: { createdAt: 'desc' }, }) // Actividades locales del usuario const actividadesRaw = await prisma.actividadLocal.findMany({ where: { usuarioId: usuario.id }, orderBy: { createdAt: 'desc' }, }) const actividades: ActividadLocalMiDia[] = actividadesRaw.map((a) => ({ id: a.id, titulo: a.titulo, descripcion: a.descripcion, usuarioId: a.usuarioId, leadCapturaId: a.leadCapturaId, fechaVencimiento: a.fechaVencimiento, fechaCierre: a.fechaCierre, estado: a.estado, tipo: a.tipo, })) // Usuarios activos (para la sección equipo, solo coordinador/admin) let usuarios: UsuarioLocal[] = [] if (ROLES_CON_EQUIPO.includes(usuario.rol)) { const usuariosRaw = await prisma.usuario.findMany({ where: { activo: true }, select: { id: true, nombre: true, rol: true, activo: true }, }) usuarios = usuariosRaw.map((u) => ({ id: u.id, nombre: u.nombre, rol: u.rol, activo: u.activo })) } const usuarioMiDia = { nombre: usuario.nombre, rol: usuario.rol, mondayUserId: usuario.mondayUserId } res.json(resumenMiDiaLocal(usuarioMiDia, capturas, clientes, new Date(), actividades, usuarios)) }