import { z } from 'https://deno.land/x/zod@v3.21.4/mod.ts' import { createPentagon, TableDefinition, } from 'https://deno.land/x/pentagon@v0.1.5/mod.ts' // import { ulid } from 'https://deno.land/x/ulid@v0.3.0/mod.ts' export const kv = await Deno.openKv('homeman.db') // const todos = kv.list({ prefix: ['todos'] }) // const deleteme = [] // for await (const u of todos) { // deleteme.push(u.key) // console.log(u) // } // for (const d of deleteme) { // await kv.delete(d) // } const User = z.object({ id: z.string().ulid().describe('primary'), createdAt: z.date(), name: z.string(), avatarUrl: z.string(), color: z.string(), }) export const UserModel = User export type User = z.infer export type UserWithTodos = User & { assignedTodos: Todo[] } const Todo = z.object({ id: z.string().ulid().describe('primary'), createdAt: z.date(), description: z.string(), emoji: z.string().nullable(), doneAt: z.date().nullable(), assigneeUserId: z.string().ulid().nullable(), }) export const TodoModel = Todo export type Todo = z.infer export const schema: Record = { users: { schema: User, relations: { assignedTodos: ['todos', [Todo], 'id', 'assigneeUserId'], }, }, todos: { schema: Todo, relations: { assignee: ['users', User, 'assigneeUserId', 'id'], }, }, } export const db = createPentagon(kv, schema) // const daddy: User = { // id: ulid(), // createdAt: new Date(), // name: 'Daddy', // avatarUrl: null, // } // const todo: Todo = { // emoji: null, // id: ulid(), // createdAt: new Date(), // description: 'Test Todo', // doneAt: null, // assigneeUserId: daddy.id, // } // db.todos.create({ data: todo }) // db.users.create({ data: daddy })