---
# System prepended metadata

title: Introducción

---

# Introducción
Presentamos documentación oficial de las APIs ComeS con la finalidad de ser usada por el equipo técnico de la empresa y otros colaboradores interesados en el desarrollo de servicios que requieran conexión a los datos manejados. 

# Respuestas API


[ToC] 


## :rocket: API_STORE

###  User
* ####  Get User by Email
```https
  GET /api/v1/user/${user_email}
```

| Parameter | Type     | Description                |
| :-------- | :------- | :------------------------- |
| `user_email` | `string` | **Requerido**. Email de usuario a buscar |

```json=
// Response Status 200 Ok
{
    "user": {
	"email": "test.comes@gmail.com",
	"name": "Test Arket",
	"auth_id": "auth_id_testing",
	"role": {
	    "role": "administrador"
	},
	"store": {
            "ID_store": "1",
            "name": "Arket Emporio Vegano",
            "bussines_name": "FRANK MARCELO KETTERER TORRES",
            "phone": "56941063903",
            "rut": "12918110-9",
            "store_direction": [
                {
                    "ID_store_direction": "cl3bqhcnj0000qwv1tewn0ywi",
                    "country": null,
                    "code_country": "CHL",
                    "region": "Region Metropolitana de Santiago",
                    "sub_region": "Santiago",
                    "municipality": "Santiago",
                    "street": "Paseo Huerfanos, Santiago",
                    "number": "18",
                    "label": "Paseo Huerfanos, Santiago, Region Metropolitana de Santiago, Chile",
                    "local_or_office": "Local 1",
                    "reference": "",
                    "latitude": "-18.4727991",
                    "longitude": "-70.29000649"
                }…
            ]
        }
    }
}
```
Si el usuario indicado no existe:
```json=
// Response Status 400 Bad Request
{
    "message": "Usuario no registrado",
    "emailSearched": "dont.exist@gmail.com"
}
```
* #### Post User
```https
  POST /api/v1/user
```
| Body | Type     | Description                |
| :-------- | :------- | :------------------------- |
| `data` | `object` | **Requerido**. Contiende objeto `user`, `store`, `storeCategory` y `producer`


El objeto `user` contiene las siguiente propiedades
| User          | Type         | Description                |
| :--------     | :-------     | :------------------------- |
|email          | `string`     | **Requerido**. Email del usuario|
|name           | `string`     | **Requerido**. Nombre del usuario|
|ID_role        | `string`     | Por defecto setear en 2 (?)|
|auth_id        | `string`     | ID entregado por `AWS cognito`|

El objeto `store` contiene las siguientes propiedades
| Store              | Type         | Description                |
| :--------          | :-------     | :------------------------- | 
|rut                 |`string`      |Rut tienda o persona natural|
|name                |`string`      |Nombre tienda o persona natural|
|bussines_name       |`string`      |Razon social o persona natual|
|phone               |`string`      |Numero telefono|
|email               |`string`      |Email de tienda o persona natual |
|contact_name        |`string`      |Nombre contacto |
|isCompany           |`boolean`     |True = es tienda o False = es persona natural|
|isActive            |`boolean`     |True = activo o False = inactivo|
|isDeleted           |`boolean`     |True = Eliminado o False = No eliminado |
|created_at          |`string`      |Fecha de creacion |
|modified_at         |`string`      |Fecha de modificacion|
|update_by_user      |`string`      |ID usuario quien modifico|

La propiedad `storeCategory` es un arreglo de objetos que contiene el `ID_categories_store` de la nueva store. **Esta propiedad no es requerida**, si no se especifica, no se agregara el registro en `store_category`

| StoreCategory         | type         | Description |
| --------              | --------     | -------- |
| ID_categories_store   |`string`      | ID de categorias de tiendas     |


