Volver a la wiki

Endpoint: POST /api/racks/visio/confirm — Confirmar e importar stencils Visio

Descripción

Endpoint de confirmación que persiste los stencils importados en la base de datos de la organización del usuario autenticado, con categorías individuales por shape (desde v1.53.0).

Ruta: POST /api/racks/visio/confirm
Auth: Django user + Organization RLS
Content-Type: application/json

Contrato de solicitud (v1.53.0+)

{
  "session_id": "uuid-string",
  "masters": [
    {
      "name": "Switch 48-port",
      "image_path": "path/to/preview.svg",
      "u_height": 1,
      "category": "Cisco"
    },
    {
      "name": "PDU",
      "image_path": "path/to/preview.svg",
      "u_height": 2,
      "category": "APC"
    }
  ]
}

Cambio v1.52.0 → v1.53.0:

Contrato de respuesta (v1.53.0+)

{
  "success": true,
  "imported": [
    {
      "id": 12345,
      "name": "Switch 48-port",
      "category": "Cisco",
      "image_path": "stencils/cisco/switch.svg",
      "u_height": 1,
      "half_width": false
    },
    {
      "id": 12346,
      "name": "PDU",
      "category": "APC",
      "image_path": "stencils/apc/pdu.svg",
      "u_height": 2,
      "half_width": true
    }
  ]
}

Campos de respuesta por item:

Lógica de negocio

Flujo de categorías

  1. Frontend envía category por master (entrada de usuario o global como fallback).
  2. Backend crea Stencil con esa category exacta.
  3. Respuesta incluye category en cada item → frontend agrupa por categoría y crea carpetas sin recargar.

Seguridad

Límites

Integración con modelos

Modelo Stencil

class Stencil(models.Model):
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    category = models.CharField(max_length=255, blank=True, default='')
    image = models.ImageField(upload_to='stencils/')
    svg_content = models.TextField(blank=True)
    u_height = models.IntegerField(default=1)
    half_width = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)

El endpoint mapea cada master a un Stencil con:

Manejo de errores

CódigoEscenario
200✅ Importación exitosa.
400Malformed JSON, sesión no encontrada, masters vacía.
401No autenticado.
403Organization RLS violation (no pertenece a la org).
500Error en creación de Stencil (DB, FS).

Cambios en v1.53.0

Véase también

Subir