Skip to content

Commit 378e6bb

Browse files
authored
Merge pull request #11 from spikeninja/dev
feat: 1.2.0 version
2 parents 42f26f3 + 2ad7845 commit 378e6bb

File tree

9 files changed

+74
-52
lines changed

9 files changed

+74
-52
lines changed

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "nuxt-app",
33
"private": true,
44
"type": "module",
5-
"version": "1.1.3",
5+
"version": "1.2.0",
66
"scripts": {
77
"build": "nuxt build",
88
"dev": "nuxt dev",
@@ -13,15 +13,15 @@
1313
},
1414
"dependencies": {
1515
"@vueuse/core": "^12.0.0",
16-
"better-sqlite3": "^11.6.0",
16+
"better-sqlite3": "^11.7.0",
1717
"bootstrap": "^5.3.3",
1818
"dayjs": "^1.11.13",
19-
"drizzle-kit": "^0.29.1",
20-
"drizzle-orm": "^0.37.0",
19+
"drizzle-kit": "^0.30.0",
20+
"drizzle-orm": "^0.38.0",
2121
"nuxt": "^3.14.1592",
2222
"vue": "^3.5.13",
2323
"vue-router": "^4.5.0",
24-
"zod": "^3.23.8"
24+
"zod": "^3.24.1"
2525
},
2626
"packageManager": "[email protected]+sha1.a428b12202bc4f23b17e6dffe730734dae5728e2",
2727
"devDependencies": {

pnpm-lock.yaml

Lines changed: 29 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/pages/tasks/[id].vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ const { data: task, error } = useFetch(`/api/tasks/${route.params.id}`)
3030
:class="{
3131
'bg-success': task.state === 'success',
3232
'bg-danger': task.state === 'failure',
33-
'bg-warning': task.state === 'pending',
33+
'bg-warning': task.state === 'running',
34+
'bg-dark': task.state === 'abandoned',
3435
}"
3536
>
3637
{{ task.state }}