```json=
// Request body
{
    "data": {
        "user": {
            "email": "correo.prueba@gmail.com",
            "name": "jhon Doe",
            "ID_role": "2",
            "auth_id": "f975e792-de52-4f7f-b615-aaaaaaaaaaaa"
        },
        "store": {
            "rut": "191639804-4",
            "name": "jhon Doe",
            "bussines_name": "Miel Gibson",
            "phone": "56912345678",
            "email": "mielgibson@gmail.com",
            "contact_name": "jhon Doe",
            "isCompany": true,
            "isActive": false,
            "isDeleted": false,
            "created_at": "2022-05-31T15:59:55.735Z",
            "modified_at": "2022-05-31T15:59:55.735Z",
            "update_by_user": "1"
        },
        "storeCategory": [
            { "ID_categories_store": "5" },
            { "ID_categories_store": "6" },
            { "ID_categories_store": "4" }
        ],
        "producer": {}
    }
}
```
```json=
// Response Status 201
{
    "message": "Usuario creado con exito",
    "user": {
        "ID_user": "cl3x73wrz0014isv1oqnfr4jr",
        "email": "nuevo.usuario@gmail.com",
        "name": "Nombre del usuario",
        "auth_id": "f975e792-de52-4f7f-b615-aaaaaaaaaaaa", // entregado por cognito
        "ID_role": "2",
        "ID_store": "cl3x73wrz0015isv1k0cujt74", // id de la nueva tienda
        "ID_producer": null // por ahora solo usuarios para tienda o persona natual.
	}
}
```
Si no se especifican datos de tienda (`store`)
```json=
// Response Status 201
{
    "message": "Usuario creado con exito",
    "user": {
        "ID_user": "cl3x853b800022kv1fo6vd61s",
        "email": "nuevo.usuario@gmail.com",
        "name": "Nombre del usuario",
        "auth_id": "f975e792-de52-4f7f-b615-aaaaaaaaaaaa",
        "ID_role": "2",
        "ID_store": null, // ← no se agrega la store
        "ID_producer": null
    }
}
```
Si no se indican los datos requeridos o los unicos ya existen en BD
```json=
// Response Status 403 Forbidden
{
    "error": [
        {
            "msg": "Campo email es requerido",
            "param": "data.user.email",
            "location": "body"
        },
        {
            "msg": "Campo email no puede ser vacio",
            "param": "data.user.email",
            "location": "body"
        },
        {
            "msg": "Campo email debe ser un texto",
            "param": "data.user.email",
            "location": "body"
        },
        {
            "value": "correo.prueba@gmail.com",
            "msg": "Email de usuario ya existe. Email debe ser unico",
            "param": "data.user.email",
            "location": "body"
        },
        {
            "msg": "Campo nombre usuario es requerido",
            "param": "data.user.name",
            "location": "body"
        },
        {
            "msg": "Campo nombre usuario no puede ser vacio",
            "param": "data.user.name",
            "location": "body"
        },
        {
            "msg": "Campo nombre usuario debe ser un texto",
            "param": "data.user.name",
            "location": "body"
        },
        {
            "value": "77254529-0",
            "msg": "No se ha podido ingresar la tienda. Tienda rut: 77254529-0 ya existe",
            "param": "data.store.rut",
            "location": "body"
        }
    ]
}
```

### Store
* #### Post Store
```http
 POST /api/v1/stores
```
| Body          |Type          | Description                       |
| :--------     | :-------     | :-------------------------------- |
|rut                 |`string`      |**Requerido**. Rut tienda o persona natural|
|name                |`string`      |**Requerido**. Nombre tienda o persona natural|
|bussines_name       |`string`      |**Requerido**. Razon social o persona natual|
|phone               |`string`      |**Requerido**. Numero telefono|
|email               |`string`      |**Requerido**. Email de tienda o persona natual |
|contact_name        |`string`      |Nombre contacto |
|work_position       |`string`      |Cargo (?)|
|isCompany           |`boolean`     |**Requerido**. True = es tienda o False = es persona natural|
|isActive            |`boolean`     |**Requerido**. True = activo o False = inactivo|
|isDeleted           |`boolean`     |**Requerido**. True = Eliminado o False = No eliminado |
|created_at          |`string`      |**Requerido**. Fecha de creacion |
|modified_at         |`string`      |**Requerido**. Fecha de modificacion|
|update_by_user      |`string`      |ID usuario quien modifico|

```json=
// Request body
{
    "rut": "11111111-4",
    "name": "Nombre Tienda", // o nombre persona natural
    "bussines_name": "Razon social",// o mismo nombre si es persona natual
    "phone": "56912345678",
    "email": "mielgibson@gmail.com",
    "contact_name": "nombre contacto",
    "isCompany": true,
    "isActive": false,
    "isDeleted": false,
    "created_at": "2022-05-31T15:59:55.735Z",
    "modified_at": "2022-05-31T15:59:55.735Z",
    "update_by_user": "1"
}
```
```json=
// Response Status 201 Ok
{
    "message": "Se ha ingresado la nueva tienda",
    "store": {
        "ID_store": "cl3ujjk7t0000r8v1e8ojwtl6",
        "rut": "11111111-4",
        "name": "Nombre Tienda",
        "bussines_name": "Razon social",
        "phone": "56912345678",
        "email": "mielgibson@gmail.com",
        "contact_name": "nombre contacto",
        "work_position": null,
        "isActive": false,
        "isDeleted": false,
        "isCompany": true,
        "created_at": "2022-05-31T15:59:55.735Z",
        "modified_at": "2022-05-31T15:59:55.735Z",
        "update_by_user": "1"
    }
}
```
Si no se indican datos requeridos
```json=
// Response Status 401 Forbidden
{
    "error": [
        {
    	    "msg": "Campo rut es requerido",
            "param": "rut",
            "location": "body"
        },
        {
            "msg": "Campo rut no puede ser vacio",
            "param": "rut",
            "location": "body"
        },
        {
            "msg": "Campo rut debe ser un texto",
            "param": "rut",
            "location": "body"
        },
        {
            "msg": "Campo nombre es requerido",
            "param": "name",
            "location": "body"
        },
        {
            "msg": "Campo nombre no puede ser vacio",
            "param": "name",
            "location": "body"
        },
        {
            "msg": "Campo nombre debe ser un texto",
            "param": "name",
            "location": "body"
        },
        {
            "msg": "Campo razon social es requerido",
            "param": "bussines_name",
            "location": "body"
        }…
    ]
}

```

* #### Get Store

```http
  GET /api/v1/stores
```

| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| none     | none | none |

