mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	refactor(socket.io): deprecate SocketModules.sortPublicRooms in favour of api.chats.sortPublicRooms
This commit is contained in:
		| @@ -194,6 +194,8 @@ paths: | ||||
|     $ref: 'write/chats.yaml' | ||||
|   /chats/unread: | ||||
|     $ref: 'write/chats/unread.yaml' | ||||
|   /chats/sort: | ||||
|     $ref: 'write/chats/sort.yaml' | ||||
|   /chats/{roomId}: | ||||
|     $ref: 'write/chats/roomId.yaml' | ||||
|   /chats/{roomId}/state: | ||||
|   | ||||
							
								
								
									
										33
									
								
								public/openapi/write/chats/sort.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								public/openapi/write/chats/sort.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| put: | ||||
|   tags: | ||||
|     - chats | ||||
|   summary: sort public chat rooms | ||||
|   description: This operation sorts the publicly available chat rooms. This is a privileged function; only superadmins can call it. | ||||
|   requestBody: | ||||
|     required: true | ||||
|     content: | ||||
|       application/json: | ||||
|         schema: | ||||
|           type: object | ||||
|           properties: | ||||
|             roomIds: | ||||
|               type: array | ||||
|               description: A list of room ids. | ||||
|               example: [1] | ||||
|             scores: | ||||
|               type: array | ||||
|               description: A list of sort orders associated with the passed-in `roomIds` | ||||
|               example: [0] | ||||
|   responses: | ||||
|     '200': | ||||
|       description: Public chat rooms successfully re-ordered. | ||||
|       content: | ||||
|         application/json: | ||||
|           schema: | ||||
|             type: object | ||||
|             properties: | ||||
|               status: | ||||
|                 $ref: ../../components/schemas/Status.yaml#/Status | ||||
|               response: | ||||
|                 type: object | ||||
|                 properties: {} | ||||
| @@ -141,7 +141,7 @@ define('forum/chats', [ | ||||
| 							data.roomIds.push($(el).attr('data-roomid')); | ||||
| 							data.scores.push(idx); | ||||
| 						}); | ||||
| 						await socket.emit('modules.chats.sortPublicRooms', data); | ||||
| 						await api.put('/chats/sort', data); | ||||
| 					}, | ||||
| 				}); | ||||
| 			}); | ||||
|   | ||||
| @@ -84,6 +84,22 @@ chatsAPI.getUnread = async (caller) => { | ||||
| 	return { count }; | ||||
| }; | ||||
|  | ||||
| chatsAPI.sortPublicRooms = async (caller, { roomIds, scores }) => { | ||||
| 	[roomIds, scores].forEach((arr) => { | ||||
| 		if (!Array.isArray(arr) || !arr.every(value => isFinite(value))) { | ||||
| 			throw new Error('[[error:invalid-data]]'); | ||||
| 		} | ||||
| 	}); | ||||
|  | ||||
| 	const isAdmin = await user.isAdministrator(caller.uid); | ||||
| 	if (!isAdmin) { | ||||
| 		throw new Error('[[error:no-privileges]]'); | ||||
| 	} | ||||
|  | ||||
| 	await db.sortedSetAdd(`chat:rooms:public:order`, scores, roomIds); | ||||
| 	require('../cache').del(`chat:rooms:public:order:all`); | ||||
| }; | ||||
|  | ||||
| chatsAPI.get = async (caller, { uid, roomId }) => await messaging.loadRoom(caller.uid, { uid, roomId }); | ||||
|  | ||||
| chatsAPI.post = async (caller, data) => { | ||||
|   | ||||
| @@ -68,7 +68,6 @@ Categories.setWatchState = async (req, res) => { | ||||
| 	} else if (Object.keys(categories.watchStates).includes(state)) { | ||||
| 		state = categories.watchStates[state]; // convert to integer for backend processing | ||||
| 	} else { | ||||
| 		console.log('throwing', cid, uid, state); | ||||
| 		throw new Error('[[error:invalid-data]]'); | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -32,6 +32,13 @@ Chats.create = async (req, res) => { | ||||
| // currently only returns unread count, but open-ended for future additions if warranted. | ||||
| Chats.getUnread = async (req, res) => helpers.formatApiResponse(200, res, await api.chats.getUnread(req)); | ||||
|  | ||||
| Chats.sortPublicRooms = async (req, res) => { | ||||
| 	const { roomIds, scores } = req.body; | ||||
| 	await api.chats.sortPublicRooms(req, { roomIds, scores }); | ||||
|  | ||||
| 	helpers.formatApiResponse(200, res); | ||||
| }; | ||||
|  | ||||
| Chats.exists = async (req, res) => { | ||||
| 	// yes, this is fine. Room existence is checked via middleware :) | ||||
| 	helpers.formatApiResponse(200, res); | ||||
|   | ||||
| @@ -14,6 +14,7 @@ module.exports = function () { | ||||
| 	setupApiRoute(router, 'post', '/', [...middlewares, middleware.checkRequired.bind(null, ['uids'])], controllers.write.chats.create); | ||||
|  | ||||
| 	setupApiRoute(router, 'get', '/unread', [...middlewares], controllers.write.chats.getUnread); | ||||
| 	setupApiRoute(router, 'put', '/sort', [...middlewares, middleware.checkRequired.bind(null, ['roomIds', 'scores'])], controllers.write.chats.sortPublicRooms); | ||||
|  | ||||
| 	setupApiRoute(router, 'head', '/:roomId', [...middlewares, middleware.assert.room], controllers.write.chats.exists); | ||||
| 	setupApiRoute(router, 'get', '/:roomId', [...middlewares, middleware.assert.room], controllers.write.chats.get); | ||||
|   | ||||
| @@ -147,15 +147,13 @@ async function joinLeave(socket, roomIds, method, prefix = 'chat_room') { | ||||
| } | ||||
|  | ||||
| SocketModules.chats.sortPublicRooms = async function (socket, data) { | ||||
| 	if (!data || !Array.isArray(data.scores) || !Array.isArray(data.roomIds)) { | ||||
| 	sockets.warnDeprecated(socket, 'PUT /api/v3/chats/sort'); | ||||
|  | ||||
| 	if (!data) { | ||||
| 		throw new Error('[[error:invalid-data]]'); | ||||
| 	} | ||||
| 	const isAdmin = await user.isAdministrator(socket.uid); | ||||
| 	if (!isAdmin) { | ||||
| 		throw new Error('[[error:no-privileges]]'); | ||||
| 	} | ||||
| 	await db.sortedSetAdd(`chat:rooms:public:order`, data.scores, data.roomIds); | ||||
| 	require('../cache').del(`chat:rooms:public:order:all`); | ||||
|  | ||||
| 	await api.chats.sortPublicRooms(socket, data); | ||||
| }; | ||||
|  | ||||
| SocketModules.chats.searchMembers = async function (socket, data) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user