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ć.

Status „Nowy” i kwota powyżej 1000 zł
{
  "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 warunkuZnaczenie
typeZawsze property
idIdentyfikator pola
operator.typeOperator z tabel poniżej
payload.typestatic dla stałej wartości albo dynamic dla wartości liczonej w chwili zapytania
payload.valueWartość albo nazwa wartości dynamicznej
isDisabledtrue wyłącza warunek bez usuwania go z drzewa

Operatory

RodzajOperatory
Porównanieequals, not-equals, greater-than, greater-than-or-equal, less-than, less-than-or-equal
Tekstcontains, not-contains, starts-with, ends-with, regexp
Zbioryin, not-in
Pustośćempty, not-empty, start-or-end-date-empty, start-or-end-date-not-empty
Datydate-equals, date-not-equals, between-dates, on-or-after-date, on-or-before-date, after-date, before-date, is-relative-to-today
Listyarray-includes, array-not-includes, array-contains, array-not-contains, array-empty, array-not-empty
Lokalizacjafurther-than, no-further-than
Lista kontrolnachecklist-completed, checklist-not-completed
Logicznetruthy, 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
meOsoba, która wysyła zapytanie
one-of-my-groupsDowolna z grup tej osoby
today, yesterday, tomorrow, nowDzień albo chwila względem dzisiaj
this-month, last-month, next-monthMiesiące
this-year, last-year, next-yearLata
start-of-this-week, end-of-this-weekGranice tygodnia
start-of-this-month, end-of-this-monthGranice miesiąca
start-of-this-year, end-of-this-yearGranice roku
Moje zadania
{
  "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).

Adres
POST /database/:databaseId/items?sort=<id pola>&sortDirection=-1

Stronicowanie

Użyj offset i limit. Pobieraj kolejne strony, aż dostaniesz mniej rekordów niż limit.

JavaScript
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.