```json=
// Response Status 200 Ok
{
    "data": [
        {
            "ID_store": "1",
            "rut": "12918110-9",
            "name": "Arket Emporio Vegano",
            "bussines_name": "FRANK MARCELO KETTERER TORRES",
            "phone": "56941063903",
            "email": "fketteret@gmail.com",
            "contact_name": null,
            "work_position": null,
            "isActive": true,
            "isDeleted": false,
            "created_at": "2022-04-27T15:59:55.735Z",
            "modified_at": "2022-04-27T15:59:55.735Z",
            "update_by_user": "1"
        },
        {
            "ID_store": "10",
            "rut": "77254529-0",
            "name": "Aloha poke bowl",
            "bussines_name": "ALOHA POKE BOWL SPA",
            "phone": "56944313614",
            "email": "carlamardonesmunoz@gmail.com",
            "contact_name": null,
            "work_position": null,
            "isActive": true,
            "isDeleted": false,
            "created_at": "2022-04-27T15:59:55.735Z",
            "modified_at": "2022-04-27T15:59:55.735Z",
            "update_by_user": "1"
        }…
    ]
}
```
* #### Get Store By ID store
```http
  GET /api/v1/stores/${ID_store}
```
| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| ID_store     | string | ID de tienda a buscar |

```json=
// Response Status 200 Ok
{
    "store": {
        "ID_store": "1",
        "rut": "12918110-9",
        "name": "Arket Emporio Vegano",
        "bussines_name": "FRANK MARCELO KETTERER TORRES",
        "phone": "56911111111",
        "email": "fketteret@gmail.com",
        "contact_name": null,
        "work_position": null,
        "isActive": true,
        "isDeleted": false,
        "created_at": "2022-04-27T15:59:55.735Z",
        "modified_at": "2022-04-27T15:59:55.735Z",
        "update_by_user": "1"
    }
}
```
Si la el ID tienda indicada no existe:
```json=
// Response Status XXX
{
    "message": "No se ha encontrado la tienda",
    "data": null
}
```

* #### Get Store by Rut
```http
  GET /api/v1/stores/rut/${rut}
```
| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| rut       | string   | Rut de tienda a buscar            |
```json=
// Response Status 200 Ok
{
    "store": {
        "ID_store": "21",
        "rut": "77251286-4",
        "name": "Kuy",
        "bussines_name": "COMERCIAL SANTA PAULA LIMITADA",
        "phone": "56964739007",
        "email": "perillon3@hotmail.com",
        "contact_name": null,
        "work_position": null,
        "isActive": true,
        "isDeleted": false,
        "isCompany": true,
        "created_at": "2022-04-27T15:59:55.735Z",
        "modified_at": "2022-04-27T15:59:55.735Z",
        "update_by_user": "1"
    }
}

```
Si no encuentra tienda devolvera el objeto `store` **null**
```json=
// Response Status 200 Ok
{
    "store": null
}
```
* #### Get Store Ranking
```http
  GET /api/v1/stores/ranking
```
El endpoint puede o no resivir los siguientes `query parameters`:
| Qry Parameter     | Examples     | Description                       |
| :--------         | :-------     | :-------------------------------- |
| `skip`            |`skip=0`                 |omite la cantidad indicada|
| `take`            |`take=40`                |toma la cantidad indicada desde el skip|
| `categories`      |`categories=Frutas, Mermeladas y manjares`   |Nombre de la categoria separados por coma (,)|
| `region`          |`region=Región Del Bio Bio`|nombre de la region (como este en BD)|
|`q`|`q=comes`|valor ingresado en la barra de busqueda|

Devuelve las tiendas no particulares con minimo de una compra en los ultimos 60 dias ordenadas por compras a mas productores

```json=
// Response Status 200 Ok
{
    "ranking": [
        {
            "ID_store": "25",
            "rut": "76683371-3",
            "name": "ComeS Emporio",
            "bussines_name": "ComeS SPA",
            "phone": "56939579093",
            "email": "finanzas@comeschile.cl",
            "web": null,
            "contact_name": null,
            "store_image": [],
            "social_network": [],
            "store_category": [],
            "store_direction": [
                {
                    "ID_store_direction": "cl1xnl17w302730gpc9ikxge71",
                    "country": "Chile",
                    "code_country": "CHL",
                    "region": null,
                    "sub_region": "Los Ángeles",
                    "municipality": "Los Ángeles",
                    "street": "Avenida Almirante La Torre ",
                    "number": "0470",
                    "local_or_office": null,
                    "label": "Avenida almirante la torre  470, Los Ángeles, Chile",
                    "reference": "",
                    "latitude": null,
                    "longitude": null
                }
            ],
            "isActive": true,
            "isDeleted": false,
            "isCompany": true,
            "created_at": "2022-05-02T21:16:09.018Z",
            "modified_at": "2022-05-02T21:16:09.018Z",
            "_countProducer": 4 // Cantidad de productores diferentes
        }
    ],
    "count": 1 // Cantidad de tiendas
}

```
Si no hay tienda en el rankin devolvera el siguiente objeto
```json=
// Response Status 400 Ok
{
    "message": "No hay tiendas disponibles",
    "ranking": [],
}
```

### Store Category
* #### Get Store Category

```http
    GET /api/v1/store/category
```

| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| none     | none | none |

```json=
// Response Status 200 Ok
{
    "storeCategories": [
        {
            "ID_categories_store": "1",
            "category": "Comida rápida ",
            "description": "Ofrece diversas comidas y bebidas para consumo en el establecimiento o delivery, no necesariamente son productos saludables en la carta que ofrecen."
        },
        {
            "ID_categories_store": "2",
            "category": "Minimarket ",
            "description": "Tienda no especializada que no necesariamente tiene a la venta productos saludables."
        },
        {
            "ID_categories_store": "3",
            "category": "Restaurant",
            "description": "Ofrece diversas comidas y bebidas para su consumo en el establecimiento. "
        }…
    ]
}

```

### Store Direction
* #### Post Store Direction

```http
    POST /api/v1/store/direction
```

| Body | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| `code_country`     | `string` | Codigo pais **ISO 3166-1 alfa-3** |
| `region`     | `string` | Region de pais |
| `sub_region`     | `string` | Region secundaria |
| `municipality`     | `string` | Municipalidad |
| `street`     | `string` | Calle |
| `number`     | `string` | Enumeracion |
| `local_or_office`     | `string` | Local o Oficina |
| `label`     | `string` | Direccion concatenenada |
| `reference`     | `string` | Referencia |
| `latitude`     | `double` | Latitud |
| `longitude`     | `double` | Longitud |
| `ID_store`     | `string` | ID tienda |


```json=
// Request body
{
    "code_country": "CHL",
    "region": "Región Metropolitana de Santiago",
    "sub_region": "Santiago",
    "municipality": "Puente Alto",
    "street": "Pasaje Ejemplo",
    "number": "111",
    "local_or_office": "Local 1",
    "label": "Pasaje Ejemplo 1111, Puente Alto, Santiago, Región Metropolitana de Santiago, CHL",
    "reference": "Antepenultima casa del lado derecho",
    "latitude": -33.333333333333333,
    "longitude": -77.77777777777777,
    "ID_store": "2"
}
```
```json=
// Response Status 201 Created
{
    "message": "Direccion de tienda ingresada con exito",
    "storeDirection": {
        "ID_store_direction": "cl3olqor5000960v157ryc1ns",
        "country": "Chile",
        "code_country": "CHL",
        "region": "Región Metropolitana de Santiago",
        "sub_region": "Santiago",
        "municipality": "Puente Alto",
        "street": "Pasaje Ejemplo",
        "number": "111",
        "local_or_office": "Local 1",
        "label": "Pasaje Ejemplo 1111, Puente Alto, Santiago, Región Metropolitana de Santiago, CHL",
        "reference": "Antepenultima casa del lado derecho",
        "latitude": "-33.33333333",
        "longitude": "-77.77777778",
        "ID_store": "2"
    }
}
```

Si la direccion a ingresar ya esta asociada a la tienda:
```json=
// Response Status 400 Bad Request
{
    "message": "Direccion ingresada ya esta registrada",
    "direction": "Pasaje Ejemplo #111, Puente Alto, Santiago"
}
```
* #### Get Store Direction
```http
  GET /api/v1/store/direction
```

| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| none     | none | none |

```json=
{
    "data": [
    {
        "ID_store_direction": "1",
        "country": null,
        "code_country": null,
        "region": null,
        "sub_region": null,
        "municipality": null,
        "street": "San Martín",
        "number": "710",
        "local_or_office": null,
        "label": null,
        "reference": null,
        "latitude": null,
        "longitude": null,
        "ID_store": "1"
    },
    {
        "ID_store_direction": "2",
        "country": null,
        "code_country": null,
        "region": null,
        "sub_region": null,
        "municipality": null,
        "street": "O’higgins",
        "number": "1285",
        "local_or_office": null,
        "label": null,
        "reference": null,
        "latitude": null,
        "longitude": null,
        "ID_store": "2"
        }…
    ]
}
```
* #### Get Store Direction By ID Store
```https
  GET /api/v1/store/direction/${ID_store}
```
| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| ID_store     | string | ID tienda |

```json=
// Response Status 200 Ok
{
    "data": [
        {
            "ID_store_direction": "1",
            "country": null,
            "code_country": null,
            "region": null,
            "sub_region": null,
            "municipality": null,
            "street": "San Martín",
            "number": "710",
            "local_or_office": null,
            "label": null,
            "reference": null,
            "latitude": null,
            "longitude": null,
            "ID_store": "1"
        },
        {
            "ID_store_direction": "cl12b30t200111qph1pfg6clh",
            "country": null,
            "code_country": null,
            "region": null,
            "sub_region": null,
            "municipality": null,
            "street": "Prueba 1",
            "number": "1234",
            "local_or_office": null,
            "label": null,
            "reference": "",
            "latitude": null,
            "longitude": null,
            "ID_store": "1"
        }…
    ]
}
```
Si no se encuentra la direccion de tienda buscada:
```json=
// Response Status XXX Bad Request
{
    "data": [],
    "message": "No se han encontrado direcciones para la tienda indicada"
}
```

* ####  Get Regions
```http
    GET /api/v1/regions
```
| Params | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
|  none		|	none   | none |

