Filtrowanie i sortowanie
Drzewo filtrów z grupami AND i OR, operatory dla każdego typu pola, sortowanie i stronicowanie.
Na tej stronie
Listę rekordów z POST /database/:databaseId/items zawęzisz filtrem w treści zapytania, a posortujesz i podzielisz na strony parametrami w adresie.
Drzewo filtrów
Filtr to drzewo z dwoma rodzajami węzłów. Grupa łączy warunki operatorem and albo or. Warunek porównuje jedno pole z wartością. Grupy można zagnieżdżać.
{
"filter": {
"type": "group",
"operator": "and",
"items": [
{
"type": "property",
"id": "<id pola statusu>",
"operator": {"type": "equals"},
"payload": {"type": "static", "value": "<id opcji Nowy>"},
"isDisabled": false
},
{
"type": "property",
"id": "<id pola kwoty>",
"operator": {"type": "greater-than"},
"payload": {"type": "static", "value": 1000},
"isDisabled": false
}
]
}
}| Pole warunku | Znaczenie |
|---|---|
type | Zawsze property |
id | Identyfikator pola |
operator.type | Operator z tabel poniżej |
payload.type | static dla stałej wartości albo dynamic dla wartości liczonej w chwili zapytania |
payload.value | Wartość albo nazwa wartości dynamicznej |
isDisabled | true wyłącza warunek bez usuwania go z drzewa |
Operatory
| Rodzaj | Operatory |
|---|---|
| Porównanie | equals, not-equals, greater-than, greater-than-or-equal, less-than, less-than-or-equal |
| Tekst | contains, not-contains, starts-with, ends-with, regexp |
| Zbiory | in, not-in |
| Pustość | empty, not-empty, start-or-end-date-empty, start-or-end-date-not-empty |
| Daty | date-equals, date-not-equals, between-dates, on-or-after-date, on-or-before-date, after-date, before-date, is-relative-to-today |
| Listy | array-includes, array-not-includes, array-contains, array-not-contains, array-empty, array-not-empty |
| Lokalizacja | further-than, no-further-than |
| Lista kontrolna | checklist-completed, checklist-not-completed |
| Logiczne | truthy, falsy |
Nie każdy operator pasuje do każdego typu pola. Tekst nie ma operatorów lokalizacji, a liczba nie ma operatorów tekstowych.
Wartości dynamiczne
Z payload.type równym dynamic filtr liczy wartość w chwili zapytania. Dzięki temu ten sam filtr działa jutro i za miesiąc.
| Wartość | Znaczenie |
|---|---|
me | Osoba, która wysyła zapytanie |
one-of-my-groups | Dowolna z grup tej osoby |
today, yesterday, tomorrow, now | Dzień albo chwila względem dzisiaj |
this-month, last-month, next-month | Miesiące |
this-year, last-year, next-year | Lata |
start-of-this-week, end-of-this-week | Granice tygodnia |
start-of-this-month, end-of-this-month | Granice miesiąca |
start-of-this-year, end-of-this-year | Granice roku |
{
"type": "property",
"id": "<id pola osób>",
"operator": {"type": "array-includes"},
"payload": {"type": "dynamic", "value": "me"},
"isDisabled": false
}Sortowanie
Sortujesz parametrami adresu: sort to identyfikator pola, a sortDirection to 1 (rosnąco) albo -1 (malejąco).
POST /database/:databaseId/items?sort=<id pola>&sortDirection=-1Stronicowanie
Użyj offset i limit. Pobieraj kolejne strony, aż dostaniesz mniej rekordów niż limit.
async function fetchAllItems(databaseId, filter) {
const items = []
const limit = 100
for (let offset = 0; ; offset += limit) {
const response = await fetch(`https://api.staging.hypris.com/v1/database/${databaseId}/items?limit=${limit}&offset=${offset}`, {
method: 'POST',
headers: {Authorization: AUTH_HEADER, 'Content-Type': 'application/json'},
body: JSON.stringify({filter}),
})
const {data} = await response.json()
items.push(...data.databaseItems)
if (data.databaseItems.length < limit) {
return items
}
}
}Wyszukiwanie i wybrane pola
Parametr search w adresie przeszukuje rekordy tekstowo. Pole databasePropertyIds w treści ogranicza odpowiedź do wybranych pól, co przyspiesza duże zapytania.