src/pages/tasks/index.vue

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const state = computed(() => route.query.state)
1717
const search = computed(() => route.query.search || "")
1818
const page = computed(() => Number(route.query.page) || 1)
1919
20-
const { data, refresh } = useAsyncData(
20+
const { data, refresh } = useAsyncData<{ tasks: TaskSelect[]; count: number }>(
2121
"tasks",
2222
() =>
2323
$fetch(`/api/tasks`, {
@@ -65,7 +65,9 @@ const formatTaskName = (taskName: string) => {
6565
}
6666
}
6767
68-
const stateHandler = (state: "pending" | "success" | "failure") => {
68+
const stateHandler = (
69+
state: "running" | "success" | "failure" | "abandoned"
70+
) => {
6971
router.push({
7072
path: "/tasks",
7173
query: {
@@ -172,18 +174,19 @@ const handlePrev = () => {
172174
:class="{
173175
'bg-success': task.state === 'success',
174176
'bg-danger': task.state === 'failure',
175-
'bg-warning': task.state === 'pending',
177+
'bg-warning': task.state === 'running',
178+
'bg-dark': task.state === 'abandoned',
176179
}"
177180
>
178181
{{ task.state }}
179182
</span>
180183
</td>
181184
<td>{{ task.args }}</td>
182185
<td>{{ limitText(JSON.stringify(task.kwargs), 40) }}</td>
183-
<td>{{ formatReturnValue(task) }}</td>
184-
<td>{{ formatDate(task.startedAt) }}</td>
186+
<td>{{ limitText(formatReturnValue(task), 21) }}</td>
187+
<td>{{ formatDate(String(task.startedAt)) }}</td>
185188
<td>
186-
{{ task.finishedAt ? formatDate(task.finishedAt) : null }}
189+
{{ task.finishedAt ? formatDate(String(task.finishedAt)) : null }}
187190
</td>
188191
<td>{{ task.executionTime }}</td>
189192
<td>{{ task.worker }}</td>

src/server/api/tasks/[id]/started.post.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default defineEventHandler(async (event) => {
2424
finishedAt: null,
2525
returnValue: null,
2626
executionTime: null,
27-
state: "pending",
27+
state: "running",
2828
args: body.args,
2929
id: params.id,
3030
worker: body.worker,

src/server/db/schema.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ export const tasksTable = sqliteTable(
66
{
77
id: text().primaryKey(),
88
name: text().notNull(),
9-
state: text({ enum: ["success", "pending", "failure"] }).notNull(),
9+
state: text({
10+
enum: ["success", "running", "failure", "abandoned"],
11+
}).notNull(),
1012
error: text(),
1113
worker: text(),
1214
executionTime: real("execution_time"),
@@ -19,8 +21,10 @@ export const tasksTable = sqliteTable(
1921
}>(),
2022
},
2123
(t) => ({
24+
idxState: index("idx_tasks__state").on(t.state),
2225
idxStartedAt: index("idx_tasks__started_at").on(t.startedAt),
2326
idxFinishedAt: index("idx_tasks__finished_at").on(t.finishedAt),
27+
idxExecutionTime: index("idx_tasks__execution_time").on(t.executionTime),
2428
})
2529
)
2630

src/server/plugins/shutdown.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { tasksRepository } from "~/server/repositories/tasks"
2+
3+
export default defineNitroPlugin((nitroApp) => {
4+
nitroApp.hooks.hook("close", async () => {
5+
await tasksRepository.setAbandoned()
6+
})
7+
})

src/server/repositories/tasks.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { tasksTable } from "../db/schema"
33
import { takeUniqueOrThrow } from "../utils"
44
import { count, eq, desc, like, and } from "drizzle-orm"
55

6-
export type TaskState = "pending" | "success" | "failed"
6+
export type TaskState = "running" | "success" | "failed" | "abandoned"
77

88
class TasksRepository {
99
async getAll({
@@ -15,7 +15,7 @@ class TasksRepository {
1515
limit: number
1616
offset: number
1717
name: string | null
18-
state?: "success" | "pending" | "failure"
18+
state?: "success" | "running" | "failure" | "abandoned"
1919
}) {
2020
const whereCondition = name
2121
? like(tasksTable.name, `%${name.toLowerCase()}%`)
@@ -57,28 +57,35 @@ class TasksRepository {
5757
name: string
5858
worker: string
5959
startedAt: Date
60-
args: Record<string, any>
60+
args: Array<any>
61+
finishedAt: Date | null
6162
kwargs: Record<string, any>
6263
executionTime: number | null
63-
returnValue: Record<string, any> | null
64-
finishedAt: Date | null
65-
state: "success" | "pending" | "failure"
64+
returnValue: { return_value: any } | null
65+
state: "success" | "running" | "failure"
6666
}) {
6767
return db.insert(tasksTable).values(values)
6868
}
6969

7070
async update(
7171
taskId: string,
7272
values: {
73-
state?: "success" | "pending" | "failure"
7473
error?: string | null
7574
executionTime?: number
7675
finishedAt?: Date | null
77-
returnValue?: object | null
76+
returnValue?: { return_value: any } | null
77+
state?: "success" | "running" | "failure" | "abandoned"
7878
}
7979
) {
8080
return db.update(tasksTable).set(values).where(eq(tasksTable.id, taskId))
8181
}
82+
83+
async setAbandoned() {
84+
return db
85+
.update(tasksTable)
86+
.set({ state: "abandoned" })
87+
.where(eq(tasksTable.state, "running"))
88+
}
8289
}
8390

8491
export const tasksRepository = new TasksRepository()

src/server/schemas/tasks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ export const getTasksQueryParamsSchema = z.object({
2323
search: z.string().optional(),
2424
limit: z.coerce.number().gte(0),
2525
offset: z.coerce.number().gte(0),
26-
state: z.enum(["success", "pending", "failure"]).optional(),
26+
state: z.enum(["success", "running", "failure", "abandoned"]).optional(),
2727
})

0 commit comments

Comments
 (0)