diff --git a/src/api/chats.js b/src/api/chats.js index 67d2eabe5a..b465513abb 100644 --- a/src/api/chats.js +++ b/src/api/chats.js @@ -73,6 +73,17 @@ chatsAPI.rename = async (caller, data) => { }); }; +chatsAPI.mark = async (caller, data) => { + const { roomId, state } = data; + if (state) { + await messaging.markUnread([caller.uid], roomId); + } else { + await messaging.markRead(caller.uid, roomId); + } + + return messaging.loadRoom(caller.uid, { roomId }); +}; + chatsAPI.users = async (caller, data) => { const [isOwner, users] = await Promise.all([ messaging.isRoomOwner(caller.uid, data.roomId), diff --git a/src/controllers/write/chats.js b/src/controllers/write/chats.js index f009047a61..647e81525f 100644 --- a/src/controllers/write/chats.js +++ b/src/controllers/write/chats.js @@ -53,6 +53,17 @@ Chats.rename = async (req, res) => { helpers.formatApiResponse(200, res, roomObj); }; +Chats.mark = async (req, res) => { + const state = req.method === 'PUT' ? 1 : 0; + const roomObj = await api.chats.mark(req, { + ...req.body, + roomId: req.params.roomId, + state, + }); + + helpers.formatApiResponse(200, res, roomObj); +}; + Chats.users = async (req, res) => { const users = await api.chats.users(req, { ...req.params, diff --git a/src/routes/write/chats.js b/src/routes/write/chats.js index 1e5d870ca5..a92db701f7 100644 --- a/src/routes/write/chats.js +++ b/src/routes/write/chats.js @@ -19,6 +19,9 @@ module.exports = function () { setupApiRoute(router, 'put', '/:roomId', [...middlewares, middleware.assert.room, middleware.checkRequired.bind(null, ['name'])], controllers.write.chats.rename); // no route for room deletion, noted here just in case... + setupApiRoute(router, 'put', '/:roomId/state', [...middlewares, middleware.assert.room], controllers.write.chats.mark); + setupApiRoute(router, 'delete', '/:roomId/state', [...middlewares, middleware.assert.room], controllers.write.chats.mark); + setupApiRoute(router, 'get', '/:roomId/users', [...middlewares, middleware.assert.room], controllers.write.chats.users); setupApiRoute(router, 'post', '/:roomId/users', [...middlewares, middleware.assert.room, middleware.checkRequired.bind(null, ['uids'])], controllers.write.chats.invite); setupApiRoute(router, 'delete', '/:roomId/users', [...middlewares, middleware.assert.room, middleware.checkRequired.bind(null, ['uids'])], controllers.write.chats.kick);