Skip to content

Commit d1936c3

Browse files
committed
fix recommender api pagination
1 parent a677ae6 commit d1936c3

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

src/services/challenges.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import { getApi } from './api';
1515
import { getService as getMembersService } from './members';
1616
import { getService as getSubmissionsService } from './submissions';
1717

18+
const MAX_PER_PAGE = 300;
19+
1820
export function getFilterUrl(backendFilter, frontFilter) {
1921
const ff = _.clone(frontFilter);
2022
// eslint-disable-next-line object-curly-newline
@@ -536,25 +538,37 @@ class ChallengesService {
536538
* @return {Promise} Resolves to the api response.
537539
*/
538540
async getRecommendedChallenges(filter, handle) {
539-
const query = getFilterUrl(
541+
filter.frontFilter.per_page = filter.frontFilter.perPage;
542+
delete filter.frontFilter.perPage;
543+
544+
const query = getFilterUrl(filter.backendFilter, filter.frontFilter);
545+
546+
const totalQuery = getFilterUrl(
540547
filter.backendFilter,
541-
{ ...filter.frontFilter, per_page: filter.frontFilter.perPage },
548+
{ ...filter.frontFilter, page: 1, perPage: MAX_PER_PAGE },
542549
);
543550

544551
let res = {};
552+
let totalChallengeCount = {};
545553
if (_.some(filter.frontFilter.tracks, val => val)
546554
&& !_.isEqual(filter.frontFilter.types, [])) {
547555
const url = `/recommender-api/${handle}?${query}`;
548556
res = await this.private.apiV5.get(url).then(checkErrorV5);
557+
// Note: Recommender API is not returning X-Total response header.
558+
// Please remove below statement with response get method.
559+
const totalUrl = `/recommender-api/${handle}?${totalQuery}`;
560+
totalChallengeCount = await this.private.apiV5.get(totalUrl).then(checkErrorV5);
549561
}
550-
const challenges = res.result.filter(ch => ch.jaccard_index > 0);
562+
const challenges = res.result ? res.result.filter(ch => ch.jaccard_index > 0) : [];
563+
const total = totalChallengeCount.result
564+
? totalChallengeCount.result.filter(ch => ch.jaccard_index > 0) : [];
551565

552-
const totalCount = challenges.length;
566+
const totalCount = total.length;
553567
return {
554568
challenges,
555569
totalCount,
556570
meta: {
557-
allChallengesCount: challenges.length,
571+
allChallengesCount: totalCount,
558572
allRecommendedChallengesCount: 0,
559573
myChallengesCount: 0,
560574
ongoingChallengesCount: 0,

0 commit comments

Comments
 (0)