```json=
// Response Status 200 Ok

{
  "regions": [
    {
      "ID_store_direction": "1",
      "region": null,
      "sub_region": "Concepción"
    },
    {
      "ID_store_direction": "cl1xxmumk321640gpcwi5seawm",
      "region": "Bío Bío",
      "sub_region": "Concepción"
    },
    {
      "ID_store_direction": "cl3sx2v226503hrpckc9f5i2t",
      "region": "Bíobío",
      "sub_region": "Bío-Bío"
    },
    {
      "ID_store_direction": "cl3u90y4814081hrpcucnjqmes",
      "region": "Maule",
      "sub_region": "Curicó"
    },
    {
      "ID_store_direction": "cl59wtwba416594gepctcl8zt9e",
      "region": "Región Metropolitana de Santiago",
      "sub_region": "Santiago"
    }
  ]
}
```
En caso de no haber regiones disponibles
```json=
// Response Status 400 Bad request
{
    "message": "No se encontraron regiones",
}
```

### Order
* #### Post Order Note
```http
    POST /api/v1/order
```
| Body 					| Type     	| Description                       			|
| :-------- 			| :------- 	| :-------------------------------- 			|
| `number`  			| `int`	   	| Numero de orden				   			|
| `neto`  				| `int`	   	| Neto de la orden				   			|
| `iva`  				| `int`	   	| Iva de la orden				  			|
| `total`  				| `int`	   	| Total							   			|
| `total_order`  		| `int`	   	| 								   			|
| `type_discount`  		| `int`	   	| 								   			|
| `discount`  			| `int`	   	| Descuento						   			|
| `comment_by_order`  	| `string` 	| Comentario para orden			   			|	
| `created_by`          | `string`  | Email de usuario responsable de la creacion   |
| `ID_store`  			| `string` 	| ID tienda						   			|
| `ID_order_status`  	| `string` 	| ID estado de la orden 			   		|
| `ID_store_direction`  | `string` 	| ID direccion asociada a la tienda 		|
| `details`  			| `array`  	| Arreglo de objetos con detalles de orden. El objeto debe contener `qty`, `unit_price`, `sub_total` y `ID_product`|
| `modification_date`	| `datetime`| Fecha de modificacion						|
| `creation_date`		| `datetime`| Fecha de creacion							|

```json=
// Request body
{
  "number": 18,
  "neto": 156723,
  "iva": 29777,
  "total": 186500,
  "total_order": 186500,
  "type_discount": null,
  "discount": null,
  "comment_by_order": "asda",
  "created_by": "usuario.comes@gmail.com",
  "ID_store": "1",
  "ID_order_status": "1",
  "ID_store_direction": "cl12b5d8u00181qph70p3a7vm",
  "details": [
    {
      "qty": 1,
      "unit_price": 83500,
      "sub_total": 83500,
      "ID_product": "1"
    },
    {
      "qty": 1,
      "unit_price": 103000,
      "sub_total": 103000,
      "ID_product": "10"
    }
  ],
  "modification_date": "2022-03-24T20:21:03.120Z",
  "creation_date": "2022-03-24T20:21:03.120Z"
}
```
```json=
// Response Status 201 Created
{
    "message": "Pedido ingresado con exito",
    "orderNote": {
        "ID_order_note": "cl3otxt3j009360v12zre52ct",
        "creation_date": "2022-03-24T20:21:03.000Z",
        "created_by": "user.comes@gmail.com",
        "modification_date": "2022-03-24T20:21:03.000Z",
        "modificated_by": null,
        "number": 18,
        "neto": 156723,
        "iva": 29777,
        "total": 186500,
        "type_discount": null,
        "discount": null,
        "total_order": 186500,
        "comment_by_order": "asda",
        "order_status": {
            "ID_order_status": "1",
            "status": "Recibido"
        },
        "store": {
            "name": "Arket Emporio Vegano",
            "bussines_name": "FRANK MARCELO KETTERER TORRES",
            "rut": "12918110-9",
            "email": "arket@gmail.com",
            "phone": "56941063903"
        },
        "store_direction": {
            "country": null,
            "code_country": null,
            "region": null,
            "sub_region": null,
            "municipality": null,
            "street": "Prueba 2",
            "number": "1234",
            "label": null,
            "local_or_office": null,
            "reference": "",
            "latitude": null,
            "longitude": null
        }
    },
    "detailOrderNotes": [
        {
            "ID_detail_order_note": "cl3otxt52009960v1fthwlz9h",
            "qty": 1,
            "unit_price": 83500,
            "sub_total": 83500,
            "comment_by_product": null,
            "product": {
                "ID_product": "1",
                "sku": null,
                "name": "Kombucha té blanco lavanda beterraga 330 cc",
                "image": [
                    {
                        "ID_image": "1",
                        "file_image": "MKVioleta.jpg",
                        "name_image": "Kombucha Violeta",
                        "alt": "kombucha lavanda"
                    }
                ],
                "producer": {
                    "ID_producer": "1",
                    "brand_name": "Moksha Kombucha"
                }
            },
            "ID_order_note": "cl3otxt3j009360v12zre52ct"
        },
        {
            "ID_detail_order_note": "cl3otxt52010060v1ktz0iv4e",
            "qty": 1,
            "unit_price": 103000,
            "sub_total": 103000,
            "comment_by_product": null,
            "product": {
                "ID_product": "10",
                "sku": null,
                "name": "Agua saborizada maqui berry 500 ml",
                "image": [
                    {
                        "ID_image": "10",
                        "file_image": "aguamaquiberry500.jpg",
                        "name_image": "Agua Saborizada maqui berry 500",
                        "alt": "agua-saborizada-maqui-berry-500-ml"
                    }
                ],
                "producer": {
                    "ID_producer": "2",
                    "brand_name": "SabroChile"
                }
            },
            "ID_order_note": "cl3otxt3j009360v12zre52ct"
        }
    ],
    "detailCount": 2
}
```
Si numero de orden a ingresar ya existe en la base de datos:
```json=
// Response Status 400 Bad Request
{
    "message": "No se ha podido ingresar el pedido. Numero debe ser unico"
}
```


