import { eq } from "drizzle-orm"; import { Elysia, t } from "elysia"; import { TodoForm, TodoItem, TodoList } from "../components/todos"; import { ctx } from "../context"; import { client, db } from "../db"; import { insertTodoSchema, todos } from "../db/schema/todos"; export const todosController = new Elysia({ prefix: "/todos", name: "@controllers/todos", }) .use(ctx) .get("/", async () => { const data = await db.select().from(todos).limit(10); return ; }) .post( "/toggle/:id", async ({ params }) => { const [oldTodo] = await db .select() .from(todos) .where(eq(todos.id, params.id)); if (!oldTodo) { throw new Error("Todo not found"); } const [newTodo] = await db .update(todos) .set({ completed: !oldTodo.completed }) .where(eq(todos.id, params.id)) .returning(); if (!newTodo) { throw new Error("Todo not found"); } client.sync(); console.log("returning"); return ; }, { params: t.Object({ id: t.Numeric(), }), }, ) .delete( "/:id", async ({ params }) => { await db.delete(todos).where(eq(todos.id, params.id)); }, { params: t.Object({ id: t.Numeric(), }), }, ) .post( "", async ({ body }) => { const content = { beth: "Learn the BETH stack", vim: "Learn vim", like: "Like the video", sub: "Subscribe to Ethan", }; const [newTodo] = await db .insert(todos) .values({ content: content[body.content] }) .returning(); if (!newTodo) { throw new Error("Todo not found"); } // const now2 = performance.now(); // client.sync().then(() => { // console.log("synced in", performance.now() - now2); // console.log("total time", performance.now() - now); // }); return ; }, { body: t.Object({ content: t.Union([ t.Literal("beth"), t.Literal("vim"), t.Literal("like"), t.Literal("sub"), ]), }), }, );