diff --git a/apps/meteor/app/api/server/v1/rooms.ts b/apps/meteor/app/api/server/v1/rooms.ts index bb4278bbb70fb..a25b451d51514 100644 --- a/apps/meteor/app/api/server/v1/rooms.ts +++ b/apps/meteor/app/api/server/v1/rooms.ts @@ -110,23 +110,6 @@ export async function findRoomByIdOrName({ return room; } -API.v1.addRoute( - 'rooms.nameExists', - { - authRequired: true, - validateParams: isGETRoomsNameExists, - }, - { - async get() { - const { roomName } = this.queryParams; - - const room = await Rooms.findOneByName(roomName, { projection: { _id: 1 } }); - - return API.v1.success({ exists: !!room }); - }, - }, -); - const roomDeleteEndpoint = API.v1.post( 'rooms.delete', { @@ -1073,6 +1056,39 @@ const roomsBannedUsersResponseSchema = ajv.compile<{ }); export const roomEndpoints = API.v1 + .get( + 'rooms.nameExists', + { + authRequired: true, + query: ajv.compile<{ roomName: string }>({ + type: 'object', + properties: { + roomName: { type: 'string' }, + }, + required: ['roomName'], + additionalProperties: false, + }), + response: { + 200: ajv.compile<{ exists: boolean }>({ + type: 'object', + properties: { + success: { type: 'boolean', enum: [true] }, + exists: { type: 'boolean' }, + }, + required: ['success', 'exists'], + additionalProperties: false, + }), + 400: validateBadRequestErrorResponse, + 401: validateUnauthorizedErrorResponse, + }, + }, + async function action() { + const { roomName } = this.queryParams; + const room = await Rooms.findOneByName(roomName, { projection: { _id: 1 } }); + + return API.v1.success({ exists: !!room }); + }, + ) .get( 'rooms.roles', { diff --git a/apps/meteor/tests/end-to-end/api/rooms.ts b/apps/meteor/tests/end-to-end/api/rooms.ts index fada0b0287546..c8cbac9b20217 100644 --- a/apps/meteor/tests/end-to-end/api/rooms.ts +++ b/apps/meteor/tests/end-to-end/api/rooms.ts @@ -690,6 +690,7 @@ describe('[Rooms]', () => { it('should return 401 unauthorized when user is not logged in', (done) => { void request .get(api('rooms.nameExists')) + .query({ roomName: 'test' }) .expect('Content-Type', 'application/json') .expect(401) .expect((res) => { diff --git a/packages/rest-typings/src/v1/rooms.ts b/packages/rest-typings/src/v1/rooms.ts index 273cc76869d7f..968b0feca3c7b 100644 --- a/packages/rest-typings/src/v1/rooms.ts +++ b/packages/rest-typings/src/v1/rooms.ts @@ -451,23 +451,6 @@ const RoomsSaveRoomSettingsSchema = { export const isRoomsSaveRoomSettingsProps = ajv.compile(RoomsSaveRoomSettingsSchema); -type GETRoomsNameExists = { - roomName: string; -}; - -const GETRoomsNameExistsSchema = { - type: 'object', - properties: { - roomName: { - type: 'string', - }, - }, - required: ['roomName'], - additionalProperties: false, -}; - -export const isGETRoomsNameExists = ajvQuery.compile(GETRoomsNameExistsSchema); - type RoomsIsMemberProps = { roomId: string } & ({ username: string } | { userId: string }); const RoomsIsMemberPropsSchema = { @@ -915,12 +898,6 @@ export type RoomsEndpoints = { }; }; - '/v1/rooms.nameExists': { - GET: (params: { roomName: string }) => { - exists: boolean; - }; - }; - '/v1/rooms.get': { GET: (params: { updatedSince: string }) => { update: IRoom[];