task-managment / src / database / schema / areas.ts
areas.ts
Raw
import { relations } from 'drizzle-orm';
import {  pgTable,pgEnum,integer,index, varchar,real, uuid } from 'drizzle-orm/pg-core';
import { floor } from './floor';
import { task } from './task';
import { z } from 'zod';
import { project } from './project';
import { areaStatusEnum } from '@/server/project/domain/models';

export const areaStatus=pgEnum("status", areaStatusEnum) 
export const areaStatusEnumSchema=z.enum(areaStatus.enumValues)

export const areas = pgTable("areas", {
	id: uuid("id").primaryKey().defaultRandom().notNull(),
	type:varchar('type',{length:250}).notNull(),
	length: real("length").notNull(),
    width: real("width").notNull(),
    quantity: integer("quantity").notNull().default(1),
    projectId:uuid('project_id').notNull().references(()=>project.id),
    projectName:varchar('project_name',{length:250}).notNull(),
    floorId:uuid('floorId').notNull().references(()=>floor.id,{onDelete:'cascade',onUpdate:'cascade'}),
    status:areaStatus('status').notNull().default('no iniciada')
},(t)=>({
    areas_floor:index("areas_floor").on(t.floorId)
}));



export const areasRelations=relations(areas,({one,many})=>({
    floor:one(floor,{
        fields:[areas.floorId],
        references:[floor.id]
    }),
    task:many(task)
}))

export type AreaSelect= typeof areas.$inferSelect
export type AreaUpdate= typeof areas.$inferInsert