diff --git a/packages/bookshop/db/data/sap.capire.bookshop-Orders.csv b/packages/bookshop/db/data/sap.capire.bookshop-Orders.csv index 29a2f991..a77df14a 100644 --- a/packages/bookshop/db/data/sap.capire.bookshop-Orders.csv +++ b/packages/bookshop/db/data/sap.capire.bookshop-Orders.csv @@ -1,4 +1,5 @@ -ID;modifiedAt;createdAt;createdBy;modifiedBy;OrderNo;currency_code -da86efd0-4ba1-4078-b7f0-5c9c530297f7;;2019-01-31;ALICE;;1;EUR -2f2f2640-6866-4dcf-8f4d-3027aa831cad;;2019-03-25;ALICE;;10;EUR -64e718c9-ff99-47f1-8ca3-950c850777d4;;2019-01-30;BOB;;2;EUR \ No newline at end of file +ID;modifiedAt;createdAt;createdBy;modifiedBy;OrderNo;currency_code;status +da86efd0-4ba1-4078-b7f0-5c9c530297f7;;2019-01-31;ALICE;;1;EUR;processing +2f2f2640-6866-4dcf-8f4d-3027aa831cad;;2019-03-25;ALICE;;10;EUR;completed +64e718c9-ff99-47f1-8ca3-950c850777d4;;2019-01-30;BOB;;2;EUR;processing +1af3322d-3cb1-46be-b312-0ae9ec311537;;2019-03-16;BOB;;9;EUR;completed \ No newline at end of file diff --git a/packages/bookshop/db/schema.cds b/packages/bookshop/db/schema.cds index e0e587be..211cd79a 100644 --- a/packages/bookshop/db/schema.cds +++ b/packages/bookshop/db/schema.cds @@ -1,35 +1,50 @@ namespace sap.capire.bookshop; -using { Currency, managed, cuid } from '@sap/cds/common'; + +using { + Currency, + managed, + cuid +} from '@sap/cds/common'; + +type Status : String enum { + completed; + processing; + blocked; +} entity Books : managed { - key ID : Integer; - title : localized String(111); - descr : localized String(1111); - author : Association to Authors; - stock : Integer; - price : Decimal(9,2); - currency : Currency; + key ID : Integer; + title : localized String(111); + descr : localized String(1111); + author : Association to Authors; + stock : Integer; + price : Decimal(9, 2); + currency : Currency; } entity Authors : managed { - key ID : Integer; - name : String(111); - dateOfBirth : Date; - dateOfDeath : Date; - placeOfBirth : String; - placeOfDeath : String; - books : Association to many Books on books.author = $self; + key ID : Integer; + name : String(111); + dateOfBirth : Date; + dateOfDeath : Date; + placeOfBirth : String; + placeOfDeath : String; + books : Association to many Books + on books.author = $self; } entity Orders : cuid, managed { - OrderNo : String @title:'Order Number'; //> readable key - Items : Composition of many OrderItems on Items.parent = $self; - total : Decimal(9,2) @readonly; + OrderNo : String @title : 'Order Number'; //> readable key + status : Status; + Items : Composition of many OrderItems + on Items.parent = $self; + total : Decimal(9, 2)@readonly; currency : Currency; } + entity OrderItems : cuid { parent : Association to Orders; book : Association to Books; amount : Integer; - netAmount : Decimal(9,2); -} + netAmount : Decimal(9, 2); +} \ No newline at end of file diff --git a/packages/bookshop/srv/cat-service.js b/packages/bookshop/srv/cat-service.js index 70e14663..4f008165 100644 --- a/packages/bookshop/srv/cat-service.js +++ b/packages/bookshop/srv/cat-service.js @@ -9,13 +9,15 @@ module.exports = cds.service.impl(async function () { this.on('READ', BusinessPartners, req => bupaSrv.tx(req).run(req.query)) bupaSrv.on('BusinessPartner/Changed', async msg => { - console.log('>> Received', msg.data) + console.log('>> Received BusinessPartner/Changed', msg.data) const BUSINESSPARTNER = msg.data.KEY[0].BUSINESSPARTNER - const orders = await cds.tx(msg).run(SELECT('ID').from(Orders).where({ createdBy: BUSINESSPARTNER })) + const tx = cds.tx(msg) + const orders = await tx.run(SELECT('ID').from(Orders).where({ createdBy: BUSINESSPARTNER, status: 'processing' })) if (!orders.length) return const businessPartner = await bupaSrv.tx(msg).run(SELECT.one(BusinessPartners).where({ ID: BUSINESSPARTNER })) if (!businessPartner || !businessPartner.BusinessPartnerIsBlocked) return - orders.forEach(order => this.emit('OrderBlocked', order) && console.log('>> Emitted', order)) + await Promise.all(orders.map(order => tx.run(UPDATE(Orders).where(order).set({ status: 'blocked' })))) + orders.forEach(order => this.emit('OrderBlocked', order) && console.log('>> Emitted OrderBlocked', order)) }) /** Add some discount for overstocked books */ diff --git a/packages/bookshop/srv/external/API_BUSINESS_PARTNER.js b/packages/bookshop/srv/external/API_BUSINESS_PARTNER.js index 43add793..0c055df6 100644 --- a/packages/bookshop/srv/external/API_BUSINESS_PARTNER.js +++ b/packages/bookshop/srv/external/API_BUSINESS_PARTNER.js @@ -4,6 +4,6 @@ module.exports = srv => { KEY: [{ BUSINESSPARTNER: req.data.BusinessPartner }] } srv.emit('BusinessPartner/Changed', payload) - console.log('<< Emitted', payload) + console.log('<< Emitted BusinessPartner/Changed', payload) }) } \ No newline at end of file