Los filtros sirven para acotar los resultados que van a ser devueltos. Funcionan como una query de base de datos, y son combinables.
- Evaluacion: ( "clave" = "valor" )
Es la operacion base, la que se encarga de hacer filtrar campos particulares. Acepta varios tipos de valores y operadores.
-
Operadores
= : igual
! : distinto
> : mayor
>= : mayor o igual
< : menor
<= : menor o igual -
Valores:
String: "String"
Numero: -3.14
Booleano: true
Fecha: 2016-03-23T04:23
Listas: [ valor1, valor2 ] -
And: { operacion1, operacion2, operacion3 }
Es un and logico, soporta n operaciones dentro.
-
Or: [operacion1, operacion2, operacion3]
Es un or logico, soporta n operaciones dentro.
-
Not: ! operacion
Es un not logico, se aplica sobre una operacion.
Por ejemplo
!{ !("stage"="PAYMENT"), ![("status"=OK), ("status"="ERROR")]}
-
Traer un carrito por id:
?query=( "id"="AAA-BBB-CCC" )
-
Traer los carritos en payment error:
?query={ ("stage"="PAYMENT"), ("status"="ERROR") }
-
Traer los carritos en Fraud o Payment :
?query=[ ("stage"="PAYMENT"),("stage"="FRAUD") ]
-
Traer los carritos en Fraud o Payment (otra manera) :
?query=("stage"= ["PAYMENT","FRAUD"])
-
Traer los carritos que no esten en Payment :
?query=("stage" ! "PAYMENT")
-
Traer los carritos que no esten en Payment (otra manera):
?query=!("stage"="PAYMENT")
-
Traer los carritos que no esten en Payment Error :
?query=!{ ("stage"="PAYMENT"),("status"="ERROR") }
-
Traer los carritos que no esten en Payment o Fraude:
?query=("stage" ! ["PAYMENT", "FRAUD"])
(el espacio entre '!' y '[' es importante)
-
Traer los carritos en Payment Manual de la sucursal con id 52, precio mayor a 10000 creados a partir del 15 de agosto de 2016
?query={("stage"="PAYMENT"), ("retailer"="52"), ("price">10000), ("creation date" >= 2016-08-15T00:00)}
Las proyecciones sirven para acotar la informacion que retorna el servicio, para poder recibir solo la informacion que se va a usar.
-
Proyeccion default, nivel carrito:
?query=("id"="aaa-bbb-ccc")&projection=CART Devuelve: [{ "id": "aaa-bbb-ccc", "reservations": [...], "account_info": { ... }, ... }]
-
Proyeccion nivel account info:
?query=("id"="aaa-bbb-ccc")&projection=ACCOUNT Devuelve: [{ "accountId": "627", "accountEmail": "matias.canessa@almundo.com" ... }]
-
Proyeccion nivel reserva, en un carrito con 2 reservas:
?query=("id"="aaa-bbb-ccc")&projection=RESERVATION Devuelve: [{ "id": "84a31284-f186-4129-b8c3-15c8c3774070", "product": "FLIGHT", "items": [ ... ], ... }, { "id": "a8a198f3-997e-45bf-a780-5dd67a5a10c9", "product": "HOTEL", "items": [ ... ], ... }]
Importante: Notar que no las agrupa, si se consultan 2 carritos, las reservas no van a estar agrupadas por carrito
-
Proyeccion nivel reserva, en un carrito con 2 reservas, con filtro por producto:
?query={("id"="aaa-bbb-ccc"), ("product"="FLIGHT")}&projection=RESERVATION Devuelve: [{ "id": "84a31284-f186-4129-b8c3-15c8c3774070", "product": "FLIGHT", "items": [ ... ], ... }]
-
Proyeccion nivel item, en un carrito con 2 reservas con varios items cada una:
?query=("id"="aaa-bbb-ccc")&projection=ITEM Devuelve: [{ "id": "...", ... }, { "id": "...", ... }, { "id": "...", ... }]
-
Proyeccion nivel reserva, en un carrito sin reservas:
?query=("id"="ddd-eee-fff")&projection=RESERVATION Devuelve: [ ]
A veces la informacion que viene necesita una transformacion simple antes de ser consumida. Las post operaciones se aplican sobre el resultado del filtro y la proyeccion, y tienen como objetivo transformar los datos en algo mas util para el que los va a consumir. Las post operaciones son combinables y cada una tiene su contrato de input-output.
El uso de las post operaciones es bastante sencillo, consiste en especificarlas por nombre separadas por coma, y con sus respectivos parametros (si los tienen) separados con |
Ejemplos:
Una post operation: ?...&postOperations=count
Una con parametro: ?...&postOperations=piechart(STAGE)
Una con varios parametros: ?...&postOperations=sort(TO|DESC)
Varias post operations: ?...&postOperations=groupBy(STATUS),count
Se pueden repetir: ?...&postOperations=groupBy(STATUS),count,count
Importante: Muchas post operaciones no se pueden usar sobre propiedades dentro de listas ya que al estar dentro de una lista, no se puede saber sobre que elemento operar. Ejemplo: Si trato de ordenar carritos segun la fecha de check-in de las reservas, ordeno segun el check-in de la primera reserva o segun el de la segunda? Si cambiamos la proyeccion a nivel reservas, si se puede ordenar por fecha de check-in, ya que las reservas estan aplanadas.
-
Toma como entrada varios tipos de datos y retorna el resultado de contar lo que contiene.
-
Contrato:
Entrada Salida List
Integer
Map
Integer
Map<?, List>
Map<?, Integer>
-
Comportamiento: *
List
: Devuelve la cantidad de elementos que contiene *Map
: Devuelve la cantidad de elementos que contiene *Map<?, List>
: Devuelve un mapa con las mismas claves que como valor tienen la cantidad de elementos que contenia cada lista -
Ejemplos:
- Lista:
Input: [{ "id" : "asd123", "product" : "FLIGHT", ... }, { "id" : "def456", "product" : "FLIGHT", ... }] Output: 2
- Mapa:
Input: { "OK" : { .. }, "ERROR" : { .. }, "MANUAL" : { .. } } Output: 3
- Mapa de listas:
Input: { "OK" : [ {..}, {..} ], "ERROR" : [ {..} ], "MANUAL" : [ ] } Output: { "OK" : 2, "ERROR" : 1, "MANUAL" : 0 }
-
Toma como entrada una lista o un mapa de listas y las retorna ordenadas.
-
Contrato: Los datos internos no son modificados.
Entrada Salida List
List
Map<?, List>
Map<?, List>
-
Parametros:
*
- Propiedad a comparar - obligatorioDESC
- Invierte el orden - opcional
-
Comportamiento: *
List
: Devuelve la lista ordenada, segun el criterio de orden natural del tipo de datos sobre el que ordena. *Map<?, List>
: Devuelve el mapa con las listas ordenadas -
Ejemplos:
- Lista:
Argumentos: sort(TO) Input: [ {"to" : "2016-02-17T09:23:00"}, {"to" : null}, {"to" : "2016-01-27T15:05:00"} ] Output: [ {"to" : "2016-01-27T15:05:00"}, {"to" : "2016-02-17T09:23:00"}, {"to" : null} ]
- Mapa de listas:
Argumentos: sort(STATUS) Input: { "BOOKING" : [{"status" : "PENDING"}, {"status" : "ERROR"}], "PAYMENT" : [{"status" : "PENDING"}, {"status" : "OK"}] } Output: { "BOOKING" : [{"status" : "ERROR"}, {"status" : "PENDING"}], "PAYMENT" : [{"status" : "OK"}, {"status" : "PENDING"}] }
- Lista con orden descendiente:
Argumentos: sort(PRICE|DESC) Input: [ {"price" : "400"}, {"price" : "600"} ] Output: [ {"price" : "600"}, {"price" : "400"} ]
-
Toma como entrada una lista, devuelve un mapa cuyas claves se corresponden con cada valor del campo sobre el que se agrupa.
-
Contrato: Los datos internos no son modificados.
Entrada Salida List
Map<?, List>
-
Parametros:
*
- Propiedad a sobre la cual se agrupa - obligatorio
-
Comportamiento: *
List
: Devuelve un mapa de listas, la clave es el valor del campo sobre el que se agrupa, las listas contienen los elementos que contienen cada valor. -
Ejemplos:
- Lista:
Argumentos: groupBy(STAGE) Input: [ { "status" : "OK", "stage" : "PAYMENT" }, { "status" : "ERROR", "stage" : "PAYMENT" }, { "status" : "OK", "stage" : "BOOKING" } ] Output: { "BOOKING": [ { "status" : "OK", "stage" : "BOOKING" } ], "PAYMENT": [ { "status" : "OK", "stage" : "PAYMENT" }, { "status" : "ERROR", "stage" : "PAYMENT" } ] }
-
Toma como entrada una lista, una lista correspondiente a los porcenates por clave para poder armar un grafico de torta.
-
Contrato:
Entrada Salida List
List<PieChartItem>
PieChartItem:
key: clave sobre la que se genera el grafico
count: cantidad de items en la porcion
percentage: porcentaje de la porcion
-
Parametros:
*
- Propiedad a sobre la cual se agrupa - obligatorio
-
Ejemplos:
- Lista:
Argumentos: groupBy(STAGE) Input: [ { "stage" : "PAYMENT" }, { "stage" : "PAYMENT" }, { "stage" : "BOOKING" } ] Output: [ { "key" : "BOOKING", "count" : 1, "percentage" : 33.3 }, { "key" : "PAYMENT", "count" : 2, "percentage" : 66.6 } ]
-
Limites -> ....&limit=20
-
Offset -> ....&offset=10
-
Paging -> proximamente
B2