@@ -157,8 +157,16 @@ const updateUserStatus = async (userId, newStatusData) => {
157
157
*/
158
158
159
159
const updateAllUserStatus = async ( ) => {
160
+ const summary = {
161
+ usersCount : 0 ,
162
+ oooUsersAltered : 0 ,
163
+ oooUsersUnaltered : 0 ,
164
+ nonOooUsersAltered : 0 ,
165
+ nonOooUsersUnaltered : 0 ,
166
+ } ;
160
167
try {
161
168
const userStatusDocs = await userStatusModel . where ( "futureStatus.state" , "in" , [ "ACTIVE" , "IDLE" , "OOO" ] ) . get ( ) ;
169
+ summary . usersCount = userStatusDocs . _size ;
162
170
const batch = firestore . batch ( ) ;
163
171
const today = new Date ( ) . getTime ( ) ;
164
172
userStatusDocs . forEach ( async ( document ) => {
@@ -170,15 +178,23 @@ const updateAllUserStatus = async () => {
170
178
const { state : futureState } = futureStatus ;
171
179
if ( futureState === "ACTIVE" || futureState === "IDLE" ) {
172
180
if ( today >= futureStatus . from ) {
181
+ // OOO period is over and we need to update their current status
173
182
newStatusData . currentStatus = { ...futureStatus , until : "" , updatedAt : today } ;
174
- newStatusData . futureStatus = { } ;
183
+ delete newStatusData . futureStatus ;
175
184
toUpdate = ! toUpdate ;
185
+ summary . oooUsersAltered ++ ;
186
+ } else {
187
+ summary . oooUsersUnaltered ++ ;
176
188
}
177
189
} else {
190
+ // futureState is OOO
178
191
if ( today > futureStatus . until ) {
179
- newStatusData . futureStatus = { } ;
192
+ // the OOO period is over
193
+ delete newStatusData . futureStatus ;
180
194
toUpdate = ! toUpdate ;
195
+ summary . nonOooUsersAltered ++ ;
181
196
} else if ( today <= doc . futureStatus . until && today >= doc . futureStatus . from ) {
197
+ // the current date i.e today lies in between the from and until so we need to swap the status
182
198
let newCurrentStatus = { } ;
183
199
let newFutureStatus = { } ;
184
200
newCurrentStatus = { ...futureStatus , updatedAt : today } ;
@@ -188,6 +204,9 @@ const updateAllUserStatus = async () => {
188
204
newStatusData . currentStatus = newCurrentStatus ;
189
205
newStatusData . futureStatus = newFutureStatus ;
190
206
toUpdate = ! toUpdate ;
207
+ summary . nonOooUsersAltered ++ ;
208
+ } else {
209
+ summary . nonOooUsersUnaltered ++ ;
191
210
}
192
211
}
193
212
if ( toUpdate ) {
@@ -200,13 +219,12 @@ const updateAllUserStatus = async () => {
200
219
) ;
201
220
}
202
221
await batch . commit ( ) ;
203
- return { status : 204 , message : "User Status updated Successfully." } ;
222
+ return summary ;
204
223
} catch ( error ) {
205
224
logger . error ( `error in updating User Status Documents ${ error } ` ) ;
206
225
return { status : 500 , message : "User Status couldn't be updated Successfully." } ;
207
226
}
208
227
} ;
209
-
210
228
/**
211
229
* Updates the user status based on a new task assignment.
212
230
* @param {string } userId - The ID of the user.
0 commit comments