Skip to content

Commit b55b0bb

Browse files
committed
set up durable object
1 parent f785907 commit b55b0bb

File tree

13 files changed

+264
-1
lines changed

13 files changed

+264
-1
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ cp .env.example .env
66
docker compose up
77
bun dev
88
```
9+
10+
After running `bunx drizzle-kit generate --config=drizzle-do.config.ts`, you need to add `?raw` to SQL file names in drizzle-do/migraions.js`.

app/lib/db/schema-do.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { int, sqliteTable, text } from "drizzle-orm/sqlite-core";
2+
3+
export const usersTable = sqliteTable("users_table", {
4+
id: int().primaryKey({ autoIncrement: true }),
5+
name: text().notNull(),
6+
age: int().notNull(),
7+
email: text().notNull().unique(),
8+
gender: text().notNull(),
9+
});

app/routes/api.do.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type { Route } from "./+types/api.do";
2+
3+
export async function loader({ context }: Route.LoaderArgs) {
4+
const { env } = context.cloudflare;
5+
const id = env.DO.idFromName("user-id-999");
6+
const stub = env.DO.get(id);
7+
const userAll = await stub.insertAndList({
8+
name: "John",
9+
age: 30,
10+
11+
gender: "male",
12+
});
13+
console.log(
14+
"New user created. Getting all usersfrom the database: ",
15+
userAll,
16+
);
17+
}

drizzle-do.config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { defineConfig } from "drizzle-kit";
2+
3+
export default defineConfig({
4+
out: "./drizzle-do",
5+
schema: "./app/lib/db/schema-do.ts",
6+
dialect: "sqlite",
7+
driver: "durable-sqlite",
8+
});
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CREATE TABLE `users_table` (
2+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
3+
`name` text NOT NULL,
4+
`age` integer NOT NULL,
5+
`email` text NOT NULL
6+
);
7+
--> statement-breakpoint
8+
CREATE UNIQUE INDEX `users_table_email_unique` ON `users_table` (`email`);

drizzle-do/0001_awesome_brood.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE `users_table` ADD `gender` text NOT NULL;

drizzle-do/meta/0000_snapshot.json

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"version": "6",
3+
"dialect": "sqlite",
4+
"id": "d58425e2-8b31-424e-88a2-0a69d601dda8",
5+
"prevId": "00000000-0000-0000-0000-000000000000",
6+
"tables": {
7+
"users_table": {
8+
"name": "users_table",
9+
"columns": {
10+
"id": {
11+
"name": "id",
12+
"type": "integer",
13+
"primaryKey": true,
14+
"notNull": true,
15+
"autoincrement": true
16+
},
17+
"name": {
18+
"name": "name",
19+
"type": "text",
20+
"primaryKey": false,
21+
"notNull": true,
22+
"autoincrement": false
23+
},
24+
"age": {
25+
"name": "age",
26+
"type": "integer",
27+
"primaryKey": false,
28+
"notNull": true,
29+
"autoincrement": false
30+
},
31+
"email": {
32+
"name": "email",
33+
"type": "text",
34+
"primaryKey": false,
35+
"notNull": true,
36+
"autoincrement": false
37+
}
38+
},
39+
"indexes": {
40+
"users_table_email_unique": {
41+
"name": "users_table_email_unique",
42+
"columns": ["email"],
43+
"isUnique": true
44+
}
45+
},
46+
"foreignKeys": {},
47+
"compositePrimaryKeys": {},
48+
"uniqueConstraints": {},
49+
"checkConstraints": {}
50+
}
51+
},
52+
"views": {},
53+
"enums": {},
54+
"_meta": {
55+
"schemas": {},
56+
"tables": {},
57+
"columns": {}
58+
},
59+
"internal": {
60+
"indexes": {}
61+
}
62+
}

drizzle-do/meta/0001_snapshot.json

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{
2+
"version": "6",
3+
"dialect": "sqlite",
4+
"id": "9306fd7c-dafe-47aa-ba50-02934629179f",
5+
"prevId": "d58425e2-8b31-424e-88a2-0a69d601dda8",
6+
"tables": {
7+
"users_table": {
8+
"name": "users_table",
9+
"columns": {
10+
"id": {
11+
"name": "id",
12+
"type": "integer",
13+
"primaryKey": true,
14+
"notNull": true,
15+
"autoincrement": true
16+
},
17+
"name": {
18+
"name": "name",
19+
"type": "text",
20+
"primaryKey": false,
21+
"notNull": true,
22+
"autoincrement": false
23+
},
24+
"age": {
25+
"name": "age",
26+
"type": "integer",
27+
"primaryKey": false,
28+
"notNull": true,
29+
"autoincrement": false
30+
},
31+
"email": {
32+
"name": "email",
33+
"type": "text",
34+
"primaryKey": false,
35+
"notNull": true,
36+
"autoincrement": false
37+
},
38+
"gender": {
39+
"name": "gender",
40+
"type": "text",
41+
"primaryKey": false,
42+
"notNull": true,
43+
"autoincrement": false
44+
}
45+
},
46+
"indexes": {
47+
"users_table_email_unique": {
48+
"name": "users_table_email_unique",
49+
"columns": ["email"],
50+
"isUnique": true
51+
}
52+
},
53+
"foreignKeys": {},
54+
"compositePrimaryKeys": {},
55+
"uniqueConstraints": {},
56+
"checkConstraints": {}
57+
}
58+
},
59+
"views": {},
60+
"enums": {},
61+
"_meta": {
62+
"schemas": {},
63+
"tables": {},
64+
"columns": {}
65+
},
66+
"internal": {
67+
"indexes": {}
68+
}
69+
}

drizzle-do/meta/_journal.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"version": "7",
3+
"dialect": "sqlite",
4+
"entries": [
5+
{
6+
"idx": 0,
7+
"version": "6",
8+
"when": 1766743478456,
9+
"tag": "0000_bright_dark_phoenix",
10+
"breakpoints": true
11+
},
12+
{
13+
"idx": 1,
14+
"version": "6",
15+
"when": 1766746001866,
16+
"tag": "0001_awesome_brood",
17+
"breakpoints": true
18+
}
19+
]
20+
}

drizzle-do/migrations.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import journal from "./meta/_journal.json";
2+
import m0000 from "./0000_bright_dark_phoenix.sql?raw";
3+
import m0001 from "./0001_awesome_brood.sql?raw";
4+
5+
export default {
6+
journal,
7+
migrations: {
8+
m0000,
9+
m0001,
10+
},
11+
};

0 commit comments

Comments
 (0)