@@ -56,7 +56,7 @@ import { castLibrary } from '../utils/CastBackend';
5656import Constants from '../utils/Constants' ;
5757import { showWarningMessage } from '../utils/notifications/NotificationsHelper' ;
5858import { request } from '../utils/RequestHelper' ;
59- import { LeaderboardRow } from 'src/features/leaderboard/LeaderboardTypes' ;
59+ import { ContestLeaderboardRow , LeaderboardRow } from 'src/features/leaderboard/LeaderboardTypes' ;
6060
6161// eslint-disable-next-line @typescript-eslint/no-require-imports
6262const XLSX = require ( 'xlsx' ) ;
@@ -485,6 +485,70 @@ export const getAllTotalXp = async (tokens: Tokens): Promise<number | null> => {
485485 ) ;
486486} ;
487487
488+ /**
489+ * GET /courses/{courseId}/leaderboard/contests/{assessment_id}/get_score_leaderboard
490+ */
491+ export const getContestScoreLeaderboard = async (
492+ assessmentId : number ,
493+ tokens : Tokens
494+ ) : Promise < number | null > => {
495+ let resp ;
496+ resp = await request ( `${ courseId ( ) } /leaderboard/contests/${ assessmentId } /get_score_leaderboard` , 'GET' , {
497+ ...tokens
498+ } ) ;
499+
500+ if ( ! resp || ! resp . ok ) {
501+ return null ; // invalid accessToken _and_ refreshToken
502+ }
503+
504+ const rows = await resp . json ( ) ;
505+
506+ return rows . contest_score . map (
507+ ( row : any ) : ContestLeaderboardRow => ( {
508+ rank : row . rank ,
509+ name : row . name ,
510+ username : row . username ,
511+ score : row . score ,
512+ avatar : "" ,
513+ code : row . code ,
514+ submissionId : row . submission_id ,
515+ votingId : rows . voting_id
516+ } )
517+ ) ;
518+ } ;
519+
520+ /**
521+ * GET /courses/{courseId}/leaderboard/contests/{assessment_id}/get_popular_vote_leaderboard
522+ */
523+ export const getContestPopularVoteLeaderboard = async (
524+ assessmentId : number ,
525+ tokens : Tokens
526+ ) : Promise < number | null > => {
527+ let resp ;
528+ resp = await request ( `${ courseId ( ) } /leaderboard/contests/${ assessmentId } /get_popular_vote_leaderboard` , 'GET' , {
529+ ...tokens
530+ } ) ;
531+
532+ if ( ! resp || ! resp . ok ) {
533+ return null ; // invalid accessToken _and_ refreshToken
534+ }
535+
536+ const rows = await resp . json ( ) ;
537+
538+ return rows . contest_popular . map (
539+ ( row : any ) : ContestLeaderboardRow => ( {
540+ rank : row . rank ,
541+ name : row . name ,
542+ username : row . username ,
543+ score : row . score ,
544+ avatar : "" ,
545+ code : row . code ,
546+ submissionId : row . submission_id ,
547+ votingId : rows . voting_id
548+ } )
549+ ) ;
550+ } ;
551+
488552/**
489553 * GET /courses/{courseId}/admin/users/{course_reg_id}/assessments
490554 */
@@ -1169,6 +1233,20 @@ export const deleteSourcecastEntry = async (
11691233 return resp ;
11701234} ;
11711235
1236+ /**
1237+ * POST /courses/{courseId}/admin/assessments/{assessmentId}/calculateContestScore
1238+ */
1239+ export const calculateContestScore = async (
1240+ assessmentId : number ,
1241+ tokens : Tokens
1242+ ) : Promise < Response | null > => {
1243+ const resp = await request ( `${ courseId ( ) } /admin/assessments/${ assessmentId } /calculateContestScore` , 'POST' , {
1244+ ...tokens
1245+ } ) ;
1246+
1247+ return resp ;
1248+ } ;
1249+
11721250/**
11731251 * GET /courses/{courseId}/admin/assessments/{assessmentId}/scoreLeaderboard
11741252 */
0 commit comments