stack_overflow_nextjs14 icon indicating copy to clipboard operation
stack_overflow_nextjs14 copied to clipboard

FIX: User and Tags Questions Pagination

Open mohannadofficial opened this issue 1 year ago • 1 comments

The original getQuestionsByTagId function had an issue with pagination due to calculating the total number of questions Which we calculate before the populate process so when we get the length of saved question we get it with these options :

options: { sort: { createdAt: -1 }, skip: skipAmount, limit: pageSize + 1, },

This is not what we want because here we are applying the limit to the question so we are not able to get the total number

Another problem is we use pageSize + 1 and this the problem i will explain why look at these two line const skipAmount = (page - 1) * pageSize; options: { sort: { createdAt: -1 }, skip: skipAmount, limit: pageSize + 1, },

when we are in page 1 => we will show 11 Questions and skip 0 page 2 => also show 11 question but skip 10 question so we sill show the last question in the first page

The updated version addresses this by:

Finding the Tag First:

It fetches the tag using Tag.findOne(tagFilter). This ensures the tag exists before proceeding. Separate Population and Length Calculation:

Population: It populates the questions field of the tag with filtering, sorting, skipping, and limiting options. This ensures you get only the relevant questions for the current page. Length Calculation After Population: After population, it calculates the actual number of questions in the current page (currenTagQuestions) using tag.questions.length. Correct isNext Calculation:

It determines whether there's a next page by comparing allTagQuestions (total number of questions) with the sum of skipAmount (number of questions skipped) and currenTagQuestions (number of questions retrieved this time). This ensures accurate pagination logic.

and the same in getSavedQuestions function

mohannadofficial avatar May 08 '24 15:05 mohannadofficial

@mohannadofficial is attempting to deploy a commit to the JS Mastery Pro Team on Vercel.

A member of the Team first needs to authorize it.

vercel[bot] avatar May 08 '24 15:05 vercel[bot]