Skip to content

feat: comandos superadmin (ft admin) para onboarding enterprise white-label #23

Description

@LucasLeguizamo

feat: comandos superadmin para onboarding enterprise white-label

Contexto

free-admin ya tiene el tier Enterprise white-label (PR AppFreeticket/free-admin#230): plantillas 100% custom por Workspace.web_template (registry ENTERPRISE_TEMPLATES), dominios propios vía env ENTERPRISE_CUSTOM_DOMAINS, y plan enterprise asignado manualmente por un SUPER_ADMIN. Hoy TODO el onboarding es manual en el dashboard (/dashboard/master/clientes/[id]). Queremos que la mayor parte se pueda ejecutar desde el CLI si el usuario es superadmin, para que un agente (skill freeticket-enterprise, issue hermano en agent-skills) lo orqueste con un solo prompt.

Prerrequisitos en free-admin (bloqueantes, van primero)

El admin API (/api/admin, auth por AdminToken, contrato en /api/admin/openapi.json) hoy solo expone en PATCH /workspaces/{id}: name, slug, type, isPublished. Falta:

  1. Extender PATCH /api/admin/workspaces/{id} con:
    • webTemplate (string | null) → workspace.web_template
    • customDomain (string | null) → workspace.custom_domain
    • customDomainVerifiedAt (datetime | null) → workspace.custom_domain_verified_at
  2. Nuevo POST /api/admin/workspaces/{id}/plan — asignación manual de plan (reusar la lógica de assignPlanManually de /dashboard/master/clientes): si el workspace tenía suscripción Stripe activa, cancelarla antes de reasignar; si la cancelación falla, abortar sin tocar la fila. Body: { planSlug: "enterprise" | "spark" | "star" | "icon" }.
  3. Registrar ambos en el OpenAPI (registerRoute) + audit log (recordAudit), como el resto de rutas admin.

Comandos CLI propuestos

Namespace ft admin (auth por AdminToken, separado de la API key de workspace):

ft admin login                                  # guarda AdminToken
ft admin workspaces get <slug|id>               # incluye webTemplate, customDomain, plan
ft admin workspaces set <slug|id> --web-template <clave>
ft admin workspaces set <slug|id> --custom-domain <dominio> [--verified]
ft admin plans assign <slug|id> enterprise      # POST /plan, muestra warning de Stripe
ft admin enterprise checklist <slug|id>         # imprime checklist de despliegue

Limitación conocida (documentar en el CLI, no resolver aquí)

El alta REAL de un dominio custom requiere hoy: editar la env ENTERPRISE_CUSTOM_DOMAINS en Vercel + agregar el dominio al proyecto + redeploy (serverActions.allowedOrigins se evalúa en build). ft admin workspaces set --custom-domain solo persiste la columna administrativa; el comando enterprise checklist debe imprimir los pasos manuales restantes. Cuando free-admin implemente F3b (resolución DB-backed de dominios), el checklist se reduce.

Criterios de aceptación

  • Endpoints nuevos en free-admin con OpenAPI + audit + tests
  • ft admin plans assign y ft admin workspaces set --web-template funcionan end-to-end contra un workspace de prueba
  • ft admin enterprise checklist imprime el runbook completo (env, dominio Vercel, redeploy, verificación)
  • Salida --json en todos los comandos (consumo por agentes/MCP)

Relacionado: AppFreeticket/agent-skills (skill freeticket-enterprise), AppFreeticket/free-admin PR #230.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions