import { relations } from 'drizzle-orm'; import { pgTable,serial,char,pgEnum, primaryKey,integer,index,uniqueIndex,timestamp,unique, varchar, date, uuid } from 'drizzle-orm/pg-core'; import { project } from './project'; import { floor } from './floor'; import { areas } from './areas'; import { user } from './user'; import { z } from 'zod'; import { priorityType, taskStatus } from '@/server/task/domain/models'; export const status=pgEnum("status", taskStatus) export const statusEnumSchema=z.enum(status.enumValues) export const priority=pgEnum("priority", priorityType) export const priorityEnumSchema=z.enum(priority.enumValues,{message:'Escoja una prioridad'}) export const task = pgTable("task", { id: uuid("id").primaryKey().notNull(), comments:varchar('comments',{length:255}).notNull(), status:status('status').notNull().default('no iniciada'), userId:varchar('user_id',{length:255}).references(()=>user.id,{onDelete:'cascade',onUpdate:'cascade'}), startDate:date('start_date').notNull(), expireDate:date('expire_date'), startedTime:timestamp('started_time'), endedTime:timestamp('ended_time'), projectId:uuid('project_id').notNull().references(()=>project.id,{onDelete:'cascade',onUpdate:'cascade'}), areaId:uuid('area_id').notNull().references(()=>areas.id,{onDelete:'cascade',onUpdate:'cascade'}), areaName:varchar('area_name',{length:255}), floorName:varchar('floor_name',{length:255}), projectName:varchar('project_name',{length:255}), priority:priority('priority').notNull(), createdAT:timestamp('created_At').defaultNow(), updatedAt:timestamp('updated_At').defaultNow().$onUpdate(()=>new Date()) },(t)=>{ return { task_project:index('task_project').on(t.projectId), task_area:index('task_area').on(t.areaId), task_startDate:index('task_startDate').on(t.startDate), task_expireDate:index('task_endDate').on(t.expireDate), task_status:index('task_status').on(t.status), task_user:index('task_user').on(t.userId), } }); export type TaskSelect = typeof task.$inferSelect; export type TaskInsert = typeof task.$inferInsert; export const taskRelations=relations(task,({one,many})=>({ project:one(project,{ fields:[task.projectId], references:[project.id] }), user:one(user,{ fields:[task.userId], references:[user.id] }), area:one(areas,{ fields:[task.areaId], references:[areas.id] }) }))