2026-03-28 16:02:59 -05:00
|
|
|
const BASE = '/api'
|
|
|
|
|
|
|
|
|
|
async function request(path, options = {}) {
|
|
|
|
|
const res = await fetch(`${BASE}${path}`, {
|
|
|
|
|
headers: { 'Content-Type': 'application/json' },
|
|
|
|
|
...options,
|
|
|
|
|
})
|
2026-03-31 18:58:38 -05:00
|
|
|
|
|
|
|
|
// Protección: el servidor puede devolver texto/HTML en errores graves
|
|
|
|
|
let data
|
|
|
|
|
const contentType = res.headers.get('content-type') || ''
|
|
|
|
|
if (contentType.includes('application/json')) {
|
|
|
|
|
data = await res.json()
|
|
|
|
|
} else {
|
|
|
|
|
const text = await res.text()
|
|
|
|
|
data = { error: text || `Error del servidor (${res.status})` }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!res.ok) {
|
|
|
|
|
const msg = data.error || data.message || `Error ${res.status}`
|
|
|
|
|
throw new Error(data.paso ? `[${data.paso}] ${msg}` : msg)
|
|
|
|
|
}
|
2026-03-28 16:02:59 -05:00
|
|
|
return data
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const api = {
|
feat: análisis extendido (10 campos nuevos) + generador de guiones con GPT-4o
Análisis extendido:
- Nuevos campos: apertura_exacta, cierre_exacto, tecnica_retencion, momento_pico_seg
- Copywriting: nivel_consciencia (Schwartz), objecion_principal, avatar_descripcion
- Replicabilidad: ingredientes_clave, replicabilidad, ratio_emocion_logica
- analizador.js: prompt extendido con metodología Schwartz + retención
- validador.js: schema Zod actualizado con 6 nuevos enums
- Migración SQL 05: ALTER TABLE + nuevos ENUMs + índices
Generador de guiones:
- generador.js: lib GPT-4o con temperatura 0.7 y contexto de patrones
- server.js: endpoints POST /api/generar, GET /api/generados, GET /api/generados/:id
- backend/api/generar.js + api/generar.js + api/generados.js: Vercel handlers
- Migración SQL 06: tabla guiones_generados con score_estimado, variantes, notas
- GenerateView.vue: formulario completo + preview del guion con copy al portapapeles
- SideNavBar: nueva entrada "Generar" con ícono auto_fix_high
- Router: ruta /generate → GenerateView
- api.js: api.generar() + api.generados.listar/obtener()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 20:52:25 -05:00
|
|
|
guiones: {
|
|
|
|
|
listar: (params = {}) => request('/guiones?' + new URLSearchParams(params)),
|
|
|
|
|
listarTodos: (params = {}) => request('/guiones?' + new URLSearchParams({ ...params, todos: '1' })),
|
|
|
|
|
obtener: (id) => request(`/guiones/${id}`),
|
2026-03-28 16:02:59 -05:00
|
|
|
},
|
feat: análisis extendido (10 campos nuevos) + generador de guiones con GPT-4o
Análisis extendido:
- Nuevos campos: apertura_exacta, cierre_exacto, tecnica_retencion, momento_pico_seg
- Copywriting: nivel_consciencia (Schwartz), objecion_principal, avatar_descripcion
- Replicabilidad: ingredientes_clave, replicabilidad, ratio_emocion_logica
- analizador.js: prompt extendido con metodología Schwartz + retención
- validador.js: schema Zod actualizado con 6 nuevos enums
- Migración SQL 05: ALTER TABLE + nuevos ENUMs + índices
Generador de guiones:
- generador.js: lib GPT-4o con temperatura 0.7 y contexto de patrones
- server.js: endpoints POST /api/generar, GET /api/generados, GET /api/generados/:id
- backend/api/generar.js + api/generar.js + api/generados.js: Vercel handlers
- Migración SQL 06: tabla guiones_generados con score_estimado, variantes, notas
- GenerateView.vue: formulario completo + preview del guion con copy al portapapeles
- SideNavBar: nueva entrada "Generar" con ícono auto_fix_high
- Router: ruta /generate → GenerateView
- api.js: api.generar() + api.generados.listar/obtener()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 20:52:25 -05:00
|
|
|
generados: {
|
|
|
|
|
listar: (params = {}) => request('/generados?' + new URLSearchParams(params)),
|
|
|
|
|
obtener: (id) => request(`/generados/${id}`),
|
|
|
|
|
},
|
|
|
|
|
analizar: (body) => request('/analizar', { method: 'POST', body: JSON.stringify(body) }),
|
|
|
|
|
generar: (body) => request('/generar', { method: 'POST', body: JSON.stringify(body) }),
|
|
|
|
|
nichos: () => request('/nichos'),
|
|
|
|
|
clientes: () => request('/clientes'),
|
|
|
|
|
stats: () => request('/stats'),
|
2026-03-28 16:02:59 -05:00
|
|
|
}
|