Skip to content

Commit 4208413

Browse files
committed
feat: update revenues task
1 parent 9db2919 commit 4208413

4 files changed

Lines changed: 76 additions & 0 deletions

File tree

apps/web-app/nuxt.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export default defineNuxtConfig({
3838
},
3939
scheduledTasks: {
4040
'* * * * *': ['task:auto-create'], // Every minute
41+
'0 * * * *': ['kitchen:revenue-update'], // Every hour
4142
'0 0 * * *': ['kitchen:rating-update'], // Every day
4243
},
4344
},
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { repository } from '@roll-stack/database'
2+
3+
export default defineEventHandler(async (event) => {
4+
const kitchenId = getRouterParam(event, 'kitchenId')
5+
if (!kitchenId) {
6+
throw createError({
7+
statusCode: 400,
8+
message: 'Id is required',
9+
})
10+
}
11+
12+
const query = getQuery(event)
13+
const start = query.start ? new Date(query.start.toString()) : null
14+
const end = query.end ? new Date(query.end.toString()) : null
15+
if (!start || !end) {
16+
throw createError({
17+
statusCode: 400,
18+
message: 'Start and end is required',
19+
})
20+
}
21+
22+
return repository.kitchen.listRevenuesByKitchenForPeriod(kitchenId, start, end)
23+
})
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { repository } from '@roll-stack/database'
2+
import { endOfWeek, startOfWeek } from 'date-fns'
3+
4+
const logger = useLogger('kitchen:revenue-update')
5+
6+
export default defineTask({
7+
meta: {
8+
name: 'kitchen:revenue-update',
9+
description: 'Update weekly revenue of kitchens',
10+
},
11+
async run() {
12+
try {
13+
const kitchens = await repository.kitchen.list()
14+
15+
// From this monday to sunday (use UTC+0 time zone)
16+
const now = new Date()
17+
18+
const thisMonday = startOfWeek(now, { weekStartsOn: 1 })
19+
const thisSunday = endOfWeek(now, { weekStartsOn: 1 })
20+
21+
logger.log(thisMonday, thisSunday)
22+
23+
for (const kitchen of kitchens) {
24+
const revenues = await repository.kitchen.listRevenuesByKitchenForPeriod(kitchen.id, thisMonday, thisSunday)
25+
26+
const revenueForThisWeek = revenues.reduce((acc, curr) => acc + curr.total, 0)
27+
28+
await repository.kitchen.update(kitchen.id, {
29+
revenueForThisWeek,
30+
})
31+
32+
// logger.log(`Kitchen ${kitchen.id}: Revenue updated from ${kitchen.revenueForThisWeek} to ${revenueForThisWeek}`)
33+
}
34+
} catch (error) {
35+
errorResolver(error)
36+
}
37+
38+
return { result: true }
39+
},
40+
})

packages/database/src/repository/kitchen.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,18 @@ export class Kitchen {
4242
})
4343
}
4444

45+
static async listRevenuesByKitchenForPeriod(kitchenId: string, start: Date, end: Date) {
46+
return useDatabase().query.kitchenRevenues.findMany({
47+
where: (revenues, { eq, and }) => and(
48+
eq(revenues.kitchenId, kitchenId),
49+
sql`date(${revenues.date}) >= date(${start})`,
50+
sql`date(${revenues.date}) <= date(${end})`,
51+
),
52+
orderBy: (revenues, { desc }) => desc(revenues.date),
53+
limit: 1000,
54+
})
55+
}
56+
4557
static async create(data: KitchenDraft) {
4658
const [kitchen] = await useDatabase().insert(kitchens).values(data).returning()
4759
return kitchen

0 commit comments

Comments
 (0)