diff --git a/bookshop/srv/access-control.cds b/bookshop/srv/access-control.cds index 1cd1ac3c..80384f6e 100644 --- a/bookshop/srv/access-control.cds +++ b/bookshop/srv/access-control.cds @@ -1,2 +1,2 @@ using { AdminService } from './admin-service'; -annotate AdminService with @requires: false; //'admin'; +annotate AdminService with @requires:'admin'; diff --git a/bookshop/srv/admin-service.cds b/bookshop/srv/admin-service.cds index 855e73d2..37b02eb7 100644 --- a/bookshop/srv/admin-service.cds +++ b/bookshop/srv/admin-service.cds @@ -1,6 +1,6 @@ using { sap.capire.bookshop as my } from '../db/schema'; service AdminService @(path:'/admin') { - entity Authors as projection on my.Authors excluding { books}; + entity Authors as projection on my.Authors; entity Books as projection on my.Books; entity Genres as projection on my.Genres; } diff --git a/bookshop/test/dynamic-constraints/readme.md b/bookshop/test/dynamic-constraints/readme.md new file mode 100644 index 00000000..0ffb974d --- /dev/null +++ b/bookshop/test/dynamic-constraints/readme.md @@ -0,0 +1,26 @@ +## Experimental Dynamic Constraints + +This example demonstrates how to use dynamic constraints in a CAP application. It includes a service definition and a test setup to validate the constraints. + + +### Prerequisites + +You've setup the [_cap/samples_](https://github.com/sap-samples/cloud-cap-samples) like so: + +```sh +git clone -q https://github.com/sap-samples/cloud-cap-samples cap/samples +cd cap/samples +npm install +``` + +### Testing + +Test like that in `cds.repl` from _cap/samples_ root: + +```sh +cds repl --run bookshop/test/dynamic-constraints +```` + +```javascript +await AdminService.create ('Books', { title:' ', author_ID:150 }) +``` diff --git a/bookshop/server.js b/bookshop/test/dynamic-constraints/server.js similarity index 82% rename from bookshop/server.js rename to bookshop/test/dynamic-constraints/server.js index 819c55b7..d7d62fbb 100644 --- a/bookshop/server.js +++ b/bookshop/test/dynamic-constraints/server.js @@ -1,9 +1,6 @@ // -// Quick and dirty implementation for cds.validate() using db-level constraints -// Test in cds.repl like that: -// {Books} = AdminService.entities -// await cds.run (()=> INSERT.into (Books, { title:' ', author_ID:150 }) .then (cds.validate(Books))) -// await AdminService.create ('Books', { title:' ', author_ID:150 }) +// Quick and dirty implementation for cds.validate() +// using db-level constraints. // const cds = require('@sap/cds') diff --git a/bookshop/test/dynamic-constraints/srv/admin-service.cds b/bookshop/test/dynamic-constraints/srv/admin-service.cds new file mode 100644 index 00000000..373501e5 --- /dev/null +++ b/bookshop/test/dynamic-constraints/srv/admin-service.cds @@ -0,0 +1,5 @@ +using { AdminService } from '../../../srv/admin-service'; +annotate AdminService with @requires: false; +extend AdminService.Authors with columns { + null as books // to simulate the exclusion of books +} diff --git a/bookshop/srv/x-field-control.cds b/bookshop/test/dynamic-constraints/srv/field-control.cds similarity index 88% rename from bookshop/srv/x-field-control.cds rename to bookshop/test/dynamic-constraints/srv/field-control.cds index 9f96d3ad..3b48b7a3 100644 --- a/bookshop/srv/x-field-control.cds +++ b/bookshop/test/dynamic-constraints/srv/field-control.cds @@ -1,5 +1,5 @@ namespace sap.capire.bookshop; -using from '../db/schema'; +using from './admin-service'; view Books.field.control as select from Books { ID, genre.name == 'Drama' ? 'readonly' : diff --git a/bookshop/srv/x-validation.cds b/bookshop/test/dynamic-constraints/srv/validation.cds similarity index 100% rename from bookshop/srv/x-validation.cds rename to bookshop/test/dynamic-constraints/srv/validation.cds