Files
botino/src/modules/1-intake/routes/simulator.js
Lucas Tettamanti 63b9ecef61 ux improved
2026-01-17 04:13:35 -03:00

79 lines
3.3 KiB
JavaScript

import express from "express";
import { addSseClient, removeSseClient } from "../../shared/sse.js";
import { makeGetConversations } from "../../0-ui/controllers/conversations.js";
import { makeListRuns, makeGetRunById } from "../../0-ui/controllers/runs.js";
import { makeSimSend } from "../controllers/sim.js";
import { makeGetConversationState } from "../../0-ui/controllers/conversationState.js";
import { makeListMessages } from "../../0-ui/controllers/messages.js";
import { makeSearchProducts, makeListProducts, makeGetProduct, makeSyncProducts } from "../../0-ui/controllers/products.js";
import { makeListAliases, makeCreateAlias, makeUpdateAlias, makeDeleteAlias } from "../../0-ui/controllers/aliases.js";
import { makeListRecommendations, makeGetRecommendation, makeCreateRecommendation, makeUpdateRecommendation, makeDeleteRecommendation } from "../../0-ui/controllers/recommendations.js";
import { makeDeleteConversation, makeDeleteUser, makeListUsers, makeRetryLast } from "../../0-ui/controllers/admin.js";
function nowIso() {
return new Date().toISOString();
}
/**
* Endpoints consumidos por el frontend (UI / simulador).
* Mantiene exactamente los mismos paths que existían en `index.js`.
*/
export function createSimulatorRouter({ tenantId }) {
const router = express.Router();
const getTenantId = () => tenantId;
/**
* --- SSE endpoint ---
*/
router.get("/stream", (req, res) => {
res.setHeader("Content-Type", "text/event-stream");
res.setHeader("Cache-Control", "no-cache");
res.setHeader("Connection", "keep-alive");
res.flushHeaders?.();
res.write(`event: hello\ndata: ${JSON.stringify({ ts: nowIso() })}\n\n`);
addSseClient(res);
req.on("close", () => {
removeSseClient(res);
res.end();
});
});
/**
* --- UI data endpoints ---
*/
router.post("/sim/send", makeSimSend());
router.get("/conversations", makeGetConversations(getTenantId));
router.get("/conversations/state", makeGetConversationState(getTenantId));
router.delete("/conversations/:chat_id", makeDeleteConversation(getTenantId));
router.post("/conversations/:chat_id/retry-last", makeRetryLast(getTenantId));
router.get("/messages", makeListMessages(getTenantId));
router.get("/products", makeListProducts(getTenantId));
router.get("/products/search", makeSearchProducts(getTenantId));
router.get("/products/:id", makeGetProduct(getTenantId));
router.post("/products/sync", makeSyncProducts(getTenantId));
router.get("/aliases", makeListAliases(getTenantId));
router.post("/aliases", makeCreateAlias(getTenantId));
router.put("/aliases/:alias", makeUpdateAlias(getTenantId));
router.delete("/aliases/:alias", makeDeleteAlias(getTenantId));
router.get("/recommendations", makeListRecommendations(getTenantId));
router.get("/recommendations/:id", makeGetRecommendation(getTenantId));
router.post("/recommendations", makeCreateRecommendation(getTenantId));
router.put("/recommendations/:id", makeUpdateRecommendation(getTenantId));
router.delete("/recommendations/:id", makeDeleteRecommendation(getTenantId));
router.get("/users", makeListUsers(getTenantId));
router.delete("/users/:chat_id", makeDeleteUser(getTenantId));
router.get("/runs", makeListRuns(getTenantId));
router.get("/runs/:run_id", makeGetRunById(getTenantId));
return router;
}