From 5374784df63cfb3cb18da9fc84cee791c4195598 Mon Sep 17 00:00:00 2001 From: Apoorv Mishra Date: Fri, 30 Aug 2024 10:02:38 +0530 Subject: [PATCH] New `Replace` type utility (#7476) * fix: Replace type * trigger ci --- server/commands/teamPermanentDeleter.ts | 4 ++-- server/models/base/Model.ts | 11 ++++++----- server/queues/processors/WebsocketsProcessor.ts | 8 ++++---- server/types.ts | 4 ++++ 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/server/commands/teamPermanentDeleter.ts b/server/commands/teamPermanentDeleter.ts index f7bfbbacd7..8509906703 100644 --- a/server/commands/teamPermanentDeleter.ts +++ b/server/commands/teamPermanentDeleter.ts @@ -44,7 +44,7 @@ async function teamPermanentDeleter(team: Team) { where: { teamId, }, - limit: 100, + batchLimit: 100, }, async (attachments, options) => { await sequelize.transaction(async (transaction) => { @@ -72,7 +72,7 @@ async function teamPermanentDeleter(team: Team) { where: { teamId, }, - limit: 100, + batchLimit: 100, }, async (users) => { await sequelize.transaction(async (transaction) => { diff --git a/server/models/base/Model.ts b/server/models/base/Model.ts index df5301c097..e1b0ce76ee 100644 --- a/server/models/base/Model.ts +++ b/server/models/base/Model.ts @@ -5,6 +5,7 @@ import isObject from "lodash/isObject"; import pick from "lodash/pick"; import { FindOptions, NonAttribute } from "sequelize"; import { Model as SequelizeModel } from "sequelize-typescript"; +import { Replace } from "@server/types"; class Model< TModelAttributes extends {} = any, @@ -17,14 +18,14 @@ class Model< * @param callback The function to call for each batch of results */ static async findAllInBatches( - query: FindOptions, + query: Replace, "limit", "batchLimit">, callback: (results: Array, query: FindOptions) => Promise ) { if (!query.offset) { query.offset = 0; } - if (!query.limit) { - query.limit = 10; + if (!query.batchLimit) { + query.batchLimit = 10; } let results; @@ -32,8 +33,8 @@ class Model< // @ts-expect-error this T results = await this.findAll(query); await callback(results, query); - query.offset += query.limit; - } while (results.length >= query.limit); + query.offset += query.batchLimit; + } while (results.length >= query.batchLimit); } /** diff --git a/server/queues/processors/WebsocketsProcessor.ts b/server/queues/processors/WebsocketsProcessor.ts index 4e4bf282e2..d872a914fb 100644 --- a/server/queues/processors/WebsocketsProcessor.ts +++ b/server/queues/processors/WebsocketsProcessor.ts @@ -299,7 +299,7 @@ export default class WebsocketsProcessor { await GroupUser.findAllInBatches( { where: { groupId: event.modelId }, - limit: 100, + batchLimit: 100, }, async (groupUsers) => { for (const groupUser of groupUsers) { @@ -478,7 +478,7 @@ export default class WebsocketsProcessor { where: { groupId: event.modelId, }, - limit: 100, + batchLimit: 100, }, async (groupMemberships) => { for (const groupMembership of groupMemberships) { @@ -532,7 +532,7 @@ export default class WebsocketsProcessor { where: { groupId: event.modelId, }, - limit: 100, + batchLimit: 100, }, async (groupMemberships) => { for (const groupMembership of groupMemberships) { @@ -591,7 +591,7 @@ export default class WebsocketsProcessor { required: true, }, ], - limit: 100, + batchLimit: 100, }, async (groupUsers) => { for (const groupMembership of groupMemberships) { diff --git a/server/types.ts b/server/types.ts index 8fa2fbfee6..46b2c9218d 100644 --- a/server/types.ts +++ b/server/types.ts @@ -540,3 +540,7 @@ export type UnfurlSignature = ( ) => Promise; export type UninstallSignature = (integration: Integration) => Promise; + +export type Replace = { + [P in keyof T as P extends K ? N : P]: T[P extends K ? K : P]; +};