In the following scenario a whole SalesOrder
entity is passed in to the server
items collection of sales order entity can have new items, removed items and updated items.
just persisting the SalesOrder
don't work (wont remove or update)
this is the way i got it to work. is there a better way? or an I missing something?
async save(@Body() item: SalesOrder) {
let result: SalesOrder;
result = await em.getRepository<SalesOrder>(SalesOrder).findOne(item.id);
item.items.forEach(k => k.salesOrder = item.id)
await this.em.getRepository(SalesOrderItem).nativeDelete({ salesOrder: item.id })
for (const [i, it] of item.items.entries()) {
const x = em.getRepository(SalesOrderItem).create({ ...it })
await em.persistAndFlush(x)
}
wrap(result).assign({ ...item, items: null }, {})
await em.getRepository(SalesOrder).persistAndFlush(result);
await em.flush()
}
@Entity()
export class SalesOrder extends BaseEntity {
@PrimaryKey( )
id: number;
@OneToMany(i => SalesOrderItem, t => t.salesOrder, { eager: true, cascade: [Cascade.ALL] })
items = new Collection<SalesOrderItem>(this);
}
@Entity()
export class SalesOrderItem extends BaseEntity {
@ManyToOne({ entity: () => InventoryItem, eager: true, primary: true })
item: IdentifiedReference<InventoryItem>;
@Property({ type: JsonType, columnType: 'jsonb', nullable: true })
configuration?: SalesOrderItem[]
@ManyToOne({ entity: () => SalesOrder, hidden: true, primary: true })
salesOrder: IdentifiedReference<SalesOrder>;
@Property({ nullable: false })
qty: number;
@Property({ nullable: false })
unitPrice: number;
[PrimaryKeyType]: [string, string]
}