import { defaultGqlPermission, defaultPermission } from "@tailor-platform/erp-kit/core"; import { db, type TailorAnyDBType } from "@tailor-platform/sdk"; import { salesOrder } from "./salesOrder"; export interface CreateSalesOrderRevisionTypeParams { userType?: TailorAnyDBType; } export function createSalesOrderRevisionType(params: CreateSalesOrderRevisionTypeParams) { const amendedByUserId = db .uuid({ optional: true }) .description( "User who initiated this amendment. Set explicitly by amendConfirmedSalesOrder from CommandContext. Optional for backward compatibility with rows written before this column existed.", ); return db .table("SalesOrderRevision", { salesOrderId: db .uuid() .relation({ type: "n-1", toward: { type: salesOrder, as: "salesOrder" }, backward: "revisions", }) .description("Foreign key to SalesOrder"), revisionNumber: db .int() .description( "Sequential revision number per sales order, starting at 1 on the first amendment", ), reason: db.string({ optional: true }).description("Free-text amendment reason"), amendedByUserId: params.userType ? amendedByUserId.relation({ type: "n-1", toward: { type: params.userType, as: "amendedByUser" }, backward: "amendedSalesOrderRevisions", }) : amendedByUserId, ...db.fields.timestamps(), }) .indexes({ fields: ["salesOrderId", "revisionNumber"], unique: true, name: "sales_order_revision_unique_idx", }) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } export const salesOrderRevision = createSalesOrderRevisionType({});