Files
cloud-cap-samples/bookshop/srv/cat-service.js
2020-12-30 18:48:35 +01:00

34 lines
1.1 KiB
JavaScript

const cds = require('@sap/cds')
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
// Read stock from database
let {stock} = await SELECT.from (Books, book, b => b.stock)
if (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 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!`
})
return super.init()
}}
module.exports = { CatalogService }