166```
167โโโ backend/
168โ โโโ database/
169โ โ โโโ migrations.ts # Schema definitions
170โ โ โโโ queries.ts # DB query functions
228- Handle API calls properly with proper error catching
229
230### Database Patterns
231- Run migrations on startup or comment out for performance
232- Change table names when modifying schemas rather than altering
9export const thinkTool = tool({
10 description:
11 "Use the tool to think about something. It will not obtain new information or change the database, but just append the thought to the log. Use it when complex reasoning or some cache memory is needed.",
12 parameters: z.object({
13 thought: z.string().describe("A thought to think about."),
94 const result = await sqlite.execute(`SELECT * FROM ${CONFIG.bookmarksTable}`);
95
96 console.log(`Fetched ${result.rows.length} bookmarks from the database.`);
97
98 // Parse tags from JSON string and convert rows to Bookmark objects
105 console.log("Example of the first bookmark:", JSON.stringify(bookmarks[0], null, 2));
106 } else {
107 console.log("No bookmarks were found in the database.");
108 }
109
9- The **client-side entrypoint** is `/frontend/index.html`, which in turn imports `/frontend/index.tsx`, which in turn imports the React app from `/frontend/App.tsx`.
10
11[React Hono Example](https://www.val.town/x/stevekrouse/reactHonoExample) is a fuller featured example project, with a SQLite database table, queries, client-side CSS and a favicon, and some shared code that runs on both client and server.
1import { tableName } from "https://esm.town/v/nbbaier/hn_notifier/backend/database/migrations.ts";
2import type { DBItem } from "https://esm.town/v/nbbaier/hn_notifier/shared/types.ts";
3import sqliteRowsToObject from "https://esm.town/v/nbbaier/sqliteRowsToObject";
5
6/**
7 * Follows a Hacker News item by inserting it into the database
8 * @param {DBItem} item - The item to follow containing id and comments
9 * @returns {Promise<DBItem[]>} The inserted item
19
20/**
21 * Unfollows a Hacker News item by deleting it from the database
22 * @param {number} id - The ID of the item to unfollow
23 * @returns {Promise<void>}
31
32/**
33 * Retrieves a single item from the database by ID
34 * @param {number} id - The ID of the item to retrieve
35 * @returns {Promise<DBItem[]>} The matching item(s)
44
45/**
46 * Retrieves all items from the database
47 * @returns {Promise<DBItem[]>} Array of all items
48 */
1import api from "https://esm.town/v/nbbaier/hn_notifier/backend/api.ts";
2import { createTables } from "https://esm.town/v/nbbaier/hn_notifier/backend/database/migrations.ts";
3import { parseProject, readFile, serveFile } from "https://esm.town/v/std/utils/index.ts";
4import { Hono } from "npm:hono";
1import createFileTree from "https://esm.town/v/nbbaier/createFileTree";
2import { tableName } from "https://esm.town/v/nbbaier/hn_notifier/backend/database/migrations.ts";
3import * as db from "https://esm.town/v/nbbaier/hn_notifier/backend/database/queries.ts";
4import type { DBItem } from "https://esm.town/v/nbbaier/hn_notifier/shared/types.ts";
5import sqliteRowsToObject from "https://esm.town/v/nbbaier/sqliteRowsToObject";
1import { HTTPException } from "https://esm.sh/hono/http-exception";
2import * as db from "https://esm.town/v/nbbaier/hn_notifier/backend/database/queries.ts";
3import { DBItem, HNAPIResponse } from "https://esm.town/v/nbbaier/hn_notifier/shared/types.ts";
4import {
9- The **client-side entrypoint** is `/frontend/index.html`, which in turn imports `/frontend/index.tsx`, which in turn imports the React app from `/frontend/components/App.tsx`.
10
11[React Hono Example](https://www.val.town/x/stevekrouse/reactHonoExample) is a fuller featured example project, with a SQLite database table, queries, client-side CSS and a favicon, and some shared code that runs on both client and server.
9- The **client-side entrypoint** is `/frontend/index.html`, which in turn imports `/frontend/index.tsx`, which in turn imports the React app from `/frontend/components/App.tsx`.
10
11[React Hono Example](https://www.val.town/x/stevekrouse/reactHonoExample) is a fuller featured example project, with a SQLite database table, queries, client-side CSS and a favicon, and some shared code that runs on both client and server.