import type { DrizzleD1Database } from 'drizzle-orm/d1';
import { drizzle } from 'drizzle-orm/d1';
import { eq } from 'drizzle-orm/expressions';
import type { Request as IttyRequest, Route } from 'itty-router';
import { Router } from 'itty-router';
import { json } from 'itty-router-extras';
import { users } from './schema';
import { sql } from 'drizzle-orm';
export interface Env {
DB: D1Database;
}
interface Request extends IttyRequest {
db: DrizzleD1Database;
}
interface Methods {
get: Route;
post: Route;
}
async function injectDB(request: Request, env: Env) {
const db = drizzle(env.DB);
request.db = db;
}
const router = Router<Request, Methods>({ base: '/' });
router.get("/favicon.ico",()=>{
return json({});
})
router.get('/users', injectDB, async (req: Request, env: Env) => {
const query = req.db.select().from(users);
console.log(query.toSQL());
const result = await query.all();
return json(result);
});
router.get('/users/:id', injectDB, async (req: Request, env: Env) => {
const result : any = await req.db
.select().from(users)
.where(eq(users.id, Number(req.params!['id'])))
.get();
return json(result);
});
router.post('/users', injectDB, async (req: Request, env: Env) => {
const { name, email } = await req.json!();
const res = await req.db.insert(users).values({ name, email }).returning().get();
return json({ res });
});
router.get("/indexes",injectDB, async(req,env)=>{
let data = await req.db.run(sql`SELECT name, type, sql FROM sqlite_schema WHERE type IN ('index');`);
return json(data);
})
export default {
fetch: router.handle,
};
import type { DrizzleD1Database } from 'drizzle-orm/d1';
import { drizzle } from 'drizzle-orm/d1';
import { eq } from 'drizzle-orm/expressions';
import type { Request as IttyRequest, Route } from 'itty-router';
import { Router } from 'itty-router';
import { json } from 'itty-router-extras';
import { users } from './schema';
import { sql } from 'drizzle-orm';
export interface Env {
DB: D1Database;
}
interface Request extends IttyRequest {
db: DrizzleD1Database;
}
interface Methods {
get: Route;
post: Route;
}
async function injectDB(request: Request, env: Env) {
const db = drizzle(env.DB);
request.db = db;
}
const router = Router<Request, Methods>({ base: '/' });
router.get("/favicon.ico",()=>{
return json({});
})
router.get('/users', injectDB, async (req: Request, env: Env) => {
const query = req.db.select().from(users);
console.log(query.toSQL());
const result = await query.all();
return json(result);
});
router.get('/users/:id', injectDB, async (req: Request, env: Env) => {
const result : any = await req.db
.select().from(users)
.where(eq(users.id, Number(req.params!['id'])))
.get();
return json(result);
});
router.post('/users', injectDB, async (req: Request, env: Env) => {
const { name, email } = await req.json!();
const res = await req.db.insert(users).values({ name, email }).returning().get();
return json({ res });
});
router.get("/indexes",injectDB, async(req,env)=>{
let data = await req.db.run(sql`SELECT name, type, sql FROM sqlite_schema WHERE type IN ('index');`);
return json(data);
})
export default {
fetch: router.handle,
};