* #### Get Last Order
```http
    GET /api/v1/last/order
```
| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| none 		| none	   | none							   |

```json=
// Response Status 200 Ok
{
    "lastNumber": 18
}
```
* #### Get Order Status
```http
    GET /api/v1/order/status
```
| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| none    		|	none	   |		none						   |

```json=
//Response Status 200 Ok
{
    "data": [
        {
            "ID_order_status": "0",
            "status": "Borrador"
        },
        {
            "ID_order_status": "1",
            "status": "Recibido"
        },
        {
            "ID_order_status": "2",
            "status": "En Preparación"
        },
        {
            "ID_order_status": "3",
            "status": "Completado"
        },
        {
            "ID_order_status": "4",
            "status": "Cancelado"
        }
    ]
}
```
* #### Get Order By ID Order
```http
    GET /api/v1/order/${ID_order}
```
| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
| `ID_order`|`string`  | ID de orden					   |

```json=
// Response Status 200 Ok
{
    "orderNote": {
        "ID_order_note": "cl3m0kqhe0091f0v1btfl0oy0",
        "creation_date": "2022-05-25T20:03:36.000Z",
        "created_by": null,
        "modification_date": "2022-05-25T20:03:36.000Z",
        "modificated_by": "matiasbarrera.comes@gmail.com",
        "number": null,
        "neto": 70168,
        "iva": 13332,
        "total": 83500,
        "type_discount": null,
        "discount": null,
        "total_order": 83500,
        "comment_by_order": "",
        "order_status": {
            "ID_order_status": "0",
            "status": "Borrador"
        },
        "store": {
            "name": "Arket Emporio Vegano",
            "bussines_name": "FRANK MARCELO KETTERER TORRES",
            "rut": "12918110-9",
            "email": "fketteret@gmail.com",
            "phone": "56941063903"
        },
        "store_direction": {
            "country": null,
            "code_country": null,
            "region": null,
            "sub_region": null,
            "municipality": null,
            "street": "San Martín",
            "number": "710",
            "label": null,
            "local_or_office": null,
            "reference": null,
            "latitude": null,
            "longitude": null
        }
    },
    "detailOrderNotes": [
        {
            "ID_detail_order_note": "cl3m0kqjw0097f0v10y18ek2p",
            "qty": 1,
            "unit_price": 83500,
            "sub_total": 83500,
            "comment_by_product": null,
            "product": {
                "ID_product": "90",
                "sku": null,
                "name": "Caja mix  30 unidades de pastas 180-200 g ",
                "image": [],
                "producer": {
                    "ID_producer": "7",
                    "brand_name": "De La Casa"
                }
            },
            "ID_order_note": "cl3m0kqhe0091f0v1btfl0oy0"
        }
    ],
    "productCount": 1
}
```
* #### Get All Order 
```http
    GET /api/v1/order
```
| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
|  none		|	none   |	none						   |

```json=
// Response Status 200 Ok
{
    "data": [
        {
            "orderNote": {
                "ID_order_note": "cl3d7dzu50052n0v1a6t652g5",
                "creation_date": "2022-03-07T18:13:52.000Z",
                "modification_date": "2022-03-07T18:13:52.000Z",
                "number": null,
                "neto": 0,
                "iva": 0,
                "total": 0,
                "type_discount": null,
                "discount": null,
                "total_order": 0,
                "comment_by_order": "esto es un comentario de ejemplo 5",
                "order_status": {
                    "ID_order_status": "1",
                    "status": "Recibido"
				},
                "store": {
                    "name": "Arket Emporio Vegano",
                    "bussines_name": "FRANK MARCELO KETTERER TORRES",
                    "rut": "12918110-9"
                },
                "store_direction": {
                    "country": null,
                    "code_country": null,
                    "region": null,
                    "sub_region": null,
                    "municipality": null,
                    "street": "San Martín",
                    "number": "710",
                    "label": null,
                    "local_or_office": null,
                    "reference": null,
                    "latitude": null,
                    "longitude": null
                }
            },
            "detailOrderNote": []
        },
        {
            "orderNote": {
                "ID_order_note": "cl3c4o8ub0002pgv178d90y3w",
                "creation_date": "2022-05-18T22:00:37.000Z",
                "modification_date": "2022-05-18T22:00:37.000Z",
                "number": null,
                "neto": 70168,
                "iva": 13332,
                "total": 83500,
                "type_discount": null,
                "discount": null,
                "total_order": 83500,
                "comment_by_order": "",
                "order_status": {
                    "ID_order_status": "0",
                    "status": "Borrador"
                },
                "store": {
                    "name": "Arket Emporio Vegano",
                    "bussines_name": "FRANK MARCELO KETTERER TORRES",
                    "rut": "12918110-9"
                },
                "store_direction": {
                    "country": "Chile",
                    "code_country": "CHL",
                    "region": "Región Metropolitana de Santiago",
                    "sub_region": "Santiago",
                    "municipality": "Quilicura",
                    "street": "Pasaje Los Maories",
                    "number": "0171",
                    "label": "Pasaje Los Maories 0171, Quilicura, Santiago, Región Metropolitana de Santiago, 8700000, CHL",
                    "local_or_office": "Casa",
                    "reference": "Casa celeste",
                    "latitude": "-33.36060999",
                    "longitude": "-70.72049998"
                }
            },
            "detailOrderNote": []
        }…
    ]
}
```
* #### Update status order note
```http
    PATCH /api/v1/order/{ID_order_note}
```
| Parameter | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
|  ID_order_note		|	`string`   |	none						   |

