Skip to content

Commit d88c7bb

Browse files
feat: leave chat endpoint
1 parent 29af31b commit d88c7bb

5 files changed

Lines changed: 41 additions & 2 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "backend",
3-
"version": "0.15.16",
3+
"version": "0.15.17",
44
"description": "PoliNetwork backend server",
55
"private": true,
66
"keywords": [],

package/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@polinetwork/backend",
3-
"version": "0.15.16",
3+
"version": "0.15.17",
44
"description": "Utils to interact with the backend.",
55
"repository": {
66
"type": "git",

src/routers/tg/groups.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { and, eq, ilike, ne, not, or, sql } from "drizzle-orm"
22
import { z } from "zod"
33
import { DB, SCHEMA } from "@/db"
44
import { logger } from "@/logger"
5+
import { WSS } from "@/server"
56
import { createTRPCRouter, publicProcedure } from "@/trpc"
67

78
const GROUPS = SCHEMA.TG.groups
@@ -142,4 +143,21 @@ export default createTRPCRouter({
142143

143144
return rows.length === 1
144145
}),
146+
147+
leaveChat: publicProcedure
148+
.input(
149+
z.object({
150+
chatId: z.number(),
151+
performerId: z.number(),
152+
})
153+
)
154+
.mutation(async ({ input }) => {
155+
const left = await WSS.leaveChat(input.chatId)
156+
if (!left) return { error: "BOT_ERROR" }
157+
158+
const rows = await DB.delete(GROUPS).where(eq(GROUPS.telegramId, input.chatId)).returning()
159+
if (rows.length === 0) return { error: "NOT_FOUND" }
160+
161+
return { error: null }
162+
}),
145163
})

src/websocket/index.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,24 @@ export class WebSocketServer {
9797
})
9898
})
9999
}
100+
101+
async leaveChat(chatId: number, performerId: number) {
102+
const sockets = await this.io.fetchSockets()
103+
const tgSocket = sockets.find((s) => s.data.type === "telegram")
104+
if (!tgSocket) {
105+
logger.error("[WS] There is no bot websocket connected, cannot perform logGrantInterrupt")
106+
return false
107+
}
108+
109+
return new Promise<boolean>((res) => {
110+
tgSocket.emit("leaveChat", { chatId, performerId }, (ok) => {
111+
if (!ok) {
112+
logger.error({ chatId }, "[WS] Cannot leave the chat")
113+
res(false)
114+
} else {
115+
res(true)
116+
}
117+
})
118+
})
119+
}
100120
}

src/websocket/telegram.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export interface ToClient {
2222
cb: (error: string | null) => void
2323
) => void
2424
logGrantInterrupt: (data: { userId: number; adminId: number }, cb: (error: string | null) => void) => void
25+
leaveChat: (data: { chatId: number; performerId: number }, cb: (ok: boolean) => void) => void
2526
}
2627

2728
// the telegram bot answers the backend

0 commit comments

Comments
 (0)