ArztAPI logo

Filterung & Paginierung

Filterung

Unsere API unterstützt leistungsstarke Filterfunktionen, die von pg_graphql bereitgestellt werden. Sie können die meisten Felder mithilfe verschiedener Operatoren filtern (z.B. eq, neq, gt, lt, in, like, ilike usw.).

Wichtiger Hinweis zu relationalen Filtern

In einigen Supabase pg_graphql Setups funktionieren Filter nur auf Spalten der abgefragten Tabelle/View. Das Filtern einer Basistabelle nach Feldern aus Relationen (z. B. Einrichtungen nach Location-Spalten) kann fehlschlagen.

Für kombinierte Filter (Name + PLZ/Stadt + Spezialisierung) empfehlen wir die Suchfunktionen (siehe unten).

Beispiel: Professionals nach Nachnamen-Präfix filtern.

query ProfessionalsByLastNamePrefix($pattern: String!, $limit: Int!) {
  professionalsCollection(
    filter: { last_name: { ilike: $pattern } }
    first: $limit
  ) {
    edges {
      node {
        id
        first_name
        last_name
      }
    }
  }
}

Detaillierte Informationen zu allen verfügbaren Filteroptionen finden Sie in der pg_graphql-Dokumentation zu Filtern.

Für kombinierte Suchen (z. B. Einrichtungsname + PLZ/Stadt + Spezialisierung) nutzen Sie die per GraphQL exponierten Funktionen, z. B. search_facilities.

query SearchFacilities(
  $namePattern: String!
  $zip: String
  $cityPattern: String
  $specialisationSlug: String
  $limit: Int!
  $offset: Int!
) {
  search_facilities(
    p_name_pattern: $namePattern
    p_zip_code: $zip
    p_city_pattern: $cityPattern
    p_specialisation_slug: $specialisationSlug
    p_limit: $limit
    p_offset: $offset
  ) {
    edges {
      node {
        id
        name
        facility_type
        locations {
          street
          zip_code
          city
        }
      }
    }
  }
}

Paginierung

Sammlungen unterstützen cursor-basierte Paginierung mithilfe der Argumente first und after.

  • first: Int: Gibt die Anzahl der zurückzugebenden Elemente an.
  • after: String: Nimmt einen Cursor (erhalten von pageInfo.endCursor oder einem edge.cursor einer vorherigen Abfrage), um den nächsten Satz von Elementen abzurufen.

Um Paginierungsinformationen zu erhalten, fügen Sie pageInfo { endCursor, hasNextPage } in Ihre Sammlungsabfrage ein.

query PaginatedProfessionals {
  professionalsCollection(first: 10) {
    edges {
      node {
        id
        first_name
      }
      cursor
    }
    pageInfo {
      endCursor
      hasNextPage
    }
    totalCount
  }
}

Paginierung für Suchfunktionen

Die Suchfunktionen verwenden explizite Parameter p_limit und p_offset. Typischer Ablauf:

  • Start mit p_offset: 0
  • Für die nächste Seite Offset um Limit erhöhen (z. B. 0 → 10 → 20)