feat(purga): Monday eliminado completamente del sistema

14 servicios eliminados, 7 controllers local-only, crons locales,
config sin MONDAY_*, frontend sin banners/avisos Monday.
552 tests API + 7 apps construidas.
This commit is contained in:
2026-09-11 11:47:17 +00:00
parent 64b01246d6
commit 89d95eb53b
130 changed files with 2018 additions and 14747 deletions

View File

@@ -1,37 +0,0 @@
import { useEffect, useState } from 'react'
import { fetchEstadoSistema, type EstadoSistema } from '../services/sistema'
const INTERVALO_POLL_MS = 60_000
export function useEstadoSistema(): EstadoSistema | null | undefined {
const [estado, setEstado] = useState<EstadoSistema | null | undefined>(undefined)
useEffect(() => {
let activo = true
const consultar = () => {
void fetchEstadoSistema().then((e) => { if (activo) setEstado(e) })
}
consultar()
const id = setInterval(consultar, INTERVALO_POLL_MS)
return () => { activo = false; clearInterval(id) }
}, [])
return estado
}
export function useModoLocal(): boolean {
const estado = useEstadoSistema()
return estado !== undefined && estado !== null && !estado.mondayOk
}
export default function BannerModoLocal({ parcial }: { parcial?: boolean }) {
const modoLocal = useModoLocal()
if (!modoLocal && !parcial) return null
return (
<div role="status" className="border-b border-amber-200 bg-amber-50">
<p className="mx-auto max-w-[1280px] px-4 py-2 text-xs font-medium text-amber-700 sm:px-6">
{modoLocal
? 'Modo local — Monday no disponible. Tus capturas se guardan y se sincronizarán automáticamente.'
: 'Datos parciales (modo local)'}
</p>
</div>
)
}

View File

@@ -57,8 +57,8 @@ export default function SeccionEquipo() {
</thead>
<tbody className="divide-y divide-[#E5E7EB]">
{equipo.porVendedor.map((v) => (
<tr key={v.mondayUserId} className="transition-colors duration-100 hover:bg-[#F8FAFC] dark:bg-[#0F172A]">
<td className={CLASE_CELDA}>{v.nombre ?? `Monday #${v.mondayUserId}`}</td>
<tr key={v.usuarioId} className="transition-colors duration-100 hover:bg-[#F8FAFC] dark:bg-[#0F172A]">
<td className={CLASE_CELDA}>{v.nombre ?? 'Sin nombre'}</td>
<td className={CLASE_CELDA}>{v.leadsAsignados}</td>
<td className={CLASE_CELDA}>{v.leadsNuevosSemana}</td>
</tr>