@@ -34,6 +34,17 @@ const {
3434} = require ( "../common/prisma" ) ;
3535const prisma = getClient ( ) ;
3636
37+ // Provide aliases for friendlier sortBy query params
38+ const sortByAliases = {
39+ updated : constants . validChallengeParams . Updated ,
40+ created : constants . validChallengeParams . Created ,
41+ } ;
42+
43+ const allowedSortByValues = _ . uniq ( [
44+ ..._ . values ( constants . validChallengeParams ) ,
45+ ...Object . keys ( sortByAliases ) ,
46+ ] ) ;
47+
3748// Minimal domain adapter for PhaseAdvancer to fetch phase-specific facts.
3849// For now this returns an empty factResponses array which makes the
3950// PhaseAdvancer default to conservative behavior when such facts are needed.
@@ -371,6 +382,11 @@ async function searchByLegacyId(currentUser, legacyId, page, perPage) {
371382async function searchChallenges ( currentUser , criteria ) {
372383 const page = criteria . page || 1 ;
373384 const perPage = criteria . perPage || 20 ;
385+
386+ if ( criteria . sortBy && sortByAliases [ criteria . sortBy ] ) {
387+ criteria . sortBy = sortByAliases [ criteria . sortBy ] ;
388+ }
389+
374390 // Log the requested search filter (omit pagination for brevity)
375391 try {
376392 const filterToLog = _ . omit ( criteria , [ "page" , "perPage" ] ) ;
@@ -891,12 +907,39 @@ async function searchChallenges(currentUser, criteria) {
891907
892908 const prismaQuery = {
893909 ...prismaFilter ,
894- take : criteria . perPage ,
895- skip : ( criteria . page - 1 ) * criteria . perPage ,
910+ take : perPage ,
911+ skip : ( page - 1 ) * perPage ,
896912 orderBy : [ sortFilter ] ,
897913 include : includeReturnFields ,
898914 } ;
899915
916+ try {
917+ const logContext = {
918+ where : prismaFilter . where ,
919+ orderBy : prismaQuery . orderBy ,
920+ pagination : {
921+ page,
922+ perPage,
923+ take : perPage ,
924+ skip : ( page - 1 ) * perPage ,
925+ } ,
926+ groupsToFilter,
927+ accessibleGroups,
928+ } ;
929+ const logPayload = JSON . stringify ( logContext , ( _key , value ) => {
930+ if ( typeof value === "bigint" ) {
931+ return value . toString ( ) ;
932+ }
933+ if ( value instanceof Date ) {
934+ return value . toISOString ( ) ;
935+ }
936+ return value ;
937+ } ) ;
938+ logger . info ( `SearchChallenges prisma query: ${ logPayload } ` ) ;
939+ } catch ( logError ) {
940+ logger . warn ( `SearchChallenges prisma logging failed: ${ logError . message } ` ) ;
941+ }
942+
900943 let challenges = [ ] ;
901944 let total = 0 ;
902945 try {
@@ -997,7 +1040,7 @@ searchChallenges.schema = {
9971040 projectId : Joi . number ( ) . integer ( ) . positive ( ) ,
9981041 forumId : Joi . number ( ) . integer ( ) ,
9991042 legacyId : Joi . number ( ) . integer ( ) . positive ( ) ,
1000- status : Joi . string ( ) . valid ( _ . values ( ChallengeStatusEnum ) ) ,
1043+ status : Joi . string ( ) . valid ( _ . values ( ChallengeStatusEnum ) ) . insensitive ( ) ,
10011044 group : Joi . string ( ) ,
10021045 startDateStart : Joi . date ( ) ,
10031046 startDateEnd : Joi . date ( ) ,
@@ -1020,9 +1063,9 @@ searchChallenges.schema = {
10201063 updatedBy : Joi . string ( ) ,
10211064 isLightweight : Joi . boolean ( ) . default ( false ) ,
10221065 memberId : Joi . string ( ) ,
1023- sortBy : Joi . string ( ) . valid ( _ . values ( constants . validChallengeParams ) ) ,
1066+ sortBy : Joi . string ( ) . valid ( ... allowedSortByValues ) ,
10241067 sortOrder : Joi . string ( ) . valid ( [ "asc" , "desc" ] ) ,
1025- groups : Joi . array ( ) . items ( Joi . optionalId ( ) ) . unique ( ) . min ( 1 ) ,
1068+ groups : Joi . array ( ) . items ( Joi . optionalId ( ) ) . unique ( ) ,
10261069 ids : Joi . array ( ) . items ( Joi . optionalId ( ) ) . unique ( ) . min ( 1 ) ,
10271070 isTask : Joi . boolean ( ) ,
10281071 taskIsAssigned : Joi . boolean ( ) ,
@@ -2437,7 +2480,7 @@ updateChallenge.schema = {
24372480 allowedRegistrants : Joi . array ( ) . items ( Joi . string ( ) . trim ( ) . lowercase ( ) ) . optional ( ) ,
24382481 } )
24392482 . optional ( ) ,
2440- status : Joi . string ( ) . valid ( _ . values ( ChallengeStatusEnum ) ) ,
2483+ status : Joi . string ( ) . valid ( _ . values ( ChallengeStatusEnum ) ) . insensitive ( ) ,
24412484 attachments : Joi . array ( ) . items (
24422485 Joi . object ( ) . keys ( {
24432486 id : Joi . id ( ) ,
0 commit comments