notifyExpiredTokens fixes

This commit is contained in:
carlosmonastyrski
2025-04-16 12:48:00 -03:00
parent 23a5a7a624
commit 965084cc0c
4 changed files with 70 additions and 68 deletions
@@ -28,51 +28,36 @@ export const serviceTokenDALFactory = (db: TDbClient) => {
}
};
const findExpiredTokens = async (tx?: Knex, batchSize = 1000) => {
const findExpiringTokens = async (tx?: Knex, batchSize = 500, offset = 0) => {
try {
const allDocs: { name: string; projectName: string; createdByEmail: string; id: string; projectId: string }[] =
[];
let offset = 0;
let hasMoreRecords = true;
const batch: { name: string; projectName: string; createdByEmail: string; id: string; projectId: string }[] =
await (tx || db.replicaNode())(TableName.ServiceToken)
.leftJoin<TUsers>(
TableName.Users,
`${TableName.Users}.id`,
db.raw(`${TableName.ServiceToken}."createdBy"::uuid`)
)
.join(TableName.Project, `${TableName.Project}.id`, `${TableName.ServiceToken}.projectId`)
.whereRaw(
`${TableName.ServiceToken}."expiresAt" < NOW() + INTERVAL '1 day' AND ${TableName.ServiceToken}."expiryNotificationSent" = false`
)
.whereNotNull(`${TableName.Users}.email`)
.select(
db.ref("id").withSchema(TableName.ServiceToken),
db.ref("name").withSchema(TableName.ServiceToken),
db.ref("projectId").withSchema(TableName.ServiceToken),
db.ref("createdBy").withSchema(TableName.ServiceToken),
db.ref("email").withSchema(TableName.Users).as("createdByEmail"),
db.ref("name").withSchema(TableName.Project).as("projectName")
)
.limit(batchSize)
.offset(offset);
while (hasMoreRecords) {
// eslint-disable-next-line
const batch: { name: string; projectName: string; createdByEmail: string; id: string; projectId: string }[] =
// eslint-disable-next-line no-await-in-loop
await (tx || db.replicaNode())(TableName.ServiceToken)
.leftJoin<TUsers>(
TableName.Users,
`${TableName.Users}.id`,
db.raw(`${TableName.ServiceToken}."createdBy"::uuid`)
)
.join(TableName.Project, `${TableName.Project}.id`, `${TableName.ServiceToken}.projectId`)
.whereRaw(
`${TableName.ServiceToken}."expiresAt" < NOW() + INTERVAL '1 day' AND ${TableName.ServiceToken}."expiryNotificationSent" = false`
)
.whereNotNull(`${TableName.Users}.email`)
.select(
db.ref("id").withSchema(TableName.ServiceToken),
db.ref("name").withSchema(TableName.ServiceToken),
db.ref("projectId").withSchema(TableName.ServiceToken),
db.ref("createdBy").withSchema(TableName.ServiceToken),
db.ref("email").withSchema(TableName.Users).as("createdByEmail"),
db.ref("name").withSchema(TableName.Project).as("projectName")
)
.limit(batchSize)
.offset(offset);
if (batch.length === 0) {
hasMoreRecords = false;
} else {
allDocs.push(...batch);
offset += batchSize;
}
}
return allDocs;
return batch;
} catch (err) {
throw new DatabaseError({ error: err, name: "FindExpiredTokens" });
}
};
return { ...stOrm, findById, findExpiredTokens };
return { ...stOrm, findById, findExpiringTokens };
};