| Body | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
|  ID_order_status		|	`string`   | 	ID del nuevo estado					   |
```json=
// Request 
// PATCH: /api/v1/order/cl3c5uvo30124lgv15tzih61q
// BODY:
{
  "ID_order_status": "2",
  "modificated_by" : "usuario.comes@gmail.com"
}
```

```json=
// Response status 200 Ok
{
  "message": "Estado de la orden ID: cl3c5uvo30124lgv15tzih61q actualizada",
  "newStatus": {
    "ID_order_status": "2",
    "status": "En Preparación"
  },
  "updOrderNote": {
    "ID_order_note": "cl3c5uvo30124lgv15tzih61q",
    "number": null,
    "creation_date": "2022-03-07T18:13:52.000Z",
    "created_by": null,
    "modification_date": "2022-08-04T14:51:03.000Z",
    "modificated_by": "usuario.comes@gmail.com"
  }
}
```

Si no existe el estado en la BD
```json=
// Request
// PATCH /api/v1/order/cl3c5uvo30124lgv15tzih61q
// BODY:
{
  "ID_order_status": "6",
  "modificated_by" : "usuario.comes@gmail"
}
```
```json=
// Response status 400 Bad Request
{
  "message": "No se ha podido actualizar el estado de la orden ID: cl3c5uvo30124lgv15tzih61q",
  "error": "Estado de orden con ID: 6 no existe",
  "orderStatus": null
}
```


### Producer 🔧🔨🛠
* #### Get Producer
```http
    GET /api/v1/producer
```

### Category 🔧🔨🛠

### Product 🔧🔨🛠



## :rocket: API_PRODUCER 
###  Producer
* ####  Get Producers
```http
    GET /api/v1/producers
```
El endpoint puede o no resivir los siguientes `query parameters`:
| Qry Parameter     | Examples     | Description                       |
| :--------         | :-------     | :-------------------------------- |
| `skip`            |`skip=0`                 |omite la cantidad indicada|
| `take`            |`take=40`                |toma la cantidad indicada desde el skip|
| `isActive`        | `isActive=true\false`   |true para productores activos o false para productores inactivos|
| `categories`      |`categories=Frutas, Mermeladas y manjares`   |Nombre de la categoria separados por coma (,)|
| `categoryTypes`   |`categoryTypes=Frescos, agroprocesados`|Nombre del typo de categoria separados por coma
| `region`          |`region=Región Del Bio Bio`|nombre de la region (como este en BD)|
|`q`|`q=frescos`|valor ingresado en la barra de busqueda|

Ejemplo:
```http
    GET /api/v1/producers?skip=0&take=40&categories=["1"]&categoryTypes=["2"]&isActive=true
```

