import { defaultGqlPermission, defaultPermission } from "@tailor-platform/erp-kit/core"; import { db, type TailorAnyDBType } from "@tailor-platform/sdk"; import { valuationPolicy } from "./valuationPolicy"; const builtins = (params: { itemType?: TailorAnyDBType; companyType?: TailorAnyDBType }) => { const itemId = db.uuid().description("Foreign key to Item"); const companyId = db.uuid().description("Foreign key to Company"); return { itemId: params.itemType ? itemId.relation({ type: "n-1", toward: { type: params.itemType, as: "item" }, backward: "itemValuations", }) : itemId, companyId: params.companyType ? companyId.relation({ type: "n-1", toward: { type: params.companyType, as: "company" }, backward: "itemValuations", }) : companyId, valuationPolicyId: db .uuid() .relation({ type: "n-1", toward: { type: valuationPolicy, as: "valuationPolicy" }, backward: "itemValuations", }) .description("Foreign key to ValuationPolicy"), }; }; export function createItemValuationType(params: { itemType?: TailorAnyDBType; companyType?: TailorAnyDBType; }) { return db .table("ItemValuation", { ...builtins(params), ...db.fields.timestamps(), }) .indexes({ fields: ["itemId", "companyId"], unique: true, name: "item_valuation_item_company_unique_idx", }) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } export const itemValuation = createItemValuationType({});