(userId, updatedStatusData)
| 208 | delete newStatusData.currentStatus; |
| 209 | } else { |
| 210 | newStatusData.futureStatus = {}; |
| 211 | } |
| 212 | } |
| 213 | } |
| 214 | const lastOooUntilUpdate = resolveLastOooUntil({ |
| 215 | previousState, |
| 216 | previousUntil, |
| 217 | nextState: requestedNextState, |
| 218 | fallbackTimestamp: newStatusData.currentStatus?.updatedAt, |
| 219 | }); |
| 220 | if (lastOooUntilUpdate !== undefined) { |
| 221 | newStatusData.lastOooUntil = lastOooUntilUpdate; |
| 222 | } |
| 223 | if ( |
| 224 | userStatusData.currentStatus?.state === userState.IDLE && |
| 225 | newStatusData.currentStatus?.state !== userState.IDLE |
| 226 | ) { |
| 227 | await removeGroupIdleRoleFromDiscordUser(userId); |
| 228 | } |
| 229 | await userStatusModel.doc(docId).update(newStatusData); |
| 230 | return { id: docId, userStatusExists: true, data: newStatusData }; |
| 231 | } else { |
| 232 | // the user doc doesnt exist meaning we need to create one |
| 233 | if (Object.keys(newStatusData).includes("currentStatus")) { |
| 234 | filterStatusData(newStatusData); |
| 235 | const isNewStateOOO = newStatusData.currentStatus.state === userState.OOO; |
| 236 | if (isNewStateOOO) { |
| 237 | if (newStatusData.currentStatus.from >= tomorrow) { |
| 238 | newStatusData.futureStatus = { ...newStatusData.currentStatus }; |
| 239 | delete newStatusData.currentStatus; |
| 240 | } |
| 241 | } |
| 242 | } |
| 243 | const initialData = { userId, lastOooUntil: null, ...newStatusData }; |
| 244 | const { id } = await userStatusModel.add(initialData); |
| 245 | return { id, userStatusExists: false, data: newStatusData }; |
| 246 | } |
| 247 | } catch (error) { |
| 248 | logger.error(`error in updating User Status Document ${error}`); |
| 249 | throw error; |
| 250 | } |
| 251 | }; |
| 252 | |
| 253 | /** |
| 254 | * @param userId { String }: Id of the User |
| 255 | * @param newStatusData { Object }: Data to be Updated |
| 256 | * @returns Promise<userStatusModel|Object> |
| 257 | */ |
| 258 | |
| 259 | const updateAllUserStatus = async () => { |
| 260 | const summary = { |
| 261 | usersCount: 0, |
| 262 | oooUsersAltered: 0, |
| 263 | oooUsersUnaltered: 0, |
| 264 | nonOooUsersAltered: 0, |
| 265 | nonOooUsersUnaltered: 0, |
| 266 | }; |
| 267 | try { |
no test coverage detected