refactor(socket.io): deprecate SocketModules.chats.loadPinnedMessages in favour of api.chats.getPinnedMessages"

This commit is contained in:
Julian Lam
2023-11-17 11:37:51 -05:00
parent f9dc35021d
commit 401e8636bd
7 changed files with 65 additions and 12 deletions

View File

@@ -210,6 +210,8 @@ paths:
$ref: 'write/chats/roomId/owners/uid.yaml'
/chats/{roomId}/messages:
$ref: 'write/chats/roomId/messages.yaml'
/chats/{roomId}/messages/pinned:
$ref: 'write/chats/roomId/messages/pinned.yaml'
/chats/{roomId}/messages/{mid}:
$ref: 'write/chats/roomId/messages/mid.yaml'
/chats/{roomId}/messages/{mid}/pin:

View File

@@ -0,0 +1,39 @@
get:
tags:
- chats
summary: get pinned messages
description: >
This operation retrieves a list of pinned messages for a given chat room.
This call will always return a maximum of 50 items, of which the result set can be offset based on the passed-in `start` parameter.
parameters:
- in: path
name: roomId
schema:
type: number
required: true
description: a valid chat room id
example: 1
- in: path
name: start
schema:
type: number
required: true
description: index to start returning results from
example: 0
responses:
'200':
description: Pinned messages successfully retrieved
content:
application/json:
schema:
type: object
properties:
status:
$ref: ../../../../components/schemas/Status.yaml#/Status
response:
type: object
properties:
messages:
type: array
items:
$ref: ../../../../components/schemas/Chats.yaml#/MessageObject

View File

@@ -58,11 +58,8 @@ define('forum/chats/pinned-messages', ['api', 'alerts'], function (api, alerts)
}
async function loadData(start) {
const data = await socket.emit('modules.chats.loadPinnedMessages', {
roomId: ajaxify.data.roomId,
start: start,
});
return data;
const { messages } = await api.get(`/chats/${ajaxify.data.roomId}/messages/pinned`, { start });
return messages;
}
pinnedMessages.pin = function (mid, roomId) {

View File

@@ -320,6 +320,16 @@ chatsAPI.listMessages = async (caller, { uid, roomId, start, direction = null })
return { messages };
};
chatsAPI.getPinnedMessages = async (caller, { start, roomId }) => {
start = parseInt(start, 10) || 0;
const isInRoom = await messaging.isUserInRoom(caller.uid, roomId);
if (!isInRoom) {
throw new Error('[[error:no-privileges]]');
}
const messages = await messaging.getPinnedMessages(roomId, caller.uid, start, start + 49);
return { messages };
};
chatsAPI.getMessage = async (caller, { mid, roomId }) => {
const messages = await messaging.getMessagesData([mid], caller.uid, roomId, false);
return messages.pop();

View File

@@ -152,6 +152,12 @@ Chats.messages.list = async (req, res) => {
helpers.formatApiResponse(200, res, { messages });
};
Chats.messages.getPinned = async (req, res) => {
const { start } = req.query;
helpers.formatApiResponse(200, res, await api.chats.getPinnedMessages(req, { start, ...req.params }));
};
Chats.messages.get = async (req, res) => {
const { mid, roomId } = req.params;

View File

@@ -36,6 +36,7 @@ module.exports = function () {
setupApiRoute(router, 'delete', '/:roomId/owners/:uid', [...middlewares, middleware.assert.room, middleware.assert.user], controllers.write.chats.toggleOwner);
setupApiRoute(router, 'get', '/:roomId/messages', [...middlewares, middleware.assert.room], controllers.write.chats.messages.list);
setupApiRoute(router, 'get', '/:roomId/messages/pinned', [...middlewares, middleware.assert.room], controllers.write.chats.messages.getPinned);
setupApiRoute(router, 'get', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.get);
setupApiRoute(router, 'put', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.edit);
setupApiRoute(router, 'post', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.restore);

View File

@@ -202,16 +202,14 @@ SocketModules.chats.searchMessages = async (socket, data) => {
};
SocketModules.chats.loadPinnedMessages = async (socket, data) => {
sockets.warnDeprecated(socket, 'GET /api/v3/chats/:roomId/messages/pinned');
if (!data || !data.roomId || !utils.isNumber(data.start)) {
throw new Error('[[error:invalid-data]]');
}
const isInRoom = await Messaging.isUserInRoom(socket.uid, data.roomId);
if (!isInRoom) {
throw new Error('[[error:no-privileges]]');
}
const start = parseInt(data.start, 10) || 0;
const pinnedMsgs = await Messaging.getPinnedMessages(data.roomId, socket.uid, start, start + 49);
return pinnedMsgs;
const { messages } = await api.chats.getPinnedMessages(socket, data);
return messages;
};
SocketModules.chats.typing = async (socket, data) => {