task-managment / src / database / schema / projectMaterials.ts
projectMaterials.ts
Raw
import { relations } from 'drizzle-orm';
import {  pgTable,serial,char, primaryKey,integer,index,uniqueIndex,timestamp,unique, varchar, uuid } from 'drizzle-orm/pg-core';
import { project } from './project';
import { materials } from './materials';


export const projectMaterials = pgTable("projectMaterials", {
	id: uuid("id").primaryKey().defaultRandom().notNull(),
    projectName:varchar('project_name',{length:255}).notNull(),
	projectId:uuid('project_id').references(()=>project.id,{onDelete:'cascade',onUpdate:'cascade'}).notNull(),
	materialId:uuid('material_id').references(()=>materials.id,{onDelete:'cascade',onUpdate:'cascade'}).notNull(),
    requiredQuantity:integer('required_quantity').notNull(),
    usedQuantity:integer('used_quantity').notNull().default(0),
    availableQuantity:integer('available_quantity').notNull().default(0)
},(t)=>({
    unique_material_project:unique().on(t.materialId,t.projectId),
    projectMaterials_project:index("projectMaterials_project").on(t.projectId),
    materialId:index('material_id').on(t.materialId)
}));

export const projectMaterialsRelations=relations(projectMaterials,({one})=>({
    materials:one(materials,{
        fields:[projectMaterials.materialId],
        references:[materials.id]
    }),
    project:one(project,{
        fields:[projectMaterials.projectId],
        references:[project.id]
    })
}))

export type ProjectMaterialsSelect= typeof projectMaterials.$inferInsert
export type ProjectMaterialsInsert= typeof projectMaterials.$inferInsert