From 9fe79b28d64e74cd5d957ab25f648bacdc92713a Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 30 Dec 2020 18:48:35 +0100 Subject: [PATCH] Documented impl --- bookshop/srv/cat-service.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/bookshop/srv/cat-service.js b/bookshop/srv/cat-service.js index 7ccefc06..e6926d43 100644 --- a/bookshop/srv/cat-service.js +++ b/bookshop/srv/cat-service.js @@ -1,25 +1,30 @@ const cds = require('@sap/cds') -const { Books } = cds.entities ('sap.capire.bookshop') class CatalogService extends cds.ApplicationService { init(){ + // Reflect entities from model + const { Books } = cds.entities ('sap.capire.bookshop') + // Reduce stock of ordered books if available stock suffices this.on ('submitOrder', async req => { const {book,amount} = req.data - let {stock} = await SELECT('stock').from(Books,book) + // Read stock from database + let {stock} = await SELECT.from (Books, book, b => b.stock) if (stock >= amount) { - await UPDATE (Books,book).with ({ stock: stock -= amount }) + // Reduce stock by ordered amount + await UPDATE (Books,book) .with ({ stock: stock -= amount }) + // Emit event to inform others await this.emit ('OrderedBook', { book, amount, buyer:req.user.id }) - return { stock } + // Return reduced stock to caller + return req.reply ({ stock }) } + // Return error about insufficient stock else return req.error (409,`${amount} exceeds stock for book #${book}`) }) // Add some discount for overstocked books this.after ('READ','Books', each => { - if (each.stock > 111) { - each.title += ` -- 11% discount!` - } + if (each.stock > 111) each.title += ` -- 11% discount!` }) return super.init()