import { type CommonReservedFields, type NoReservedFields, defaultGqlPermission, defaultPermission, } from "@tailor-platform/erp-kit/core"; import { db, type TailorAnyDBField, type TailorAnyDBType } from "@tailor-platform/sdk"; const builtins = (params: { itemType?: TailorAnyDBType }) => { const itemId = db .uuid() .unique() .description("Foreign key to the item-management Item this record adopts"); return { itemId: params.itemType ? itemId.relation({ type: "1-1", toward: { type: params.itemType, as: "item" }, backward: "purchaseItem", }) : itemId, requiresPhysicalReceipt: db .bool() .description("Whether ordering this item is expected to produce a goods receipt"), }; }; type ReservedFields = keyof ReturnType | CommonReservedFields; export interface CreatePurchaseItemTypeParams> { fields?: NoReservedFields; itemType?: TailorAnyDBType; } export function createPurchaseItemType>( params: CreatePurchaseItemTypeParams, ) { return db .table("PurchaseItem", { ...builtins(params), ...((params.fields ?? {}) as F), ...db.fields.timestamps(), }) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } export const purchaseItem = createPurchaseItemType({});