# API de Actualización de Inventario (Market Data)

## Descripción General

Hay dos endpoints para actualizar datos de inventario en menta tech:

1. **PUT a nivel de evento**: Para actualizar el inventario completo de un evento
2. **PUT a nivel granular**: Para actualizar inventario en lotes (por ticketOption, priceType, o combinaciones)

Ambos endpoints requieren autenticación y el `externalReferenceId` del evento.

---

## Endpoint 1: Actualización de Evento Completo

### Request

```
PUT /v1/marketdata/events/{externalReferenceId}/inventory?showId={showId}
```

**Headers requeridos:**
- `Authorization: {apiKey}`
- `Content-Type: application/json`

**Path parameters:**
- `externalReferenceId` (requerido): Identificador externo del evento

**Query parameters:**
- `showId` (opcional): Si el evento tiene múltiples shows, especifica cuál actualizar. Si el evento tiene solo un show, no es necesario.

### Body

```json
{
  "capacity": 5000,
  "releasedTickets": 5000,
  "reservedSpace": 100,
  "soldOut": false,
  "soldPercentage": 75
}
```

Todos los campos son opcionales. Solo envía los que quieres actualizar.

### Ejemplo

```bash
curl -X PUT "https://api.mentatech.io/v1/marketdata/events/EVENT_2024_001/inventory?showId=show123" \
  -H "Authorization: apiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "capacity": 5000,
    "releasedTickets": 5000,
    "reservedSpace": 100,
    "soldOut": false,
    "soldPercentage": 75
  }'
```

### Response

La API retorna el evento actualizado con todos sus datos.

---

## Endpoint 2: Actualización en Lotes (Granular)

Este endpoint te permite actualizar inventario para múltiples categorías, tipos de precio, o combinaciones en una sola llamada. **Útil cuando tienes múltiples shows y cada uno puede tener items diferentes.**

### Request

```
PUT /v1/marketdata/events/{externalReferenceId}/inventory/details
```

**Headers requeridos:**
- `Authorization: {apiKey}`
- `Content-Type: application/json`

**Path parameters:**
- `externalReferenceId` (requerido): Identificador externo del evento

### Body

El body es un array de items. Cada item debe incluir un `showId` y puede ser de tres tipos:

```json
[
    {
      "showId": "show123",
      "ticketOptionId": "zone_a",
      "inventory": {
        "releasedTickets": 1000,
        "reservedSpace": 50,
        "soldOut": false,
        "soldPercentage": 80
      }
    },
    {
      "showId": "show123",
      "priceTypeId": "early_bird",
      "inventory": {
        "releasedTickets": 200,
        "reservedSpace": 10,
        "soldOut": false,
        "soldPercentage": 90
      }
    },
    {
      "showId": "show456",
      "ticketOptionId": "zone_b",
      "priceTypeId": "regular",
      "inventory": {
        "releasedTickets": 500,
        "reservedSpace": 25,
        "soldOut": false,
        "soldPercentage": 70
      }
    }
  ]
```

### Tipos de Items

1. **Solo ticketOptionId**: Actualiza el inventario de una categoría de tickets
   ```json
   {
     "showId": "show123",
     "ticketOptionId": "zone_a",
     "inventory": { ... }
   }
   ```

2. **Solo priceTypeId**: Actualiza el inventario de un tipo de precio
   ```json
   {
     "showId": "show123",
     "priceTypeId": "early_bird",
     "inventory": { ... }
   }
   ```

3. **ticketOptionId + priceTypeId**: Actualiza la combinación de categoría + tipo de precio
   ```json
   {
     "showId": "show123",
     "ticketOptionId": "zone_a",
     "priceTypeId": "early_bird",
     "inventory": { ... }
   }
   ```

### Ejemplo Completo

```bash
curl -X PUT "https://api.mentatech.io/v1/marketdata/events/EVENT_2024_001/inventory/details" \
  -H "Authorization: apiKey" \
  -H "Content-Type: application/json" \
  -d '[
        {
          "showId": "show123",
          "ticketOptionId": "zone_a",
          "inventory": {
            "releasedTickets": 1000,
            "reservedSpace": 50,
            "soldOut": false,
            "soldPercentage": 80
          }
        },
        {
          "showId": "show456",
          "ticketOptionId": "zone_b",
          "priceTypeId": "early_bird",
          "inventory": {
            "releasedTickets": 500,
            "reservedSpace": 25,
            "soldOut": false,
            "soldPercentage": 70
          }
        }
    ]'
```


---

## Campos del Objeto Inventory

Estos son los campos que puedes actualizar en ambos endpoints:

| Campo | Tipo | Requerido | Descripción |
|-------|------|-----------|-------------|
| `capacity` | number | No | Capacidad total de tickets (solo en actualización de evento) |
| `releasedTickets` | number | No | Tickets liberados para la venta |
| `reservedSpace` | number | No | Tickets reservados (no disponibles para compra) |
| `soldOut` | boolean | No | Indica si la categoría/evento está sold out |
| `soldPercentage` | number | No | Porcentaje de venta (0-100) |

Todos los campos son **opcionales**. Solo envía los que necesitas actualizar.

---

## Casos de Uso

### Caso 1: Actualizar todo el evento a la vez sin especificación de datos granulares.

Si tienes un evento simple con un único show:

```bash
curl -X PUT "https://api.mentatech.io/v1/marketdata/events/EVENT_001/inventory" \
  -H "Authorization: apiKey" \
  -d '{
    "releasedTickets": 5000,
    "reservedSpace": 100,
    "soldPercentage": 75,
    "soldOut": false
  }'
```

### Caso 2: Actualizar solo una categoría de tickets

Si tienes categorías diferentes (General Admission, VIP, etc.):

```bash
curl -X PUT "https://api.mentatech.io/v1/marketdata/events/EVENT_001/inventory/details" \
  -H "Authorization: apiKey" \
  -d '[
      {
        "showId": "show_main",
        "ticketOptionId": "general_admission",
        "inventory": {
          "releasedTickets": 5000,
          "reservedSpace": 100,
          "soldPercentage": 75,
          "soldOut": false
        }
      }
    ]'
```

### Caso 3: Actualizar múltiples shows y categorías

```bash
curl -X PUT "https://api.mentatech.io/v1/marketdata/events/EVENT_001/inventory/details" \
  -H "Authorization: apiKey" \
  -d '[
      {
        "showId": "show_1",
        "ticketOptionId": "vip",
        "inventory": {
          "releasedTickets": 5000,
          "reservedSpace": 100,
          "soldPercentage": 75,
          "soldOut": false
        }
      },
      {
        "showId": "show_1",
        "ticketOptionId": "general",
        "inventory": {
          "releasedTickets": 5000,
          "reservedSpace": 100,
          "soldPercentage": 75,
          "soldOut": false
        }
      },
      {
        "showId": "show_2",
        "ticketOptionId": "vip",
        "inventory": {
          "releasedTickets": 5000,
          "reservedSpace": 100,
          "soldPercentage": 75,
          "soldOut": false
        }
      }
    ]'
```

---

## Notas Importantes

- **Autenticación requerida**: Todos los requests deben incluir un token válido en el header `Authorization`
- **externalReferenceId**: Usa el identificador del evento en tu sistema.
- **showId en lotes**: Cada item del lote debe especificar el `showId` al que pertenece
- **Campos opcionales**: No necesitas enviar todos los campos; solo los que quieres actualizar
