@@ -49,6 +49,10 @@ const marathonRankFields = [
4949 'minimumRating' , 'maximumRating' , 'countryRank' , 'schoolRank' , 'defaultLanguage'
5050]
5151
52+ const groupedSubTrackStatsTrackNames = [ 'DEVELOP' , 'DESIGN' , 'QA' ]
53+ const supportedUnifiedStatsTrackNames = [ 'DEVELOP' , 'DESIGN' , 'DATA_SCIENCE' , 'QA' , 'COPILOT' ]
54+ const supportedUnifiedHistoryTrackNames = [ 'DEVELOP' , 'DESIGN' , 'DATA_SCIENCE' , 'QA' ]
55+
5256const auditFields = [
5357 'createdAt' , 'createdBy' , 'updatedAt' , 'updatedBy'
5458]
@@ -331,8 +335,10 @@ function applyMaxRatingRankFallback (item) {
331335 return
332336 }
333337
334- if ( trackName === 'DEVELOP' && item . DEVELOP && _ . isArray ( item . DEVELOP . subTracks ) ) {
335- const statsItem = _ . find ( item . DEVELOP . subTracks , subTrack =>
338+ if ( ( trackName === 'DEVELOP' || trackName === 'QA' ) &&
339+ item [ trackName ] &&
340+ _ . isArray ( item [ trackName ] . subTracks ) ) {
341+ const statsItem = _ . find ( item [ trackName ] . subTracks , subTrack =>
336342 getUnifiedTypeName ( subTrack . id || subTrack . name ) === typeName
337343 )
338344 if ( statsItem ) {
@@ -616,7 +622,7 @@ function buildUnifiedStatsResponse (member, statsData, fields) {
616622 resolvedTrackName : getUnifiedTrackName ( row . trackName || row . trackId ) ,
617623 resolvedTypeName : getUnifiedTypeName ( row . typeName || row . typeId )
618624 } ) )
619- . filter ( row => _ . includes ( [ 'DEVELOP' , 'DESIGN' , 'DATA_SCIENCE' , 'COPILOT' ] , row . resolvedTrackName ) )
625+ . filter ( row => _ . includes ( supportedUnifiedStatsTrackNames , row . resolvedTrackName ) )
620626 . value ( )
621627 const first = _ . head ( validRows ) || { }
622628 const item = {
@@ -635,18 +641,18 @@ function buildUnifiedStatsResponse (member, statsData, fields) {
635641 _ . forEach ( validRows , ( row ) => {
636642 const trackName = row . resolvedTrackName
637643 const typeName = row . resolvedTypeName
638- if ( trackName === 'DEVELOP' ) {
644+ if ( trackName === 'DEVELOP' || trackName === 'QA' ) {
639645 const challengeCount = toNumber ( row . challenges )
640- if ( ! item . DEVELOP ) {
641- item . DEVELOP = {
646+ if ( ! item [ trackName ] ) {
647+ item [ trackName ] = {
642648 challenges : 0 ,
643649 wins : 0 ,
644650 mostRecentSubmission : null ,
645651 mostRecentEventDate : null ,
646652 subTracks : [ ]
647653 }
648654 }
649- mergeTrackCounters ( item . DEVELOP , row )
655+ mergeTrackCounters ( item [ trackName ] , row )
650656 const submissionStats = _ . omitBy ( {
651657 ..._ . pick ( row , developSubmissionFields ) ,
652658 ..._ . mapValues ( _ . pick ( row , developSubmissionBigIntFields ) , v => toNumber ( v ) )
@@ -686,7 +692,7 @@ function buildUnifiedStatsResponse (member, statsData, fields) {
686692 rank . minRating = row . minRating
687693 }
688694 subTrackItem . rank = rank
689- item . DEVELOP . subTracks . push ( subTrackItem )
695+ item [ trackName ] . subTracks . push ( subTrackItem )
690696 } else if ( trackName === 'DESIGN' ) {
691697 if ( ! item . DESIGN ) {
692698 item . DESIGN = {
@@ -815,7 +821,7 @@ function buildUnifiedStatsHistoryResponse (member, historyStats, fields) {
815821 resolvedTrackName : getUnifiedTrackName ( row . trackName || row . trackId ) ,
816822 resolvedTypeName : getUnifiedTypeName ( row . typeName || row . typeId )
817823 } ) )
818- . filter ( row => _ . includes ( [ 'DEVELOP' , 'DESIGN' , 'DATA_SCIENCE' ] , row . resolvedTrackName ) )
824+ . filter ( row => _ . includes ( supportedUnifiedHistoryTrackNames , row . resolvedTrackName ) )
819825 . value ( )
820826 const first = _ . head ( validRows ) || { }
821827 const item = {
@@ -828,8 +834,8 @@ function buildUnifiedStatsHistoryResponse (member, historyStats, fields) {
828834 const groupedByTrackType = _ . groupBy ( validRows , row => `${ row . resolvedTrackName } ::${ row . resolvedTypeName } ` )
829835 _ . forEach ( groupedByTrackType , ( trackHistory , key ) => {
830836 const [ trackName , typeName ] = key . split ( '::' )
831- if ( trackName === 'DEVELOP' || trackName === 'DESIGN' ) {
832- const historyTrackName = trackName === 'DESIGN' ? 'DESIGN' : 'DEVELOP'
837+ if ( _ . includes ( groupedSubTrackStatsTrackNames , trackName ) ) {
838+ const historyTrackName = trackName
833839 if ( ! item [ historyTrackName ] ) {
834840 item [ historyTrackName ] = { subTracks : [ ] }
835841 }
0 commit comments