@@ -14,6 +14,7 @@ const moment_ = require('moment');
1414const jwt = require ( 'jsonwebtoken' ) ;
1515const userHelper = require ( '../helpers/userHelper' ) ( ) ;
1616const TimeEntry = require ( '../models/timeentry' ) ;
17+ const Team = require ( '../models/team' ) ;
1718const logger = require ( '../startup/logger' ) ;
1819const Badge = require ( '../models/badge' ) ;
1920// eslint-disable-next-line no-unused-vars
@@ -477,7 +478,39 @@ const createControllerMethods = function (UserProfile, Project, cache) {
477478 }
478479
479480 if ( req . body . teams !== undefined ) {
480- record . teams = Array . from ( new Set ( req . body . teams ) ) ;
481+ const updatedTeams = Array . from ( new Set ( req . body . teams ) ) ;
482+
483+ // Find teams that were removed
484+ const removedTeams = record . teams . filter (
485+ ( teamId ) => ! updatedTeams . includes ( teamId . toString ( ) ) ,
486+ ) ;
487+
488+ // Find teams that were added
489+ const addedTeams = updatedTeams . filter (
490+ ( teamId ) => ! record . teams . map ( ( t ) => t . toString ( ) ) . includes ( teamId ) ,
491+ ) ;
492+
493+ // Remove user from Team's members array for each removed team
494+ if ( removedTeams . length > 0 ) {
495+ await Team . updateMany (
496+ { _id : { $in : removedTeams } } ,
497+ { $pull : { members : { userId : mongoose . Types . ObjectId ( record . _id ) } } } ,
498+ ) ;
499+ }
500+
501+ // Add user to Team's members array for each added team
502+ if ( addedTeams . length > 0 ) {
503+ await Team . updateMany (
504+ { _id : { $in : addedTeams } } ,
505+ {
506+ $push : {
507+ members : { userId : mongoose . Types . ObjectId ( record . _id ) , addDateTime : new Date ( ) } ,
508+ } ,
509+ } ,
510+ ) ;
511+ }
512+
513+ record . teams = updatedTeams ;
481514 }
482515
483516 await updateProjects ( req , record ) ;
0 commit comments