-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
122 lines (90 loc) · 3.25 KB
/
index.js
File metadata and controls
122 lines (90 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const sqlite3 = require("sqlite3").verbose();
const queries = require("./queries");
const templates = require("./templates");
const { serve } = require("@hono/node-server");
const { serveStatic } = require("@hono/node-server/serve-static");
const { Hono } = require("hono");
const db = new sqlite3.Database("database.db");
db.serialize(() => {
db.run(queries.Tweets.createTable);
db.run(queries.Users.createTable);
db.run(queries.Users.create, 'りんご太郎', 'apple@example.com', '2022-08-15 00:00:00');
db.run(queries.Users.create, 'みかん次郎', 'mikan@example.com', '2022-08-15 00:00:01');
db.run(queries.Users.create, 'ぶどう三郎', 'budo@example.com', '2022-08-15 00:00:02');
db.run(queries.Tweets.create, 'あけおめ!', 3, '2023-01-01 00:00:00');
db.run(queries.Tweets.create, '今年もよろしくお願いします!', 2, '2023-01-01 00:00:01');
db.run(queries.Tweets.create, '今年こそは痩せるぞ!', 1, '2023-01-01 00:00:02');
});
const app = new Hono();
app.get("/", async (c) => {
const tweets = await new Promise((resolve) => {
db.all(queries.Tweets.findAll, (err, rows) => {
resolve(rows);
});
});
const tweetList = templates.TWEET_LIST_VIEW(tweets);
const response = templates.HTML(tweetList);
return c.html(response);
});
app.get("/user/register", async (c) => {
const registerForm = templates.USER_REGISTER_FORM_VIEW();
const response = templates.HTML(registerForm);
return c.html(response);
});
app.post("/user/register", async (c) => {
const body = await c.req.parseBody();
const now = new Date().toISOString();
const userID = await new Promise((resolve) => {
db.run(queries.Users.create, body.name, body.email, now, (err) => {
resolve(this.lastID);
});
});
return c.redirect(`/user/${userID}`);
});
app.get("/user/:id", async (c) => {
const userId = c.req.param("id");
const user = await new Promise((resolve) => {
db.get(queries.Users.findById, userId, (err, row) => {
resolve(row);
});
});
if (!user) {
return c.notFound();
}
const tweets = await new Promise((resolve) => {
db.all(queries.Tweets.findByUserId, userId, (err, rows) => {
resolve(rows);
});
});
const userTweetList = templates.USER_TWEET_LIST_VIEW(user, tweets);
const response = templates.HTML(userTweetList);
return c.html(response);
});
app.get("/tweet", async (c) => {
const users = await new Promise((resolve) => {
db.all(queries.Users.findAll, (err, rows) => {
resolve(rows);
});
});
const tweetForm = templates.TWEET_FORM_VIEW(users);
const response = templates.HTML(tweetForm);
return c.html(response);
});
app.post("/tweet", async (c) => {
const body = await c.req.parseBody();
const now = new Date().toISOString();
await new Promise((resolve) => {
db.run(queries.Tweets.create, body.content, body.user_id, now, (err) => {
resolve();
});
});
return c.redirect("/");
});
app.use("/static/*", serveStatic({ root: "./" }));
serve(app);
process.stdin.on("data", (data) => {
if (data.toString().trim() === "q") {
db.close();
process.exit();
}
});