import { BigNumberRawValue, DAL } from "@medusajs/framework/types" import { BigNumber, MikroOrmBigNumberProperty, createPsqlIndexStatementHelper, generateEntityId, } from "@medusajs/framework/utils" import { BeforeCreate, Entity, ManyToOne, OnInit, OptionalProps, PrimaryKey, Property, Rel, } from "@mikro-orm/core" import OrderLineItem from "./line-item" import Order from "./order" type OptionalLineItemProps = DAL.ModelDateColumns const tableName = "order_item" const OrderIdIndex = createPsqlIndexStatementHelper({ tableName, columns: ["order_id"], where: "deleted_at IS NOT NULL", }) const OrderVersionIndex = createPsqlIndexStatementHelper({ tableName, columns: ["version"], where: "deleted_at IS NOT NULL", }) const ItemIdIndex = createPsqlIndexStatementHelper({ tableName, columns: ["item_id"], where: "deleted_at IS NOT NULL", }) const DeletedAtIndex = createPsqlIndexStatementHelper({ tableName, columns: "deleted_at", where: "deleted_at IS NOT NULL", }) @Entity({ tableName }) export default class OrderItem { [OptionalProps]?: OptionalLineItemProps @PrimaryKey({ columnType: "text" }) id: string @ManyToOne({ entity: () => Order, mapToPk: true, fieldName: "order_id", columnType: "text", }) @OrderIdIndex.MikroORMIndex() order_id: string @ManyToOne(() => Order, { persist: false, }) order: Rel @Property({ columnType: "integer" }) @OrderVersionIndex.MikroORMIndex() version: number @ManyToOne({ entity: () => OrderLineItem, fieldName: "item_id", mapToPk: true, columnType: "text", }) @ItemIdIndex.MikroORMIndex() item_id: string @ManyToOne(() => OrderLineItem, { persist: false, }) item: Rel @MikroOrmBigNumberProperty({ nullable: true }) unit_price: BigNumber | number | null = null @Property({ columnType: "jsonb", nullable: true }) raw_unit_price: BigNumberRawValue | null = null @MikroOrmBigNumberProperty({ nullable: true }) compare_at_unit_price: BigNumber | number | null = null @Property({ columnType: "jsonb", nullable: true }) raw_compare_at_unit_price: BigNumberRawValue | null = null @MikroOrmBigNumberProperty() quantity: BigNumber | number @Property({ columnType: "jsonb" }) raw_quantity: BigNumberRawValue @MikroOrmBigNumberProperty() fulfilled_quantity: BigNumber | number = 0 @Property({ columnType: "jsonb" }) raw_fulfilled_quantity: BigNumberRawValue @MikroOrmBigNumberProperty() delivered_quantity: BigNumber | number = 0 @Property({ columnType: "jsonb" }) raw_delivered_quantity: BigNumberRawValue @MikroOrmBigNumberProperty() shipped_quantity: BigNumber | number = 0 @Property({ columnType: "jsonb" }) raw_shipped_quantity: BigNumberRawValue @MikroOrmBigNumberProperty() return_requested_quantity: BigNumber | number = 0 @Property({ columnType: "jsonb" }) raw_return_requested_quantity: BigNumberRawValue @MikroOrmBigNumberProperty() return_received_quantity: BigNumber | number = 0 @Property({ columnType: "jsonb" }) raw_return_received_quantity: BigNumberRawValue @MikroOrmBigNumberProperty() return_dismissed_quantity: BigNumber | number = 0 @Property({ columnType: "jsonb" }) raw_return_dismissed_quantity: BigNumberRawValue @MikroOrmBigNumberProperty() written_off_quantity: BigNumber | number = 0 @Property({ columnType: "jsonb" }) raw_written_off_quantity: BigNumberRawValue @Property({ columnType: "jsonb", nullable: true }) metadata: Record | null = null @Property({ onCreate: () => new Date(), columnType: "timestamptz", defaultRaw: "now()", }) created_at: Date @Property({ onCreate: () => new Date(), onUpdate: () => new Date(), columnType: "timestamptz", defaultRaw: "now()", }) updated_at: Date @Property({ columnType: "timestamptz", nullable: true }) @DeletedAtIndex.MikroORMIndex() deleted_at: Date | null = null @BeforeCreate() onCreate() { this.id = generateEntityId(this.id, "orditem") this.order_id ??= this.order?.id this.item_id ??= this.item?.id this.version ??= this.order?.version } @OnInit() onInit() { this.id = generateEntityId(this.id, "orditem") this.order_id ??= this.order?.id this.item_id ??= this.item?.id this.version ??= this.order?.version } }