import { z } from 'https://deno.land/x/zod@v3.21.4/mod.ts' import { createPentagon } from 'https://deno.land/x/pentagon@v0.1.5/mod.ts' import { ulid } from 'https://deno.land/x/ulid@v0.3.0/mod.ts' const kv = await Deno.openKv() const User = z.object({ id: z.string().ulid().describe('primary'), createdAt: z.date(), name: z.string(), avatarUrl: z.string().nullable(), }) export type User = z.infer 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 type Todo = z.infer export const db = createPentagon(kv, { users: { schema: User, relations: { assignedTodos: ['todos', [Todo], 'id', 'assigneeUserId'], }, }, todos: { schema: Todo, relations: { assignee: ['users', User, 'assigneeUserId', 'id'], }, }, }) 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 })