@@ -314,7 +314,7 @@ router.get("/current", async function (req, res) {
314314 completed : false ,
315315 } )
316316 . sort ( { number : - 1 } )
317- . select ( "setups setupOrder number" )
317+ . select ( "setups setupOrder number numRounds " )
318318 . populate ( [
319319 {
320320 path : "setups" ,
@@ -341,10 +341,29 @@ router.get("/current", async function (req, res) {
341341 return ;
342342 }
343343
344+ // Fetch round settings for all rounds (filter out round 0 if it exists)
345+ const rounds = await models . CompetitiveRound . find ( {
346+ season : currentSeason . number ,
347+ number : { $gt : 0 } ,
348+ } )
349+ . select ( "number minimumPoints" )
350+ . sort ( { number : 1 } )
351+ . lean ( ) ;
352+
353+ // Build roundSettings object keyed by round number (1-indexed)
354+ const roundSettings = { } ;
355+ for ( const round of rounds ) {
356+ roundSettings [ round . number ] = {
357+ minimumPoints : round . minimumPoints ?? constants . minimumPointsForCompetitive ,
358+ } ;
359+ }
360+
344361 res . json ( {
345362 seasonNumber : currentSeason . number ,
346363 setups : currentSeason . setups ,
347364 setupOrder : currentSeason . setupOrder ,
365+ numRounds : currentSeason . numRounds ,
366+ roundSettings : roundSettings ,
348367 } ) ;
349368 } catch ( e ) {
350369 logger . error ( e ) ;
@@ -561,6 +580,83 @@ router.post("/updateSetupOrder", async function (req, res) {
561580 res . status ( 500 ) ;
562581 res . send ( "Error updating setup order." ) ;
563582 }
583+
584+ // Update round settings (minimumPoints) for the current season
585+ router . post ( "/updateRoundSettings" , async function ( req , res ) {
586+ try {
587+ var userId = await routeUtils . verifyLoggedIn ( req ) ;
588+
589+ if ( ! ( await routeUtils . verifyPermission ( res , userId , "manageCompetitive" ) ) )
590+ return ;
591+
592+ const roundSettings = req . body . roundSettings ;
593+
594+ if ( ! roundSettings || typeof roundSettings !== "object" ) {
595+ res . status ( 400 ) ;
596+ res . send ( "roundSettings must be an object." ) ;
597+ return ;
598+ }
599+
600+ const currentSeason = await models . CompetitiveSeason . findOne ( {
601+ completed : false ,
602+ } )
603+ . sort ( { number : - 1 } )
604+ . select ( "number numRounds" )
605+ . lean ( ) ;
606+
607+ if ( ! currentSeason ) {
608+ res . status ( 404 ) ;
609+ res . send ( "No season in progress." ) ;
610+ return ;
611+ }
612+
613+ // Get existing rounds for this season
614+ const existingRounds = await models . CompetitiveRound . find ( {
615+ season : currentSeason . number ,
616+ } )
617+ . select ( "number" )
618+ . lean ( ) ;
619+ const existingRoundNumbers = new Set ( existingRounds . map ( ( r ) => r . number ) ) ;
620+
621+ // Validate and update each round's settings
622+ for ( const [ roundNumberStr , settings ] of Object . entries ( roundSettings ) ) {
623+ const roundNumber = Number . parseInt ( roundNumberStr ) ;
624+
625+ if ( isNaN ( roundNumber ) || roundNumber < 1 || roundNumber > currentSeason . numRounds ) {
626+ res . status ( 400 ) ;
627+ res . send ( `Invalid round number: ${ roundNumberStr } ` ) ;
628+ return ;
629+ }
630+
631+ // Skip rounds that haven't been created yet
632+ if ( ! existingRoundNumbers . has ( roundNumber ) ) {
633+ continue ;
634+ }
635+
636+ if ( settings . minimumPoints !== undefined ) {
637+ const minPoints = Number . parseInt ( settings . minimumPoints ) ;
638+ if ( isNaN ( minPoints ) || minPoints < 0 ) {
639+ res . status ( 400 ) ;
640+ res . send ( `Invalid minimumPoints for round ${ roundNumber } : must be a non-negative number.` ) ;
641+ return ;
642+ }
643+
644+ // Update the round document
645+ await models . CompetitiveRound . updateOne (
646+ { season : currentSeason . number , number : roundNumber } ,
647+ { $set : { minimumPoints : minPoints } }
648+ ) ;
649+ }
650+ }
651+
652+ routeUtils . createModAction ( userId , "Update Competitive Round Settings" , [ ] ) ;
653+
654+ res . sendStatus ( 200 ) ;
655+ } catch ( e ) {
656+ logger . error ( e ) ;
657+ res . status ( 500 ) ;
658+ res . send ( "Error updating round settings." ) ;
659+ }
564660} ) ;
565661
566662module . exports = router ;
0 commit comments