fix(apartados): el apartado se crea al momento de dar Apartó

El endpoint POST /oportunidades/:id/etapa en 'Aparto' ahora garantiza la
creación del apartado antes de responder (asegurarApartado con reintentos:
Monday tarda ~1s en propagar la etapa). Antes dependía del webhook y Mis
apartados recargaba antes de que existiera. El webhook y el cron quedan
como red de seguridad para cambios hechos directo en Monday (dedup
compartido, idempotente).
This commit is contained in:
2026-09-05 01:21:18 +00:00
parent dc5e99ad98
commit b40b8d4627
3 changed files with 87 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ import { z } from 'zod'
import { config } from '../config/index.js'
import { mondayService, type MondayService } from '../services/monday.service.js'
import { moverAGrupoSegunEstado } from '../services/grupos-estado.service.js'
import { automatizacionesService } from '../services/automatizaciones.service.js'
/** Categorías del dropdown "Motivo No Compra" (vocabulario CRM FRASA) */
export const MOTIVOS_NO_COMPRA = [
@@ -127,5 +128,17 @@ export async function cambiarEtapaOportunidadEndpoint(req: Request, res: Respons
const body = cambiarEtapaSchema.parse(req.body)
const itemId = String(req.params['itemId'])
await cambiarEtapaOportunidad(mondayService, itemId, body.etapa, body.fecha)
// En 'Aparto' el apartado debe existir YA (Mis apartados recarga al volver):
// asegurarApartado reintenta unos segundos (Monday tarda en propagar la
// etapa) y es idempotente (dedup); el webhook queda como red de seguridad
// para cambios hechos directo en Monday.
if (body.etapa === 'Aparto') {
try {
await automatizacionesService.asegurarApartado(itemId)
} catch (err) {
// eslint-disable-next-line no-console
console.error(`No se pudo crear el apartado de la oportunidad ${itemId}:`, err)
}
}
res.json({ itemId, etapa: body.etapa, ...(body.fecha !== undefined ? { fecha: body.fecha } : {}) })
}