import { sql } from "drizzle-orm"; import { pgTable, text, varchar, timestamp, integer, boolean } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { z } from "zod"; export const users = pgTable("users", { id: varchar("id").primaryKey().default(sql`gen_random_uuid()`), username: text("username").notNull().unique(), password: text("password").notNull(), }); export const labels = pgTable("labels", { id: varchar("id").primaryKey().default(sql`gen_random_uuid()`), name: text("name").notNull(), color: text("color").notNull(), }); export const tasks = pgTable("tasks", { id: varchar("id").primaryKey().default(sql`gen_random_uuid()`), title: text("title").notNull(), description: text("description"), status: text("status").notNull().default("todo"), // 'todo' | 'inProgress' | 'done' priority: text("priority").notNull().default("medium"), // 'low' | 'medium' | 'high' dueDate: timestamp("due_date"), timeTracked: integer("time_tracked").notNull().default(0), // in minutes isTracking: boolean("is_tracking").notNull().default(false), projectId: text("project_id"), notes: text("notes"), labelId: varchar("label_id").references(() => labels.id), }); export const insertUserSchema = createInsertSchema(users).pick({ username: true, password: true, }); export const insertLabelSchema = createInsertSchema(labels).omit({ id: true, }); export const insertTaskSchema = createInsertSchema(tasks).omit({ id: true, }); export type InsertUser = z.infer; export type User = typeof users.$inferSelect; export type InsertLabel = z.infer; export type Label = typeof labels.$inferSelect; export type InsertTask = z.infer; export type Task = typeof tasks.$inferSelect;