从头开始创建一个自动产生文档/类型安全的现代API(16) 添加字段

我们发现“顺序”这个字段缺失了,我们添加一下,顺便看一下如何变更数据结构。

修改数据结构

修改 db/schema.ts:

重新生成数据库

1
2
bun drizzle-kit generate
bun drizzle-kit push

修改page.tsx

修改interface:

1
2
3
4
5
6
interface Task {
id: number
name: string
done: boolean
order: number
}

修改 add 逻辑,点击 order:

1
2
3
4
5
6
7
8
9
10
11
case "added": {
return [
...tasks,
{
id: Date.now(),
name: action.name,
done: false,
order: tasks.length,
},
]
}

修改 reordered 逻辑,根据 index 修改order:

1
2
3
4
5
6
case "reordered": {
return action.tasks.map((task, index) => ({
...task,
order: index,
}))
}

修改 单元测试文件

逻辑修改了,我们也添加一些单元测试的 case,校验 order:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
it("patch /tasks/{id} validates the order param", async () => {
const response = await client.api.tasks[":id"].$patch({
param: {
id,
},
json: {
// @ts-expect-error
order: "wat",
},
});
expect(response.status).toBe(422);
if (response.status === 422) {
const json = await response.json();
expect(json.error.issues[0].path[0]).toBe("order");
expect(json.error.issues[0].message).toBe(ZOD_ERROR_MESSAGES.EXPECTED_NUMBER_1);
}
});

校验是否成功插入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const order = 0;

it("post /tasks creates a task", async () => {
const response = await client.api.tasks.$post({
json: {
name,
done: false,
order
},
});
expect(response.status).toBe(200);
if (response.status === 200) {
const json = await response.json();
expect(json.name).toBe(name);
expect(json.done).toBe(false);
expect(json.order).toBe(order);
}
});

测试

安装成功后,运行 bun run test,成功通过测试。


作者:Bearalise
出处:从头开始创建一个自动产生文档/类型安全的现代API(16) 添加字段
版权:本文版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明,必须在文章中给出原文链接。

请我喝杯咖啡吧~

支付宝
微信