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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions