mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
refactor(socket.io): deprecate SocketModules.chats.isDnD in favour of api.users.getStatus
This commit is contained in:
@@ -64,6 +64,10 @@ paths:
|
|||||||
$ref: 'write/users/uid/content.yaml'
|
$ref: 'write/users/uid/content.yaml'
|
||||||
/users/{uid}/account:
|
/users/{uid}/account:
|
||||||
$ref: 'write/users/uid/account.yaml'
|
$ref: 'write/users/uid/account.yaml'
|
||||||
|
/users/{uid}/status:
|
||||||
|
$ref: 'write/users/uid/status.yaml'
|
||||||
|
/users/{uid}/status/{status}:
|
||||||
|
$ref: 'write/users/uid/status/status.yaml'
|
||||||
/users/{uid}/settings:
|
/users/{uid}/settings:
|
||||||
$ref: 'write/users/uid/settings.yaml'
|
$ref: 'write/users/uid/settings.yaml'
|
||||||
/users/{uid}/password:
|
/users/{uid}/password:
|
||||||
|
|||||||
28
public/openapi/write/users/uid/status.yaml
Normal file
28
public/openapi/write/users/uid/status.yaml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- users
|
||||||
|
summary: get user status
|
||||||
|
parameters:
|
||||||
|
- in: path
|
||||||
|
name: uid
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
required: true
|
||||||
|
description: uid of the user whose status to check
|
||||||
|
example: 2
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successfully retrieved user status
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
status:
|
||||||
|
$ref: ../../../components/schemas/Status.yaml#/Status
|
||||||
|
response:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
status:
|
||||||
|
type: string
|
||||||
|
enum: ['online', 'offline', 'dnd', 'away']
|
||||||
24
public/openapi/write/users/uid/status/status.yaml
Normal file
24
public/openapi/write/users/uid/status/status.yaml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
head:
|
||||||
|
tags:
|
||||||
|
- users
|
||||||
|
summary: verify user status
|
||||||
|
parameters:
|
||||||
|
- in: path
|
||||||
|
name: uid
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
required: true
|
||||||
|
description: uid of the user whose status to check
|
||||||
|
example: 2
|
||||||
|
- in: path
|
||||||
|
name: status
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
description: status of the user to confirm
|
||||||
|
example: 'online'
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: user status is the value in path
|
||||||
|
'404':
|
||||||
|
description: user status is not the value in path
|
||||||
@@ -64,11 +64,9 @@ define('chat', [
|
|||||||
if (parseInt(touid, 10) === parseInt(app.user.uid, 10)) {
|
if (parseInt(touid, 10) === parseInt(app.user.uid, 10)) {
|
||||||
return alerts.error('[[error:cant-chat-with-yourself]]');
|
return alerts.error('[[error:cant-chat-with-yourself]]');
|
||||||
}
|
}
|
||||||
socket.emit('modules.chats.isDnD', touid, function (err, isDnD) {
|
|
||||||
if (err) {
|
api.get(`/users/${touid}/status`).then(({ status }) => {
|
||||||
return alerts.error(err);
|
if (status !== 'dnd') {
|
||||||
}
|
|
||||||
if (!isDnD) {
|
|
||||||
return createChat();
|
return createChat();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +75,7 @@ define('chat', [
|
|||||||
createChat();
|
createChat();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
}).catch(alerts.error);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.loadChatsDropdown = function (chatsListEl) {
|
module.loadChatsDropdown = function (chatsListEl) {
|
||||||
|
|||||||
@@ -142,6 +142,11 @@ usersAPI.updateSettings = async function (caller, data) {
|
|||||||
return await user.saveSettings(data.uid, payload);
|
return await user.saveSettings(data.uid, payload);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
usersAPI.getStatus = async (caller, { uid }) => {
|
||||||
|
const status = await db.getObjectField(`user:${uid}`, 'status');
|
||||||
|
return { status };
|
||||||
|
};
|
||||||
|
|
||||||
usersAPI.changePassword = async function (caller, data) {
|
usersAPI.changePassword = async function (caller, data) {
|
||||||
await user.changePassword(caller.uid, Object.assign(data, { ip: caller.ip }));
|
await user.changePassword(caller.uid, Object.assign(data, { ip: caller.ip }));
|
||||||
await events.log({
|
await events.log({
|
||||||
|
|||||||
@@ -66,6 +66,17 @@ Users.changePicture = async (req, res) => {
|
|||||||
helpers.formatApiResponse(200, res);
|
helpers.formatApiResponse(200, res);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Users.getStatus = async (req, res) => {
|
||||||
|
helpers.formatApiResponse(200, res, await api.users.getStatus(req, { ...req.params }));
|
||||||
|
};
|
||||||
|
|
||||||
|
Users.checkStatus = async (req, res) => {
|
||||||
|
const { uid, status } = req.params;
|
||||||
|
const { status: current } = await api.users.getStatus(req, { uid });
|
||||||
|
|
||||||
|
helpers.formatApiResponse(current === status ? 200 : 404, res);
|
||||||
|
};
|
||||||
|
|
||||||
Users.updateSettings = async (req, res) => {
|
Users.updateSettings = async (req, res) => {
|
||||||
const settings = await api.users.updateSettings(req, { ...req.body, uid: req.params.uid });
|
const settings = await api.users.updateSettings(req, { ...req.body, uid: req.params.uid });
|
||||||
helpers.formatApiResponse(200, res, settings);
|
helpers.formatApiResponse(200, res, settings);
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ function authenticatedRoutes() {
|
|||||||
setupApiRoute(router, 'delete', '/:uid/content', [...middlewares, middleware.assert.user], controllers.write.users.deleteContent);
|
setupApiRoute(router, 'delete', '/:uid/content', [...middlewares, middleware.assert.user], controllers.write.users.deleteContent);
|
||||||
setupApiRoute(router, 'delete', '/:uid/account', [...middlewares, middleware.assert.user], controllers.write.users.deleteAccount);
|
setupApiRoute(router, 'delete', '/:uid/account', [...middlewares, middleware.assert.user], controllers.write.users.deleteAccount);
|
||||||
|
|
||||||
|
setupApiRoute(router, 'get', '/:uid/status', [], controllers.write.users.getStatus);
|
||||||
|
setupApiRoute(router, 'head', '/:uid/status/:status', [], controllers.write.users.checkStatus);
|
||||||
|
|
||||||
setupApiRoute(router, 'put', '/:uid/settings', [...middlewares, middleware.checkRequired.bind(null, ['settings'])], controllers.write.users.updateSettings);
|
setupApiRoute(router, 'put', '/:uid/settings', [...middlewares, middleware.checkRequired.bind(null, ['settings'])], controllers.write.users.updateSettings);
|
||||||
|
|
||||||
setupApiRoute(router, 'put', '/:uid/password', [...middlewares, middleware.checkRequired.bind(null, ['newPassword']), middleware.assert.user], controllers.write.users.changePassword);
|
setupApiRoute(router, 'put', '/:uid/password', [...middlewares, middleware.checkRequired.bind(null, ['newPassword']), middleware.assert.user], controllers.write.users.changePassword);
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ SocketModules.chats.getRaw = async function (socket, data) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
SocketModules.chats.isDnD = async function (socket, uid) {
|
SocketModules.chats.isDnD = async function (socket, uid) {
|
||||||
const status = await db.getObjectField(`user:${uid}`, 'status');
|
sockets.warnDeprecated(socket, 'GET /api/v3/users/:uid/status OR HEAD /api/v3/users/:uid/status/:status');
|
||||||
|
|
||||||
|
const { status } = await api.users.getStatus(socket, { uid });
|
||||||
return status === 'dnd';
|
return status === 'dnd';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user