5

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]
}

0 Answers0