Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add game pagination to DatabaseReplayProvider #409

Merged
merged 16 commits into from
Nov 19, 2023
Merged

Conversation

vinceau
Copy link
Member

@vinceau vinceau commented Nov 11, 2023

Description

This PR adds pagination support when fetching games.

How it works

1. When fetching from the database, fetch limit + 1 items.

This allows us to determine if we actually have any more items to return, in order to populate the continuation token. If this string is populated, there are more records to come. If there is no continuation token, all records have been fetched.

2. Take the last item returned from the records and encode it into a continuation token.

We need to be able to refer to each item in the list of records, in a deterministicly sorted order. We do this by taking the key that it's sorted by e.g. game start time, and the record ID, and when returning results always sort by these two columns. We return the continuation token in the base64 encoded form of ${value},${lastRecordId}.

3. When fetching more items, pass the previous continuation token.

The continuation token is decoded back into the order by key in order to re-fetch the previous query, and using a specially crafted where-clause to start from the expected record (the limit + 1 record from before). The frontend renderer is responsible for storing and re-sending the continuation token as needed.

Resources

Here are some resources which I found useful when implementing pagination.

@vinceau vinceau changed the base branch from main to feat/database-replay-provider-2 November 11, 2023 03:13
@vinceau vinceau changed the title Add game pagination Add game pagination to DatabaseReplayProvider Nov 11, 2023
Base automatically changed from feat/database-replay-provider-2 to main November 19, 2023 11:25
@vinceau vinceau merged commit 4b40b43 into main Nov 19, 2023
@vinceau vinceau deleted the feat/pagination-3 branch November 19, 2023 11:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants