Files
worklenz/worklenz-backend/src/shared/io.ts

49 lines
1.4 KiB
TypeScript

import {Server} from "socket.io";
import db from "../config/db";
import {SocketEvents} from "../socket.io/events";
export class IO {
private static instance: Server | null = null;
public static setInstance(io: Server) {
this.instance = io;
}
public static getInstance() {
return this.instance;
}
public static getSocketById(socketId: string) {
return this.instance?.sockets.sockets?.get(socketId) || null;
}
public static emit(event: SocketEvents, socketId: string, data?: any) {
this.getSocketById(socketId)?.emit(event.toString(), data);
}
public static async emitByUserId(id: string, userId: string | null, event: SocketEvents, data?: any) {
try {
if (id === userId) return;
const q = `SELECT socket_id FROM users WHERE id = $1;`;
const result = await db.query(q, [id]);
const [user] = result.rows;
if (!user) return;
this.emit(event, user.socket_id, data);
} catch (error) {
// ignored
}
}
public static async emitByTeamMemberId(id: string, userId: string | null, event: SocketEvents, data?: any) {
try {
const q = `SELECT socket_id FROM users WHERE id != $1 AND id IN (SELECT user_id FROM team_members WHERE id = $2);`;
const result = await db.query(q, [userId, id]);
const [user] = result.rows;
if (!user) return;
this.emit(event, user.socket_id, data);
} catch (error) {
// ignored
}
}
}