Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Lập trình Web & Backend] Pagination: cursor-based (after, first)

    Pagination con trỏ (cursor)

    Mỗi node có id duy nhất tăng dần; cursor là id của node. Query first: K, after: C lấy K node đầu tiên có id > C. Nếu after = -1, lấy từ đầu.

    Trả connection: edges mỗi phần tử {"cursor":id,"node":obj}, và pageInfo.endCursor = cursor cuối lấy được (null nếu rỗng), pageInfo.hasNextPage = còn node sau trang này.

    Ví dụ

    Input:

    [{"id":1,"v":"a"},{"id":2,"v":"b"},{"id":3,"v":"c"}]
    2 -1
    

    Output:

    {"edges":[{"cursor":1,"node":{"id":1,"v":"a"}},{"cursor":2,"node":{"id":2,"v":"b"}}],"pageInfo":{"endCursor":2,"hasNextPage":true}}
    
    • Định dạng đầu vào:

      Dòng 1: mảng node JSON, mỗi node có id tăng dần. Dòng 2: K C — first và after (after = -1 nghĩa là từ đầu).

    • Ràng buộc đầu vào:

      0 ≤ số node ≤ 1000. id nguyên tăng dần. 0 ≤ K.

    • Định dạng đầu ra:

      Object connection theo định dạng mô tả (endCursor null nếu rỗng).

    Ví dụ:

    Đầu vào:

    [{"id":1,"v":"a"},{"id":2,"v":"b"},{"id":3,"v":"c"}]
    2 -1
    

    Đầu ra:

    {"edges":[{"cursor":1,"node":{"id":1,"v":"a"}},{"cursor":2,"node":{"id":2,"v":"b"}}],"pageInfo":{"endCursor":2,"hasNextPage":true}}

    Giải thích:

    after=-1 lấy từ đầu 2 node, còn id=3 nên hasNextPage true, endCursor=2.

    Đang tải editor...