(userId)
| 456 | case userState.OOO: |
| 457 | return updateFutureStatusToState(userStatusModel, latestStatusData, userState.IDLE); |
| 458 | case userState.IDLE: |
| 459 | return generateAlreadyExistingStatusResponse(userState.IDLE); |
| 460 | default: |
| 461 | await addGroupIdleRoleToDiscordUser(userId); |
| 462 | return updateCurrentStatusToState(userStatusModel, latestStatusData, userState.IDLE); |
| 463 | } |
| 464 | } |
| 465 | } catch (error) { |
| 466 | return generateErrorResponse(error.message); |
| 467 | } |
| 468 | }; |
| 469 | |
| 470 | const batchUpdateUsersStatus = async (users) => { |
| 471 | const currentTimeStamp = new Date().getTime(); |
| 472 | const batch = firestore.batch(); |
| 473 | const summary = { |
| 474 | usersCount: users.length, |
| 475 | unprocessedUsers: 0, |
| 476 | onboardingUsersAltered: 0, |
| 477 | onboardingUsersUnaltered: 0, |
| 478 | activeUsersAltered: 0, |
| 479 | activeUsersUnaltered: 0, |
| 480 | idleUsersAltered: 0, |
| 481 | idleUsersUnaltered: 0, |
| 482 | }; |
| 483 | |
| 484 | for (const { userId, state } of users) { |
| 485 | let latestStatusData; |
| 486 | try { |
| 487 | latestStatusData = await getUserStatus(userId); |
| 488 | } catch (error) { |
| 489 | summary.unprocessedUsers++; |
| 490 | continue; |
| 491 | } |
| 492 | const { id, userStatusExists, data } = latestStatusData; |
| 493 | const statusToUpdate = { |
| 494 | state, |
| 495 | message: "", |
| 496 | from: new Date().setUTCHours(0, 0, 0, 0), |
| 497 | until: "", |
| 498 | updatedAt: currentTimeStamp, |
| 499 | }; |
| 500 | |
| 501 | if (!userStatusExists || !data?.currentStatus) { |
| 502 | const newUserStatusRef = userStatusModel.doc(); |
| 503 | const newUserStatusData = { |
no test coverage detected