Skip to content

Commit 75e24b9

Browse files
authored
feat: daily report by ai (#87)
1 parent 854e4d4 commit 75e24b9

4 files changed

Lines changed: 65 additions & 0 deletions

File tree

apps/web-app/.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ NUXT_PUBLIC_MEDIA_URL=
1818
NUXT_AI_API_KEY=
1919
NUXT_AI_BASE_URL=
2020
NUXT_AI_MODEL=
21+
NUXT_AI_MODEL_PRO=
2122
NUXT_AI_SERVICE_TOKEN=
2223

2324
# Telegram
2425
NUXT_TELEGRAM_ADMIN_ID=
2526
NUXT_TELEGRAM_WASABI_BOT_ID=
2627
NUXT_TELEGRAM_ATRIUM_BOT_ID=
28+
NUXT_TELEGRAM_TEAM_GROUP_ID=
2729

2830
# App version
2931
VERSION=

apps/web-app/nuxt.config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export default defineNuxtConfig({
1414
},
1515
ai: {
1616
model: '',
17+
modelPro: '',
1718
baseUrl: '',
1819
apiKey: '',
1920
serviceToken: '',
@@ -22,6 +23,7 @@ export default defineNuxtConfig({
2223
wasabiBotId: '',
2324
atriumBotId: '',
2425
adminId: '',
26+
teamGroupId: '',
2527
},
2628
public: {
2729
mediaUrl: '',
@@ -45,6 +47,7 @@ export default defineNuxtConfig({
4547
'* * * * *': ['task:auto-create'], // Every minute
4648
'0 * * * *': ['kitchen:revenue-update'], // Every hour
4749
'0 0 * * *': ['kitchen:rating-update'], // Every day
50+
'0 17 * * 1-5': ['ai:daily-report'], // Mon-Fri 17:00
4851
},
4952
},
5053
tiptap: {
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { repository } from '@roll-stack/database'
2+
import OpenAI from 'openai'
3+
import { useAtriumBot } from '~~/server/services/telegram/atrium-bot'
4+
5+
export default defineTask({
6+
meta: {
7+
name: 'ai:daily-report',
8+
description: 'Prepare and post daily report to Telegram group',
9+
},
10+
async run() {
11+
try {
12+
const { ai, telegram } = useRuntimeConfig()
13+
14+
const tasks = await repository.task.listCompletedToday()
15+
const preparedTasks = tasks.map((task) => ({
16+
completedAt: task.completedAt,
17+
name: task.name,
18+
description: task.description,
19+
report: task.report,
20+
}))
21+
22+
const client = new OpenAI({
23+
apiKey: ai.apiKey,
24+
baseURL: ai.baseUrl,
25+
})
26+
27+
const response = await client.chat.completions.create({
28+
model: ai.modelPro,
29+
messages: [
30+
{
31+
role: 'system',
32+
content: 'Ты работаешь в компании "Суши Love", которая является сетью доставки суши. В 3-5 абзацах расскажи что сегодня было сделано, лучшие моменты. Отвечай на русском. Не бойся использовать emoji',
33+
},
34+
{
35+
role: 'user',
36+
content: JSON.stringify(preparedTasks),
37+
},
38+
],
39+
})
40+
41+
const finalMessage = response.choices[0].message.content
42+
if (!finalMessage) {
43+
return { result: true }
44+
}
45+
46+
await useAtriumBot().api.sendMessage(telegram.teamGroupId, finalMessage)
47+
} catch (error) {
48+
errorResolver(error)
49+
}
50+
51+
return { result: true }
52+
},
53+
})

packages/database/src/repository/task.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ export class Task {
6767
})
6868
}
6969

70+
static async listCompletedToday() {
71+
return useDatabase().query.tasks.findMany({
72+
where: (tasks, { gte }) => gte(tasks.completedAt, sql`now() - interval '12 hour'`),
73+
orderBy: (tasks, { desc }) => desc(tasks.updatedAt),
74+
})
75+
}
76+
7077
static async autoCreatorsList() {
7178
return useDatabase().query.taskAutoCreators.findMany()
7279
}

0 commit comments

Comments
 (0)