feat(umind): vincula tenants a clientes y agrega planes con precios
Base para que el cliente administre uMind desde su portal y para el cobro por consumo. Todavía no cambia nada del comportamiento actual. - UmindTenant gana ClienteID (punteros, sin not null: los tenants creados antes del portal quedan sin asignar y el ALTER TABLE no falla sobre datos existentes) y PlanID. - GetUmindTenantsByClientes es fail-closed: sin clientes, no ve nada. - UmindPlan define el máximo de agentes y los precios por 1k tokens, por imagen OCR, por transcripción y la mensualidad, más un tope de consumo que solo avisa. CRUD para staff en /app/umind-planes. - El modelo va en AMBAS listas de AutoMigrate (main.go y migrations), no repetir el error de agregarlo solo en una. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
84506a98e2
commit
c69b904b03
@@ -383,6 +383,12 @@ func UserRoutes(app fiber.Router) {
|
||||
protected.Get("/umind/conexiones/callback/:proveedor", controllers.UmindOAuthCallbackHandler)
|
||||
protected.Delete("/umind/conexiones/:id", middlewares.SoloAdmin, controllers.DeleteUmindConexionHandler)
|
||||
protected.Get("/umind/eventos", controllers.GetUmindEventosHandler)
|
||||
// Planes: definen el límite de agentes y los precios por consumo. Solo staff.
|
||||
protected.Get("/umind-planes", middlewares.MenuMiddleware, controllers.UmindPlanesPage)
|
||||
protected.Get("/umind-planes/list", controllers.GetUmindPlanesHandler)
|
||||
protected.Post("/umind-planes", middlewares.SoloAdmin, controllers.CreateUmindPlanHandler)
|
||||
protected.Put("/umind-planes/:id", middlewares.SoloAdmin, controllers.UpdateUmindPlanHandler)
|
||||
protected.Delete("/umind-planes/:id", middlewares.SoloAdmin, controllers.DeleteUmindPlanHandler)
|
||||
|
||||
// ─── uMind Orquestador (SPA Vue) ────────────────────────────────────────────
|
||||
// Estáticos reales (JS/CSS del build) ya los sirve el Static("/") general
|
||||
|
||||
Reference in New Issue
Block a user