# Listar Entregas

En Persat, se pueden listar todas las entregas, o las que corresponden a un cliente particular. La consulta a realizar para ambos casos se define aquí.

{% hint style="info" %}
A diferencia de lo que ocurre en otros módulos, y dada la gran cantidad de datos que se pueden obtener de esta consulta, la misma se encuentra optimizada, y la paginación no está basada en "offset" si no en "cursor" [cursor-based pagination](https://uxdesign.cc/why-facebook-says-cursor-pagination-is-the-greatest-d6b98d86b6c0)
{% endhint %}

<mark style="color:blue;">`GET`</mark> `https://api.persat.com.ar/v1/deliveries`

#### Query Parameters

<table><thead><tr><th width="134">Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>limit<mark style="color:red;">*</mark></td><td>number</td><td>Mismo concepto de SQL para la paginación. Max: 100. Min: 1.</td></tr><tr><td>uid_client</td><td>String</td><td>Identificador del cliente, en caso de querer obtener las entregas de este cliente particular</td></tr><tr><td>next</td><td>number</td><td>cursor para la próxima página</td></tr></tbody></table>

#### Headers

| Name                                            | Type   | Description     |
| ----------------------------------------------- | ------ | --------------- |
| Authorization<mark style="color:red;">\*</mark> | String | Bearer API\_KEY |

{% tabs %}
{% tab title="200: OK La consulta se ejecutó con éxito" %}

```json
{
	"success": true,
	"paging": {
		"total": 12,
		"next": 1679422048274
	},
	"data": [{
		"_id": "WMGV40852",
		"state": "ASSIGNED",
		"created": "2023-03-21T18:07:28.274Z",
		"labels_ids": [],
		"due_date": "2023-03-21T00:00:00.000Z",
		"client": {
			"id": 46300,
			"name": "Ferretería José Hnos.",
			"uid_client": "C0203210950"
		},
		"delivery_data": {
			... // Datos de la entrega
		},
		"assignation_info": {
			... // Datos de la asignación
		}
	}, { ... } 	// Siguiente entrega
	]
}
```

{% endtab %}

{% tab title="404: Not Found El cliente no existe" %}

```json
{
    "success": false,
    "error": {
        "status": 404,
        "type": "NOT_FOUND",
        "userMessage": "No se encontro un cliente con este uid_client"
    }
}
```

{% endtab %}

{% tab title="400: Bad Request Error en alguno de los campos enviados. userMessage contiene informacipon adicional." %}

```javascript
{
    "success": false,
    "error": {
        "status": 400,
        "type": "BAD_REQUEST",
        "userMessage": "'limit' es un campo obligatorio y no puede ser mayor a 100"
    }
}
```

{% endtab %}
{% endtabs %}

## Como obtener el listado completo de entregas

Para obtener el listado completo de entregas, hay que hacer una primer consulta sin el parámetro **next**, y luego sucesivas consultas usando el valor obtenido de **next** de la consulta anterior

### **Consulta Inicial**

```
https://api.persat.com.ar/v1/deliveries?limit=2
```

{% hint style="info" %}
En este ejemplo no filtramos por cliente, pero en caso de hacerlo aplica de la misma forma.
{% endhint %}

**Resultado de la consulta**

Más allá de los datos obtenidos en **data,** lo importante es entender como hacer la siguiente consulta.

```json
{
	"success": true,
	"paging": {
		"total": 122,
		"next": 1679422048274
	},
	"data": [{ delivery_1, delivery_2 }]	// Array con los datos de cada entrega	
}
```

**paging.total:** Es un número que indica la cantidad de Entregas a devolver. Con lo cual para el caso del ejemplo, debería haber devuelto 122 entregas, pero nos entregó 2 (delivery\_1 y delivery\_2). Esto es porque el limit era 2. Entonces nos quedan por recibir otras 120 entregas.

**paging.next:** Es un número que debemos enviar en la próxima consulta para obtener las siguientes entregas

**data:** Es un array de Objetos JSON, en donde cada item es una entrega. Los campos de ese objeto son los mismos que si hicieramos la consulta en [Obtener Entrega](/modulos/gestion-de-entregas/obtener-entrega.md). Las entregas recibidas vienen ordenadas por fecha de creación "created" de forma descendente. Con lo cual la primer entrega recibida (delivery\_1) es la que fue creada recientemente.

### **Siguientes consultas**

Usamos el next recibido en la consulta anterior

```
https://api.persat.com.ar/v1/deliveries?limit=2&next=1679422048274
```

```json
{
	"success": true,
	"paging": {
		"total": 120,
		"next": 1679422049876
	},
	"data": [{ delivery_3, delivery_4 }]	// Array con los datos de cada entrega	
}
```

Ahora recibimos dos nuevas entregas (porque el limit es 2), y obtenemos un nuevo next.

### Como saber si hay mas datos para obtener

Si recibimos next en null, significa que hemos llegado al final de la lista.

```json
{
	"success": true,
	"paging": {
		"total": 0,
		"next": null
	},
	"data": []
}
```

{% hint style="danger" %}
No utilizar total == 0 para definir el final de la lista. Ya que <mark style="color:red;">**total**</mark> puede tener un valor entero que sea igual al tamaño del array data\[].

Por ejemplo, otro final de lista podría ser:

{ "success": true, "paging": { "total": 3, "next": null }, "data": \[delivery\_1, delivery\_2, delivery\_3] }
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.api.persat.com.ar/modulos/gestion-de-entregas/listar-entregas.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
