Skip to content

Commit 12db41e

Browse files
committed
refactor: migrate presence endpoints to new chained API pattern
Migrates presence.getConnections (GET) and presence.enableBroadcast (POST) from the legacy addRoute() pattern to the new chained .get()/.post() API pattern with typed AJV response schemas for 200, 401, and 403 responses. Part of #38876
1 parent 3145c41 commit 12db41e

File tree

2 files changed

+53
-12
lines changed

2 files changed

+53
-12
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@rocket.chat/meteor': patch
3+
---
4+
5+
Migrated `presence.getConnections` and `presence.enableBroadcast` REST API endpoints from legacy `addRoute` pattern to the new chained `.get()`/`.post()` API pattern with typed response schemas.
Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,63 @@
11
import { Presence } from '@rocket.chat/core-services';
2+
import { ajv, validateUnauthorizedErrorResponse, validateForbiddenErrorResponse } from '@rocket.chat/rest-typings';
23

34
import { API } from '../api';
45

5-
API.v1.addRoute(
6+
API.v1.get(
67
'presence.getConnections',
7-
{ authRequired: true, permissionsRequired: ['manage-user-status'] },
88
{
9-
async get() {
10-
const result = await Presence.getConnectionCount();
11-
12-
return API.v1.success(result);
9+
authRequired: true,
10+
permissionsRequired: ['manage-user-status'],
11+
response: {
12+
200: ajv.compile<{ current: number; max: number }>({
13+
type: 'object',
14+
properties: {
15+
current: { type: 'number' },
16+
max: { type: 'number' },
17+
success: {
18+
type: 'boolean',
19+
enum: [true],
20+
},
21+
},
22+
required: ['current', 'max', 'success'],
23+
additionalProperties: false,
24+
}),
25+
401: validateUnauthorizedErrorResponse,
26+
403: validateForbiddenErrorResponse,
1327
},
1428
},
29+
async function action() {
30+
const result = await Presence.getConnectionCount();
31+
32+
return API.v1.success(result);
33+
},
1534
);
1635

17-
API.v1.addRoute(
36+
API.v1.post(
1837
'presence.enableBroadcast',
19-
{ authRequired: true, permissionsRequired: ['manage-user-status'], twoFactorRequired: true },
2038
{
21-
async post() {
22-
await Presence.toggleBroadcast(true);
23-
24-
return API.v1.success();
39+
authRequired: true,
40+
permissionsRequired: ['manage-user-status'],
41+
twoFactorRequired: true,
42+
response: {
43+
200: ajv.compile<void>({
44+
type: 'object',
45+
properties: {
46+
success: {
47+
type: 'boolean',
48+
enum: [true],
49+
},
50+
},
51+
required: ['success'],
52+
additionalProperties: false,
53+
}),
54+
401: validateUnauthorizedErrorResponse,
55+
403: validateForbiddenErrorResponse,
2556
},
2657
},
58+
async function action() {
59+
await Presence.toggleBroadcast(true);
60+
61+
return API.v1.success();
62+
},
2763
);

0 commit comments

Comments
 (0)