import WebSocketService from '../../global/services/websocket-service'; import Logger from '../../global/framework/logger-service'; import UsersService from '@features/users/services/current-user-service'; const logger = Logger.getLogger('OnlineUsersRealtimeAPI'); export type GetUserRequestType = string; export type GetUsersRequestType = Array; export type GetUserResponseType = [string, boolean]; export type GetUsersResponseType = Array; export type RealtimeUpdateMessageType = GetUsersResponseType; export type OnlineUserRealtimeAPIType = { getUserStatus: (id: GetUserRequestType) => Promise; getUsersStatus: (ids: GetUsersRequestType) => Promise; setMyStatus: () => void; }; export const ONLINE_ROOM = (companyId: string) => `/users/online/${companyId}`; export const OnlineUserRealtimeAPI = (websocket: WebSocketService): OnlineUserRealtimeAPIType => { const getUserStatus = (id: GetUserRequestType): Promise => { logger.debug(`Get user online status ${id}`); return getUsersStatus([id]).then(response => response?.[0] || [id, false]); }; const getUsersStatus = (ids: GetUsersRequestType = []): Promise => { logger.debug(`Get users statuses ${ids.join(',')}`); return websocket .get('online:get', ids) .then(result => result || []); }; const setMyStatus = (): void => { const id = UsersService.getCurrentUserId(); logger.debug(`Set user online status ${id}`); websocket .get('online:set', [id]) .then(result => result || []); }; return { getUserStatus, getUsersStatus, setMyStatus, }; };