This commit is contained in:
Daniel
2020-03-02 00:08:49 +01:00
parent d9df2930cb
commit 26d7fc767c
71 changed files with 141 additions and 34 deletions

View File

@@ -0,0 +1,12 @@
//----------------------
// workarounds -> should be done by @cds-compiler
annotate cds.UUID with @odata.Type: 'Edm.String';
using from '@sap/capire-products';
annotate sap.capire.products.Products with { texts @odata.contained }
annotate sap.capire.products.Categories with { texts @odata.contained }
annotate sap.capire.reviews.ReviewsService with @imported;
annotate sap.capire.reviews.Reviews with @cds.persistence.skip;
annotate sap.capire.reviews.Likes with @cds.persistence.skip;

View File

@@ -0,0 +1,35 @@
namespace sap.capire.bookstore;
// Service for all users to browse books
using { sap.capire.products } from '../db/schema';
service CatalogService @(path:'browse'){
@readonly entity Books as select from products.Products { *,
author.firstname ||' '|| author.lastname as author : String,
category.name as genre,
} excluding { createdBy, modifiedBy };
@readonly entity Genres as projection on products.Categories;
}
// Reuse AdminService from @sap/capire-products...
using { sap.capire.products.AdminService } from '@sap/capire-products';
using { sap.capire.bookstore as my } from '../db/schema';
extend service AdminService with @(impl:'srv/services.js') {
entity Authors as projection on my.Authors;
}
// Adding reviews via @sap/capire-reviews service
using { sap.capire.reviews.ReviewsService as external } from '@sap/capire-reviews';
extend service CatalogService with {
@readonly entity Reviews as projection on external.Reviews;
}
// Adding images via @sap/capire-media service
using from '@sap/capire-media';
// using from '@sap/capire-orders';
// using from '@sap/capire-users';

View File

@@ -0,0 +1,38 @@
const cds = require('@sap/cds')
module.exports['sap.capire.bookstore.CatalogService'] = cds.service.impl (async (srv) => {
const ReviewsService = await cds.connect.to ('sap.capire.reviews.ReviewsService')
const { Reviews } = ReviewsService.entities
const { Books } = srv.entities
// delegate requests to reviews service
srv.on('READ', 'Reviews', async (req) => {
const { SELECT } = cds.ql(req)
const results = await SELECT.from (Reviews)
// TODO: Should actually be using .where of fluent query API
if (req.query.SELECT.where) {
return results.filter (row => row.subject === req.query.SELECT.where[2].val)
}
return results
})
// react on event messages from reviews service
ReviewsService.on ('reviewed', (msg) => {
console.debug ('> received message:', msg.event, msg.data)
const {subject,rating} = msg.data
const tx = cds.transaction(msg)
return tx.run (UPDATE(Books).set({rating}) .where ({ID:subject})) //.then (console.log)
})
})
// FIXME: pls remove this...
process.env.destinations = JSON.stringify([{
name: 'reviewsDest',
url: 'http://localhost:4005/reviews',
username: 'dummy',
password: 'dummy'
}])