(users)
| 500 | |
| 501 | if (!userStatusExists || !data?.currentStatus) { |
| 502 | const newUserStatusRef = userStatusModel.doc(); |
| 503 | const newUserStatusData = { |
| 504 | userId, |
| 505 | lastOooUntil: null, |
| 506 | currentStatus: statusToUpdate, |
| 507 | }; |
| 508 | state === userState.ACTIVE ? summary.activeUsersAltered++ : summary.idleUsersAltered++; |
| 509 | if (state === userState.IDLE) await addGroupIdleRoleToDiscordUser(userId); |
| 510 | batch.set(newUserStatusRef, newUserStatusData); |
| 511 | } else { |
| 512 | const currentStatusData = data?.currentStatus || {}; |
| 513 | const currentState = currentStatusData.state; |
| 514 | const currentUntil = currentStatusData.until; |
| 515 | if (currentState === state) { |
| 516 | currentState === userState.ACTIVE ? summary.activeUsersUnaltered++ : summary.idleUsersUnaltered++; |
| 517 | continue; |
| 518 | } else if (currentState === userState.ONBOARDING) { |
| 519 | const docRef = userStatusModel.doc(id); |
| 520 | if (state === userState.ACTIVE) { |
| 521 | const updatedStatusData = { |
| 522 | currentStatus: statusToUpdate, |
| 523 | }; |
| 524 | summary.onboardingUsersAltered++; |
| 525 | batch.update(docRef, updatedStatusData); |
| 526 | } else { |
| 527 | summary.onboardingUsersUnaltered++; |
| 528 | } |
| 529 | } else if (currentState === userState.OOO) { |
| 530 | const docRef = userStatusModel.doc(id); |
| 531 | state === userState.ACTIVE ? summary.activeUsersAltered++ : summary.idleUsersAltered++; |
| 532 | |
| 533 | const currentDate = new Date(); |
| 534 | const untilDate = new Date(currentUntil); |
| 535 | |
| 536 | const timeDifferenceMilliseconds = currentDate.setUTCHours(0, 0, 0, 0) - untilDate.setUTCHours(0, 0, 0, 0); |
| 537 | const timeDifferenceDays = Math.floor(timeDifferenceMilliseconds / (24 * 60 * 60 * 1000)); |
| 538 | |
| 539 | if (timeDifferenceDays >= 1) { |
| 540 | if (state === userState.IDLE) await addGroupIdleRoleToDiscordUser(userId); |
| 541 | const lastOooUntilUpdate = resolveLastOooUntil({ |
| 542 | previousState: currentState, |
| 543 | previousUntil: currentUntil, |
| 544 | nextState: state, |
| 545 | fallbackTimestamp: currentTimeStamp, |
| 546 | }); |
| 547 | batch.update(docRef, { |
| 548 | currentStatus: statusToUpdate, |
| 549 | ...(lastOooUntilUpdate !== undefined && { lastOooUntil: lastOooUntilUpdate }), |
| 550 | }); |
| 551 | } else { |
| 552 | const getNextDayAfterUntil = getNextDayTimeStamp(currentUntil); |
| 553 | batch.update(docRef, { |
| 554 | futureStatus: { |
| 555 | ...statusToUpdate, |
| 556 | from: getNextDayAfterUntil, |
| 557 | }, |
| 558 | }); |
| 559 | } |
no test coverage detected