Skip to content

Commit 4ba71c3

Browse files
authored
feat: flow item on telegram (#231)
1 parent dff39c1 commit 4ba71c3

8 files changed

Lines changed: 69 additions & 23 deletions

File tree

apps/core-telegram/server/services/queue/index.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { EventHandlerMap, NotificationUserBeaconOnEpicCommentCreated, TicketMessageCreated } from '@roll-stack/queue'
1+
import type { EventHandlerMap, FlowItemCreated, NotificationUserBeaconOnEpicCommentCreated, TicketMessageCreated } from '@roll-stack/queue'
22
import { db } from '@roll-stack/database'
33
import { queue } from '@roll-stack/queue'
44
import { useAtriumBot } from '../telegram/atrium-bot'
@@ -10,6 +10,7 @@ export async function setupConsumers() {
1010
return queue.consume<EventHandlerMap>(queue.telegram.name, {
1111
ticketMessageCreated: handleTicketMessageCreated,
1212
notificationUserBeaconOnEpicCommentCreated: handleUserBeaconOnEpicCommentCreated,
13+
flowItemCreated: handleFlowItemCreated,
1314
})
1415
}
1516

@@ -59,3 +60,31 @@ async function handleUserBeaconOnEpicCommentCreated(data: NotificationUserBeacon
5960
return false
6061
}
6162
}
63+
64+
async function handleFlowItemCreated(data: FlowItemCreated['data']): Promise<boolean> {
65+
try {
66+
const separator = 'zzzzz'
67+
const startAppData = `flow${separator}${data.itemId}`
68+
69+
// Get first words
70+
const messageIntro = data.description.split(' ').slice(0, 45).join(' ')
71+
const preparedMessage = `${messageIntro}...\n\nОстальное в Атриуме 🙃`
72+
73+
await useAtriumBot().api.sendMessage(telegram.teamGroupId, preparedMessage, {
74+
link_preview_options: {
75+
is_disabled: true,
76+
},
77+
reply_markup: {
78+
inline_keyboard: [[{
79+
text: '👉 Открыть Атриум',
80+
url: `https://t.me/sushi_atrium_bot/app?startapp=${startAppData}`,
81+
}]],
82+
},
83+
})
84+
85+
return true
86+
} catch (error) {
87+
console.error(error)
88+
return false
89+
}
90+
}

apps/web-app/server/tasks/ai/daily-report.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -61,25 +61,6 @@ export default defineTask({
6161
title: `Задачи ${date}`,
6262
description: finalMessage,
6363
})
64-
65-
// const separator = 'zzzzz'
66-
// const startAppData = `flow${separator}${flowItem?.id}`
67-
68-
// // Get first words
69-
// const messageIntro = finalMessage.split(' ').slice(0, 40).join(' ')
70-
// const preparedMessage = `${messageIntro}...\n\nПродолжение внутри Атриума? 🙃`
71-
72-
// await useAtriumBot().api.sendMessage(telegram.teamGroupId, preparedMessage, {
73-
// link_preview_options: {
74-
// is_disabled: true,
75-
// },
76-
// reply_markup: {
77-
// inline_keyboard: [[{
78-
// text: '👉 Открыть Атриум',
79-
// url: `https://t.me/sushi_atrium_bot/app?startapp=${startAppData}`,
80-
// }]],
81-
// },
82-
// })
8364
} catch (error) {
8465
errorResolver(error)
8566
}

apps/web-app/server/tasks/ai/weekly-report.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import type { FlowItemCreated } from '@roll-stack/queue'
12
import process from 'node:process'
23
import { db } from '@roll-stack/database'
4+
import { Events, queue } from '@roll-stack/queue'
35
import { format } from 'date-fns'
46
import { ru } from 'date-fns/locale/ru'
57
import OpenAI from 'openai'
@@ -77,11 +79,19 @@ export default defineTask({
7779

7880
// Flow item
7981
const week = format(new Date(), 'w', { locale: ru })
80-
await db.flow.createItem({
82+
const item = await db.flow.createItem({
8183
type: 'weekly_task_report',
8284
title: `Задачи за неделю ${week}`,
8385
description: finalMessage,
8486
})
87+
88+
// Push Event
89+
await queue.publish<FlowItemCreated>(Events.flowItemCreated, {
90+
itemId: item.id,
91+
type: item.type,
92+
title: item.title,
93+
description: item.description ?? '',
94+
})
8595
} catch (error) {
8696
errorResolver(error)
8797
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { Repository } from '@nextorders/queue'
2+
import { Entity } from '@nextorders/queue'
3+
4+
export class Flow extends Entity {
5+
constructor(repository: Repository) {
6+
super({
7+
name: 'flow',
8+
eventsToConsume: [],
9+
repository,
10+
})
11+
}
12+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export { Flow } from './flow'
12
export { Notification } from './notification'
23
export { Telegram } from './telegram'
34
export { Ticket } from './ticket'

packages/queue/src/repository/entities/telegram.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export class Telegram extends Entity {
99
eventsToConsume: [
1010
Events.ticketMessageCreated,
1111
Events.notificationUserBeaconOnEpicCommentCreated,
12+
Events.flowItemCreated,
1213
],
1314
repository,
1415
})

packages/queue/src/repository/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { Repository } from '@nextorders/queue'
2-
import { Notification, Telegram, Ticket } from './entities'
2+
import { Flow, Notification, Telegram, Ticket } from './entities'
33

44
class QueueRepository extends Repository {
5+
flow: Flow = new Flow(this)
56
notification: Notification = new Notification(this)
67
telegram: Telegram = new Telegram(this)
78
ticket: Ticket = new Ticket(this)

packages/queue/src/repository/types.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import type { BaseEventMap, BaseEventMessage, BaseEventMessageHandlerMap } from
33
export enum Events {
44
ticketMessageCreated = 'ticketMessageCreated',
55
notificationUserBeaconOnEpicCommentCreated = 'notificationUserBeaconOnEpicCommentCreated',
6+
flowItemCreated = 'flowItemCreated',
67
}
78

8-
type EventMessage = TicketMessageCreated | NotificationUserBeaconOnEpicCommentCreated
9+
type EventMessage = TicketMessageCreated | NotificationUserBeaconOnEpicCommentCreated | FlowItemCreated
910
type EventMap = BaseEventMap<EventMessage>
1011

1112
export type EventHandlerMap = Partial<BaseEventMessageHandlerMap<EventMap>>
@@ -35,3 +36,13 @@ type NotificationUserBeaconOnEpicCommentCreatedData = {
3536
export interface NotificationUserBeaconOnEpicCommentCreated extends BaseEventMessage<NotificationUserBeaconOnEpicCommentCreatedData> {
3637
event: typeof Events.notificationUserBeaconOnEpicCommentCreated
3738
}
39+
40+
type FlowItemCreatedData = {
41+
itemId: string
42+
type: string
43+
title: string
44+
description: string
45+
}
46+
export interface FlowItemCreated extends BaseEventMessage<FlowItemCreatedData> {
47+
event: typeof Events.flowItemCreated
48+
}

0 commit comments

Comments
 (0)