diff --git a/fiori/app/bookshop.html b/fiori/app/bookshop.html deleted file mode 100644 index e7c07e25..00000000 --- a/fiori/app/bookshop.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/fiori/app/reviews.html b/fiori/app/reviews.html deleted file mode 100644 index 75af8860..00000000 --- a/fiori/app/reviews.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/fiori/server.js b/fiori/server.js index a2d911a2..cdb091a5 100644 --- a/fiori/server.js +++ b/fiori/server.js @@ -9,19 +9,12 @@ cds.emit = function (event,...args) { } cds.once('bootstrap',(app)=>{ - app.use ('/orders/webapp', _from('@capire/orders/app/orders/webapp/manifest.json')) - app.use ('/bookshop', _from('@capire/bookshop/app/vue/index.html')) - app.use ('/reviews', _from('@capire/reviews/app/vue/index.html')) + app.serve ('/orders/webapp').from('@capire/orders','app/orders/webapp') + app.serve ('/bookshop').from('@capire/bookshop','app/vue') + app.serve ('/reviews').from('@capire/reviews','app/vue') }) cds.once('served', require('./srv/mashup')) cds.once('served', require('@capire/suppliers/srv/mashup')) module.exports = cds.server - - -// ----------------------------------------------------------------------- -// Helper for serving static content from npm-installed packages -const {static} = require('express') -const {dirname} = require('path') -const _from = target => static (dirname (require.resolve(target))) diff --git a/fiori/srv/mashup.cds b/fiori/srv/mashup.cds index 97f21771..c62c37bd 100644 --- a/fiori/srv/mashup.cds +++ b/fiori/srv/mashup.cds @@ -3,17 +3,17 @@ // Mashing up imported models... // -using { sap.capire.bookshop.Books } from '@capire/bookshop'; - // // Extend Books with access to Reviews and average ratings // +using { CatalogService.ListOfBooks, sap.capire.bookshop.Books } from '@capire/bookshop'; using { ReviewsService.Reviews } from '@capire/reviews'; extend Books with { reviews : Composition of many Reviews on reviews.subject = $self.ID; - rating : Decimal; + rating : Reviews:rating; } +extend projection ListOfBooks with { rating } // // Extend Orders with Books as Products diff --git a/reviews/test/bookshop/.env b/reviews/test/bookshop/.env new file mode 100644 index 00000000..8c601148 --- /dev/null +++ b/reviews/test/bookshop/.env @@ -0,0 +1,2 @@ +cds.requires.messaging.kind = file-based-messaging +PORT = 4004 \ No newline at end of file diff --git a/reviews/test/bookshop/package.json b/reviews/test/bookshop/package.json new file mode 100644 index 00000000..f2b47008 --- /dev/null +++ b/reviews/test/bookshop/package.json @@ -0,0 +1,19 @@ +{ + "name": "@capire/fiori", + "version": "1.0.0", + "dependencies": { + "@capire/bookshop": "*", + "@capire/reviews": "*", + "@sap/cds": "^5", + "express": "^4.17.1" + }, + "cds": { + "requires": { + "auth": { "strategy": "dummy" }, + "ReviewsService": { + "kind": "odata", + "model": "@capire/reviews" + } + } + } +} diff --git a/reviews/test/bookshop/server.js b/reviews/test/bookshop/server.js new file mode 100644 index 00000000..70193950 --- /dev/null +++ b/reviews/test/bookshop/server.js @@ -0,0 +1,20 @@ +const cds = require ('@sap/cds') + +cds.once('bootstrap',(app)=>{ + // Delegate to imported apps (reviews only when mocked) + app.serve ('/bookshop').from ('@capire/bookshop','app/vue') + app.serve ('/reviews',).from ('@capire/reviews','app/vue') +}) + +cds.once('served', async ()=>{ + // Update Books' average ratings when ReviewsService signals updated reviews + const ReviewsService = await cds.connect.to ('ReviewsService') + ReviewsService.on ('reviewed', (msg) => { + console.debug ('> received:', msg.event, msg.data) + const { subject, rating } = msg.data + return UPDATE('Books',subject).with({rating}) + }) + +}) + +module.exports = cds.server diff --git a/reviews/test/bookshop/services.cds b/reviews/test/bookshop/services.cds new file mode 100644 index 00000000..9470f6cd --- /dev/null +++ b/reviews/test/bookshop/services.cds @@ -0,0 +1,11 @@ +namespace sap.capire.bookshop; //> allows UPDATE('Books')... +// +// Extend Books with access to Reviews and average ratings +// +using { CatalogService.ListOfBooks, sap.capire.bookshop.Books } from '@capire/bookshop'; +using { ReviewsService.Reviews } from '@capire/reviews'; +extend Books with { + reviews : Composition of many Reviews on reviews.subject = $self.ID; + rating : Reviews:rating; +} +extend projection ListOfBooks with { rating }