From 3899d1248095071a309b2cbf43a29c9c21c45328 Mon Sep 17 00:00:00 2001 From: CodeMatrix1 Date: Wed, 18 Mar 2026 12:32:12 +0530 Subject: [PATCH 1/2] refactor(api): migrate users.delete endpoint to new API.v1 format --- apps/meteor/app/api/server/v1/users.ts | 58 +++++++++++++++++++------- packages/rest-typings/src/v1/users.ts | 4 -- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/apps/meteor/app/api/server/v1/users.ts b/apps/meteor/app/api/server/v1/users.ts index 50c65abcd8d12..6b02d155b97ba 100644 --- a/apps/meteor/app/api/server/v1/users.ts +++ b/apps/meteor/app/api/server/v1/users.ts @@ -345,21 +345,6 @@ API.v1.addRoute( }, ); -API.v1.addRoute( - 'users.delete', - { authRequired: true, permissionsRequired: ['delete-user'] }, - { - async post() { - const user = await getUserFromParams(this.bodyParams); - const { confirmRelinquish = false } = this.bodyParams; - - const { deletedRooms } = await deleteUser(user._id, confirmRelinquish, this.userId); - - return API.v1.success({ deletedRooms }); - }, - }, -); - API.v1.addRoute( 'users.deleteOwnAccount', { authRequired: true }, @@ -878,6 +863,49 @@ const usersEndpoints = API.v1 return API.v1.success({ suggestions }); }, + ) + .post( + 'users.delete', + { + authRequired: true, + permissionsRequired: ['delete-user'], + body: ajv.compile({ + type: 'object', + properties: { + userId: { type: 'string' }, + username: { type: 'string' }, + confirmRelinquish: { type: 'boolean' }, + }, + additionalProperties: true, + }), + response: { + 200: ajv.compile({ + type: 'object', + properties: { + deletedRooms: { + type: 'array', + items: { type: 'string' }, + }, + success: { + type: 'boolean', + enum: [true], + }, + }, + required: ['deletedRooms', 'success'], + additionalProperties: false, + }), + 401: validateUnauthorizedErrorResponse, + 400: validateBadRequestErrorResponse, + }, + }, + async function action() { + const user = await getUserFromParams(this.bodyParams); + const { confirmRelinquish = false } = this.bodyParams; + + const { deletedRooms } = await deleteUser(user._id, confirmRelinquish, this.userId); + + return API.v1.success({ deletedRooms }); + }, ); API.v1.addRoute( diff --git a/packages/rest-typings/src/v1/users.ts b/packages/rest-typings/src/v1/users.ts index 565620d31ba5e..f1bc6ea81ef8a 100644 --- a/packages/rest-typings/src/v1/users.ts +++ b/packages/rest-typings/src/v1/users.ts @@ -351,10 +351,6 @@ export type UsersEndpoints = { }; }; - '/v1/users.delete': { - POST: (params: { userId: IUser['_id']; confirmRelinquish?: boolean }) => void; - }; - '/v1/users.getAvatar': { GET: (params: { userId?: string; username?: string; user?: string }) => void; }; From 8a5379da8644ce1c816b961a20d337ba2290e872 Mon Sep 17 00:00:00 2001 From: CodeMatrix1 Date: Wed, 18 Mar 2026 12:46:36 +0530 Subject: [PATCH 2/2] changeset --- .changeset/migrate-users-delete-to-AJV.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/migrate-users-delete-to-AJV.md diff --git a/.changeset/migrate-users-delete-to-AJV.md b/.changeset/migrate-users-delete-to-AJV.md new file mode 100644 index 0000000000000..cd7b3370f91a7 --- /dev/null +++ b/.changeset/migrate-users-delete-to-AJV.md @@ -0,0 +1,6 @@ +--- +'@rocket.chat/rest-typings': minor +'@rocket.chat/meteor': minor +--- + +Migrate users.delete endpoint to make it openAPI and AJV compatible