-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathcat-service.js
30 lines (25 loc) · 1.05 KB
/
cat-service.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const cds = require('@sap/cds')
class CatalogService extends cds.ApplicationService {
init() {
const { Books } = cds.entities('sap.capire.bookshop')
const { ListOfBooks } = this.entities
// Reduce stock of ordered books if available stock suffices
this.on('submitOrder', async req => {
const { book, quantity } = req.data
if (quantity < 1) return req.reject(400, `quantity has to be 1 or more`)
let b = await SELECT`stock`.from(Books, book)
if (!b) return req.error(404, `Book #${book} doesn't exist`)
let { stock } = b
if (quantity > stock) return req.reject(409, `${quantity} exceeds stock for book #${book}`)
await UPDATE(Books, book).with({ stock: (stock -= quantity) })
await this.emit('OrderedBook', { book, quantity, buyer: req.user.id })
return { stock }
})
// Add some discount for overstocked books
this.after('READ', ListOfBooks, each => {
if (each.stock > 111) each.title += ` -- 11% discount!`
})
return super.init()
}
}
module.exports = { CatalogService }