```json=
// Response Status 200 Ok
{
  "data": [
    {
      "ID_producer": "cl4n9laap0110r7pifxb8ut2s",
      "brand_name": "dffsf",
      "rut": "43434",
      "additional_info": "",
      "web": "",
      "isActive": true,
      "isPublished": true,
      "isDeleted": false,
      "contact": [
        {
          "name": "prueba222",
          "phone": "32323232",
          "email": "qq@live.cl"
        }
      ],
      "files": [
        {
          "ID_files": "cl4n9laap0115r7pi456bk971",
          "file_name": "422dd6ed-2cc8-42c3-8288-8c5e63be07d6-Copia de foto-home.jpg"
        }
      ],
      "direction": [
        {
          "ID_direction": "cl4n9laap0113r7pi7ljuth4o",
          "label": "Santiago, Región Metropolitana de Santiago, CHL",
          "country": "Chile",
          "region": "Región Metropolitana de Santiago",
          "sub_region": "Santiago",
          "municipality": "Santiago",
          "street": null,
          "number": null,
          "latitud": "-33.43722",
          "longitud": "-70.65002"
        }
      ],
      "producer_category": [
        {
          "ID_producer_category": "cl4n9laaq0119r7pikw6luvs3",
          "category": {
            "ID_category": "1",
            "category": "Aceites, sales y condimentos",
            "category_type": {
              "ID_category_type": "2",
              "type": "agroprocesados"
            }
          }
        }
      ]
    },
    {
      "ID_producer": "cl4na669e0173r7pi59llqik4",
      "brand_name": "dsdsa",
      "rut": "232313",
      "additional_info": "",
      "web": "",
      "isActive": true,
      "isPublished": true,
      "isDeleted": false,
      "contact": [
        {
          "name": "prueba222",
          "phone": "32323232",
          "email": "qq@live.cl"
        }
      ],
      "files": [
        {
          "ID_files": "cl4na669f0178r7pi9dcvosv2",
          "file_name": "3d7be894-ec9f-4cb6-b3a0-f981c5367dba-Copia de foto-home.jpg"
        }
      ],
      "direction": [
        {
          "ID_direction": "cl4na669e0176r7piyrh6vnct",
          "label": "Santïag, Kleerkopersstraat 53, 1000, Brussel, BEL",
          "country": null,
          "region": "Brussel",
          "sub_region": "Brussel",
          "municipality": "Brussel",
          "street": null,
          "number": null,
          "latitud": "50.84928",
          "longitud": "4.35295"
        }
      ],
      "producer_category": [
        {
          "ID_producer_category": "cl4na669f0183r7pihbvb4n80",
          "category": {
            "ID_category": "1",
            "category": "Aceites, sales y condimentos",
            "category_type": {
              "ID_category_type": "2",
              "type": "agroprocesados"
            }
          }
        }
      ]
    }
  ],
  "producerCount": 2
}
```

Si no se encuentran productores
```json=
// Response Status 400 Bad request
{
  "producerCount": 0,
  "message": "No hay productores disponibles"
}
```

* ####  Get Producers
```http
    GET /api/v1/producer/${rut}
```
| Params | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
|  rut		|	string   | rut del productor |

Si rut no existe
```json=
// Response Status 200 ok
{
    "message": "Rut no registrado",
    "exists": false,
    "rutTyped": "111111"
}
```
Si rut existe

```json=
// Response status 400 Bad Request
{
    "message": "Rut ya existe en la BD",
    "exists": true,
    "rutTyped": "191639804"
}
```

###  Direction
* ####  Get Regions
```http
    GET /api/v1/regions
```
| Params | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
|  none		|	none   | none |

```json=
// Response Status 200 Ok

{
  "regions": [
    {
      "ID_direction": "cl4n294x800121kv165l63h9q",
      "region": "Región Del Bio Bio"
    },
    {
      "ID_direction": "cl4n2ai690012jsv1mr1t8x9l",
      "region": "Región Metropolitana de Santiago"
    },
    {
      "ID_direction": "cl4ptfs4d5342ukv184jsqvz6",
      "region": "Region de Arica y Parinacota"
    }
  ]
}
```
En caso de no haber regiones disponibles
```json=
// Response Status 400 Bad request
{
    "message": "No se encontraron regiones",
}
```

###  Request producer
* ####  Post Request producer
```http
    POST /api/v1/request/producer
```
| Body | Type     | Description                       |
| :-------- | :------- | :-------------------------------- |
|  `name`		|	`string`   | **Requerido** Nombre de quien hace la solicitud						   |
|  `phone`		|	`string`   | **Requerido** Telefono	de quien hace la solicitud					   |
|  `email`		|	`string`   | **Requerido** Email de quien hace la solicitud						   |
|  `message`		|	`string`   | **Requerido** Mensaje para el productor						   |
|  `created_at`		|	`datetime`   | **Requerido** Fecha y hora de la solicitud						   |

```json=
// Request body
{
  "name": "Jhon Doe",
  "phone" :"9332244556",
  "email" : "jhon.deo@hotmail.com",
  "message": "Hola, me interesan tus productos.",
  "created_at": "2022-06-15T20:55:44.705Z",
  "ID_producer": "cl4n294x800091kv1phy56tl9"
}
```
```json=
// Response Status 200 Ok
{
  "message": "Registro de solicitud ingresado correctamente",
  "requestProducer": {
    "ID_request_producer": "cl4zuyztt0002u0v1pv9gh0sg",
    "name": "Jhon Doe",
    "phone": "9332244556",
    "email": "jhon.deo@hotmail.com",
    "message": "Hola, me interesan tus productos.",
    "created_at": "2022-06-15T20:55:45.000Z",
    "ID_producer": "cl4n294x800091kv1phy56tl9"
  }
}
```
Si no se indican los datos requeridos
```json=
// Response Status 400 Bad request
{
  "error": [
    {
      "msg": "Campo nombre es requerido",
      "param": "name",
      "location": "body"
    },
    {
      "msg": "Campo telefono es requerido",
      "param": "phone",
      "location": "body"
    },
    {
      "msg": "Campo email es requerido",
      "param": "email",
      "location": "body"
    },
    {
      "msg": "Campo mensaje es requerido",
      "param": "message",
      "location": "body"
    },
    {
      "msg": "Campo fecha de creacion es requerido",
      "param": "created_at",
      "location": "body"
    },
    {
      "msg": "Campo ID de productor es requerido",
      "param": "ID_producer",
      "location": "body"
    }
  ]
}
```