import { z } from 'https://deno.land/x/zod@v3.21.4/mod.ts' 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 const DailyPhase = z.enum([ 'Morning', 'Midday', 'Evening', 'Bedtime', 'Night', ]) export const DailyPhaseModel = DailyPhase export type DailyPhase = z.infer export function toPhase(dt?: Date | null): z.infer { const d = dt || new Date() const h = d.getHours() if (h >= 6 && h < 12) { return 'Morning' } else if (h >= 12 && h < 17) { return 'Midday' } else if (h >= 17 && h < 19) { return 'Evening' } else if (h >= 19 && h < 23) { return 'Bedtime' } // if (h >= 21 || h < 6) { return 'Night' // } else } const Task = z.object({ id: z.string(), description: z.string(), emoji: z.string().nullable(), doneAt: z.date().nullable(), phase: DailyPhase, }) export const TaskModel = Task export type Task = z.infer