API Guides

Pagination

Sayfalı endpoint response yapısı ve infinite scroll kuralları

Pagination

Sayfalı endpoint'ler BaseResponseDto<PaginatedResponseDto<T>> formatında döner. Endpoint reference hangi endpoint'in sayfalı olduğunu gösterir; client tarafında ortak bir pagination modeli kullanılmalıdır.

Request parametreleri

Çoğu endpoint aşağıdaki query parametrelerini kullanır:

GET /api/v1/live-stream/active?page=1&limit=10
Authorization: Bearer <accessToken>
ParametreAçıklama
page1'den başlar. Gönderilmezse endpoint'e göre default genelde 1 olur.
limitSayfa başına kayıt sayısı. Gönderilmezse endpoint'e göre default genelde 10 veya ilgili modülün default'u olur.

Bazı endpoint'lerde limit üst sınırı uygulanır. Endpoint reference içindeki query açıklaması esas alınmalıdır.

Response formatı

{
  "isSuccess": true,
  "statusCode": 200,
  "data": {
    "list": [
      {
        "_id": "65f000000000000000000001"
      }
    ],
    "pagination": {
      "currentPage": 1,
      "totalPages": 5,
      "totalItems": 45,
      "itemsPerPage": 10,
      "hasNextPage": true,
      "hasPrevPage": false
    }
  },
  "errors": [],
  "timestamp": "2026-05-21T10:00:00.000Z"
}

Ortak tip

export type PaginationMeta = {
  currentPage: number;
  totalPages: number;
  totalItems: number;
  itemsPerPage: number;
  hasNextPage?: boolean;
  hasPrevPage?: boolean;
};

export type Paginated<T> = {
  list: T[];
  pagination: PaginationMeta;
};

Infinite scroll

Infinite scroll kullanan ekranlarda hasNextPage varsa onu kullanın. Yoksa currentPage < totalPages hesabı yapılabilir.

const nextPage = page.data.pagination.hasNextPage
  ? page.data.pagination.currentPage + 1
  : null;

Liste append edilirken item key'i sadece index olmamalıdır. Mümkünse kalıcı _id kullanılmalıdır. Grouped response'larda key semantiği endpoint'e göre değişebilir; örneğin grouped transaction history response'unda pagination entry/group bazlıdır, transaction satırı bazlı değildir.

Refresh ve filtre değişimi

Filtre veya sort değiştiğinde:

  1. Mevcut liste temizlenir.
  2. page=1 ile yeniden istek atılır.
  3. Gelen list replace edilir.
  4. Sonraki sayfalar append edilir.

Bu kural özellikle live-stream, notifications, messages, reports ve transaction history ekranlarında çift kayıt veya yanlış scroll state'i önler.

On this page