Automatically set old groups as inactive

This commit is contained in:
Kalle
2024-11-12 22:28:07 +02:00
parent c533859ec9
commit d9fd5ab371
2 changed files with 35 additions and 1 deletions

View File

@@ -94,8 +94,10 @@ if (!global.appStartSignal && process.env.NODE_ENV === "production") {
// every hour
cron.schedule("0 */1 * * *", async () => {
const { numDeletedRows } = await QRepository.deleteOldTrust();
logger.info(`Deleted ${numDeletedRows} old trusts`);
const { numUpdatedRows } = await QRepository.setOldGroupsAsInactive();
logger.info(`Set ${numUpdatedRows} as inactive`);
});
}

View File

@@ -359,3 +359,35 @@ export async function deleteOldTrust() {
.where("lastUsedAt", "<", dateToDatabaseTimestamp(twoMonthsAgo))
.executeTakeFirst();
}
export async function setOldGroupsAsInactive() {
const oneHourAgo = sub(new Date(), { hours: 1 });
return db.transaction().execute(async (trx) => {
const groupsToSetInactive = await trx
.selectFrom("Group")
.leftJoin("GroupMatch", (join) =>
join.on((eb) =>
eb.or([
eb("GroupMatch.alphaGroupId", "=", eb.ref("Group.id")),
eb("GroupMatch.bravoGroupId", "=", eb.ref("Group.id")),
]),
),
)
.select(["Group.id"])
.where("status", "!=", "INACTIVE")
.where("GroupMatch.id", "is", null)
.where("latestActionAt", "<", dateToDatabaseTimestamp(oneHourAgo))
.execute();
return trx
.updateTable("Group")
.set({ status: "INACTIVE" })
.where(
"Group.id",
"in",
groupsToSetInactive.map((g) => g.id),
)
.executeTakeFirst();
});
}