Compare commits

..

46 Commits

Author SHA1 Message Date
Lothar Bender
8c5a20bdb0 Merge branch 'main' into compose-with-cds-plugins 2023-08-25 17:33:56 +02:00
dependabot[bot]
c14ee0062c Bump @types/jest from 29.5.3 to 29.5.4 (#571)
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.5.3 to 29.5.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: "@types/jest"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-24 13:23:08 +00:00
dependabot[bot]
5eb293d378 Bump @types/node from 20.5.0 to 20.5.4 (#573)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.5.0 to 20.5.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-24 13:21:44 +00:00
dependabot[bot]
b8469d562f Bump chai from 4.3.7 to 4.3.8 (#574)
Bumps [chai](https://github.com/chaijs/chai) from 4.3.7 to 4.3.8.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/4.x.x/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v4.3.7...v4.3.8)

---
updated-dependencies:
- dependency-name: chai
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-24 15:19:15 +02:00
Daniel Schlachter
afd4df3f39 similar behavior cds w bookstore cds w compose 2023-08-18 15:45:22 +02:00
Daniel Schlachter
0228841260 Merge branch 'main' into compose-with-cds-plugins 2023-08-18 11:48:30 +02:00
Daniel Schlachter
24ad8a84da Merge branch 'compose-with-cds-plugins' of https://github.com/SAP-samples/cloud-cap-samples into compose-with-cds-plugins 2023-08-18 11:47:46 +02:00
Daniel Schlachter
e3acbb9832 compose adjustments 2023-08-18 11:46:27 +02:00
dependabot[bot]
36a800165b Bump @sap/cds from 7.1.1 to 7.1.2 (#568)
Bumps [@sap/cds](https://cap.cloud.sap/) from 7.1.1 to 7.1.2.

---
updated-dependencies:
- dependency-name: "@sap/cds"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-16 15:30:53 +02:00
dependabot[bot]
e5e86cb733 Bump @types/node from 20.4.9 to 20.5.0 (#567)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.4.9 to 20.5.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-14 16:10:24 +02:00
dependabot[bot]
f5c7b50a6d Bump @cap-js-community/odata-v2-adapter from 1.11.5 to 1.11.6 (#566)
Bumps [@cap-js-community/odata-v2-adapter](https://github.com/cap-js-community/odata-v2-adapter) from 1.11.5 to 1.11.6.
- [Release notes](https://github.com/cap-js-community/odata-v2-adapter/releases)
- [Changelog](https://github.com/cap-js-community/odata-v2-adapter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/cap-js-community/odata-v2-adapter/compare/v1.11.5...v1.11.6)

---
updated-dependencies:
- dependency-name: "@cap-js-community/odata-v2-adapter"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-10 16:04:45 +02:00
dependabot[bot]
6ae95cfa51 Bump @types/node from 20.4.8 to 20.4.9 (#565)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.4.8 to 20.4.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-09 16:02:11 +02:00
dependabot[bot]
ec03c6418b Bump @types/node from 20.4.6 to 20.4.8 (#564)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.4.6 to 20.4.8.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-09 12:49:39 +02:00
dependabot[bot]
021df191ec Bump @types/node from 20.4.5 to 20.4.6 (#562)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.4.5 to 20.4.6.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-03 16:37:01 +02:00
Daniel Schlachter
2e0a5aeb73 Merge branch 'main' into compose-with-cds-plugins 2023-08-03 10:02:33 +02:00
dependabot[bot]
8b978a94ec Bump @cap-js-community/odata-v2-adapter from 1.11.4 to 1.11.5 (#560)
Bumps [@cap-js-community/odata-v2-adapter](https://github.com/cap-js-community/odata-v2-adapter) from 1.11.4 to 1.11.5.
- [Release notes](https://github.com/cap-js-community/odata-v2-adapter/releases)
- [Changelog](https://github.com/cap-js-community/odata-v2-adapter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/cap-js-community/odata-v2-adapter/compare/v1.11.4...v1.11.5)

---
updated-dependencies:
- dependency-name: "@cap-js-community/odata-v2-adapter"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-02 15:03:17 +00:00
dependabot[bot]
9596511883 Bump @cap-js/sqlite from 1.0.1 to 1.1.0 (#561)
Bumps [@cap-js/sqlite](https://github.com/cap-js/cds-dbs) from 1.0.1 to 1.1.0.
- [Release notes](https://github.com/cap-js/cds-dbs/releases)
- [Commits](https://github.com/cap-js/cds-dbs/compare/v1.0.1...v1.1.0)

---
updated-dependencies:
- dependency-name: "@cap-js/sqlite"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-02 17:01:13 +02:00
Daniel Schlachter
191e577e51 Merge branch 'main' into compose-with-cds-plugins 2023-08-01 10:47:09 +02:00
dependabot[bot]
d67af1432b Bump @sap/cds from 7.0.3 to 7.1.0 (#558)
Bumps [@sap/cds](https://cap.cloud.sap/) from 7.0.3 to 7.1.0.

---
updated-dependencies:
- dependency-name: "@sap/cds"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-31 19:18:36 +02:00
Olena
52b4dbeacc Merge pull request #556 from SAP-samples/rm-mocked-registry
clean up: removed mocked registry
2023-07-28 14:24:06 +02:00
D070615
4a8d8a0ec3 clean up: removed mocked registry 2023-07-28 11:18:25 +02:00
Daniel Hutzel
a9f040edcc Merge branch 'main' into compose-with-cds-plugins 2023-07-26 17:10:21 +02:00
Daniel Hutzel
b0baf3b5aa Delete bookshop/@cds-models directory 2023-07-26 17:08:47 +02:00
Daniel Hutzel
86fb1d20d3 my-project -> compose 2023-07-26 17:06:08 +02:00
Daniel Hutzel
dfb7d80849 Compose with cds-plugins 2023-07-26 17:01:15 +02:00
dependabot[bot]
cdcfdafbdc Bump @types/node from 20.4.2 to 20.4.5 (#554)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.4.2 to 20.4.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-26 14:24:22 +02:00
dependabot[bot]
e29394eac0 Bump @sap/cds from 7.0.2 to 7.0.3 (#550)
Bumps [@sap/cds](https://cap.cloud.sap/) from 7.0.2 to 7.0.3.

---
updated-dependencies:
- dependency-name: "@sap/cds"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-20 17:58:45 +02:00
Daniel Hutzel
06c583d0cd cosmetics 2023-07-17 14:22:00 +02:00
dependabot[bot]
1d14e75691 Bump @types/node from 20.4.1 to 20.4.2 (#549)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.4.1 to 20.4.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-13 15:35:40 +02:00
dependabot[bot]
9991e73a37 Bump @types/jest from 29.5.2 to 29.5.3 (#548)
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.5.2 to 29.5.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: "@types/jest"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-11 15:01:10 +02:00
dependabot[bot]
8f9e875865 Bump @sap/cds from 7.0.1 to 7.0.2 (#545)
Bumps [@sap/cds](https://cap.cloud.sap/) from 7.0.1 to 7.0.2.

---
updated-dependencies:
- dependency-name: "@sap/cds"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-10 12:30:51 +00:00
dependabot[bot]
a92fb4c7cd Bump @types/node from 20.3.3 to 20.4.1 (#546)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.3.3 to 20.4.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-10 12:28:59 +00:00
dependabot[bot]
f974ac1bf1 Bump semver from 7.5.3 to 7.5.4 (#547)
Bumps [semver](https://github.com/npm/node-semver) from 7.5.3 to 7.5.4.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.5.3...v7.5.4)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-10 14:27:20 +02:00
Daniel Hutzel
11770f68f4 init.js revisited (#538)
* init.js revisited

* Reverting rm sqlite3

* .

---------

Co-authored-by: Johannes Vogel <31311694+johannes-vogel@users.noreply.github.com>
2023-07-05 11:10:09 +02:00
Daniel Hutzel
96473d45c8 Adjusting odata paths for cds7 (#543)
* Adjusting odata paths for cds7

* Still using old sqlite3

* npm ci

* Remove Node 14 tests
2023-07-05 11:07:20 +02:00
Daniel Hutzel
c089c9777b Using latest packages + new db services 2023-07-03 16:05:00 +02:00
Johannes Vogel
68f8a4fe7b restore common check in init.js (#535) 2023-07-03 12:27:55 +02:00
Daniel Hutzel
60a0ea582e Using UPSERTs in init.js 2023-06-30 18:37:15 +02:00
Daniel Hutzel
8ffa3f052d Fixing paths for cds7 2023-06-30 18:36:38 +02:00
dependabot[bot]
6c1c1b1785 Bump @sap/cds from 6.8.2 to 6.8.4 (#526)
Bumps [@sap/cds](https://cap.cloud.sap/) from 6.8.2 to 6.8.4.

---
updated-dependencies:
- dependency-name: "@sap/cds"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-15 15:05:45 +02:00
Heiko Witteborg
7283ac7042 Merge pull request #524 from SAP-samples/prepare-for-new-protocol-handling
Prepare for new protocol handling
2023-06-14 11:42:03 +02:00
d049904
7add92a05c Prepare for new protocol handling 2023-06-13 17:00:32 +02:00
dependabot[bot]
aa13772572 Bump @types/node from 20.2.5 to 20.3.1 (#523)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.2.5 to 20.3.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-13 15:41:58 +02:00
Pierre Fritsch
d612a560aa Manage Books, Manage Authors: Make name mandatory (#519) 2023-06-06 07:06:55 +00:00
dependabot[bot]
8b3a094d22 Bump @cap-js-community/odata-v2-adapter from 1.10.5 to 1.10.6 (#520)
Bumps [@cap-js-community/odata-v2-adapter](https://github.com/cap-js-community/odata-v2-adapter) from 1.10.5 to 1.10.6.
- [Release notes](https://github.com/cap-js-community/odata-v2-adapter/releases)
- [Changelog](https://github.com/cap-js-community/odata-v2-adapter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/cap-js-community/odata-v2-adapter/compare/v1.10.5...v1.10.6)

---
updated-dependencies:
- dependency-name: "@cap-js-community/odata-v2-adapter"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-05 16:29:06 +02:00
dependabot[bot]
e7ed4ff0bf Bump @sap/cds from 6.8.1 to 6.8.2 (#515)
Bumps [@sap/cds](https://cap.cloud.sap/) from 6.8.1 to 6.8.2.

---
updated-dependencies:
- dependency-name: "@sap/cds"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-05 11:06:15 +02:00
44 changed files with 1043 additions and 366 deletions

View File

@@ -16,7 +16,7 @@ jobs:
strategy: strategy:
matrix: matrix:
node-version: [18.x, 16.x, 14.x] node-version: [18.x, 16.x]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2

View File

@@ -54,24 +54,6 @@ npx jest
``` ```
> While mocha is a bit smaller and faster, jest runs tests in parallel and isolation, which allows to run all tests. > While mocha is a bit smaller and faster, jest runs tests in parallel and isolation, which allows to run all tests.
### Serve `npm`
We've included a simple npm registry mock, which allows you to do an `npm install @capire/<package>` locally. Use it as follows:
1. Start the @capire registry:
```sh
npm run registry
```
> While running this will have `@capire:registry=http://localhost:4444` set with npmrc.
2. Install one of the @capire packages wherever you like, for example:
```sh
npm add @capire/common @capire/bookshop
```
## Code Tours ## Code Tours
Take one of the [guided tours](.tours) in VS Code through our CAP samples and learn which CAP features are showcased by the different parts of the repository. Just install the [CodeTour extension](https://marketplace.visualstudio.com/items?itemName=vsls-contrib.codetour) for VS Code. We'll add more code tours in the future. Stay tuned! Take one of the [guided tours](.tours) in VS Code through our CAP samples and learn which CAP features are showcased by the different parts of the repository. Just install the [CodeTour extension](https://marketplace.visualstudio.com/items?itemName=vsls-contrib.codetour) for VS Code. We'll add more code tours in the future. Stay tuned!

3
bookshop/cds-plugin.js Normal file
View File

@@ -0,0 +1,3 @@
cds.once('bootstrap',(app)=>{
app.serve ('/bookshop') .from ('@capire/bookshop','app/vue')
})

View File

@@ -4,15 +4,10 @@
* currencies, if not obtained through @capire/common. * currencies, if not obtained through @capire/common.
*/ */
module.exports = async (tx)=>{ // NOTE: We use cds.on('served') to delay the UPSERTs after the db init
// to run after all INSERTs from .csv files happened.
const has_common = tx.model.definitions['sap.common.Currencies']?.elements.numcode module.exports = cds.on('served', ()=> cds.run(
if (has_common) return UPSERT.into ('sap.common.Currencies') .columns (
const already_filled = await tx.exists('sap.common.Currencies',{code:'EUR'})
if (already_filled) return
await tx.run (INSERT.into ('sap.common.Currencies') .columns (
[ 'code', 'symbol', 'name' ] [ 'code', 'symbol', 'name' ]
) .rows ( ) .rows (
[ 'EUR', '€', 'Euro' ], [ 'EUR', '€', 'Euro' ],
@@ -20,5 +15,5 @@ module.exports = async (tx)=>{
[ 'GBP', '£', 'British Pound' ], [ 'GBP', '£', 'British Pound' ],
[ 'ILS', '₪', 'Shekel' ], [ 'ILS', '₪', 'Shekel' ],
[ 'JPY', '¥', 'Yen' ], [ 'JPY', '¥', 'Yen' ],
)) )
} ))

View File

@@ -3,9 +3,9 @@ namespace sap.capire.bookshop;
entity Books : managed { entity Books : managed {
key ID : Integer; key ID : Integer;
title : localized String(111); title : localized String(111) @mandatory ;
descr : localized String(1111); descr : localized String(1111);
author : Association to Authors; author : Association to Authors @mandatory;
genre : Association to Genres; genre : Association to Genres;
stock : Integer; stock : Integer;
price : Decimal; price : Decimal;
@@ -15,7 +15,7 @@ entity Books : managed {
entity Authors : managed { entity Authors : managed {
key ID : Integer; key ID : Integer;
name : String(111); name : String(111) @mandatory;
dateOfBirth : Date; dateOfBirth : Date;
dateOfDeath : Date; dateOfDeath : Date;
placeOfBirth : String; placeOfBirth : String;

View File

@@ -9,6 +9,9 @@
"index.cds", "index.cds",
"index.js" "index.js"
], ],
"devDependencies": {
"@cap-js/sqlite": "*"
},
"dependencies": { "dependencies": {
"@sap/cds": ">=5.9", "@sap/cds": ">=5.9",
"express": "^4.17.1", "express": "^4.17.1",
@@ -21,7 +24,9 @@
}, },
"cds": { "cds": {
"requires": { "requires": {
"db": "sql" "bookshop-services": {
"model": "@capire/bookshop"
}
} }
} }
} }

View File

@@ -1,5 +1,5 @@
using { sap.capire.bookshop as my } from '../db/schema'; using { sap.capire.bookshop as my } from '../db/schema';
service AdminService @(requires:'admin') { service AdminService @(requires:'admin', path:'/admin') {
entity Books as projection on my.Books; entity Books as projection on my.Books;
entity Authors as projection on my.Authors; entity Authors as projection on my.Authors;
} }

View File

@@ -1,7 +1,7 @@
/** /**
* Exposes user information * Exposes user information
*/ */
service UserService { service UserService @(path: '/user') {
/** /**
* The current user * The current user
*/ */

View File

@@ -6,9 +6,9 @@
"@capire/reviews": "*", "@capire/reviews": "*",
"@capire/orders": "*", "@capire/orders": "*",
"@capire/common": "*", "@capire/common": "*",
"@capire/fiori": "*",
"@capire/data-viewer": "*", "@capire/data-viewer": "*",
"@sap/cds": ">=5", "@sap/cds": ">=5",
"@sap/cds-common-content": "^1.0.0",
"express": "^4.17.1" "express": "^4.17.1"
}, },
"cds": { "cds": {
@@ -27,8 +27,7 @@
"[production]": { "kind": "enterprise-messaging" } "[production]": { "kind": "enterprise-messaging" }
}, },
"db": { "db": {
"kind": "sql", "kind": "sql"
"schema_evolution": "auto"
} }
}, },
"log": { "service": true } "log": { "service": true }

View File

@@ -1,22 +1,18 @@
const cds = require ('@sap/cds') const cds = require ('@sap/cds')
// Add routes to UIs from imported packages
cds.once('bootstrap',(app)=>{
app.serve ('/admin-authors') .from ('@capire/fiori','app/admin-authors')
app.serve ('/admin-books') .from ('@capire/fiori','app/admin-books')
app.serve ('/browse-books') .from ('@capire/fiori','app/browse')
})
// Add mashup logic // Add mashup logic
cds.once('served', require('./srv/mashup')) cds.once('served', require('./srv/mashup'))
// Add routes to UIs from imported packages
cds.once('bootstrap',(app)=>{
app.serve ('/bookshop') .from ('@capire/bookshop','app/vue')
app.serve ('/reviews') .from ('@capire/reviews','app/vue')
app.serve ('/orders') .from('@capire/orders','app/orders')
app.serve ('/data') .from('@capire/data-viewer','app/viewer')
})
// Add Swagger UI // Add Swagger UI
require('./srv/swagger-ui') require('./srv/swagger-ui')
// Returning cds.server
module.exports = cds.server
// For didactic reasons in capire // For didactic reasons in capire
const { ReviewsService, OrdersService } = cds.requires const { ReviewsService, OrdersService } = cds.requires
if (!ReviewsService?.credentials && !OrdersService?.credentials) cds.requires.messaging = false if (!ReviewsService?.credentials && !OrdersService?.credentials) cds.requires.messaging = false

View File

@@ -30,13 +30,3 @@ extend Orders with {
book : Association to Books on product.ID = book.ID book : Association to Books on product.ID = book.ID
} }
} }
// Add orders fiori app (in case of embedded orders service)
using from '@capire/orders/app/fiori';
// Add data browser
using from '@capire/data-viewer';
// Incorporate pre-build extensions from...
using from '@capire/common';

0
common/cds-plugin.js Normal file
View File

View File

@@ -0,0 +1,12 @@
code;name;descr
AU;Australia;Commonwealth of Australia
CA;Canada;Canada
CN;China;People's Republic of China (PRC)
FR;France;French Republic
DE;Germany;Federal Republic of Germany
IN;India;Republic of India
IL;Israel;State of Israel
MM;Myanmar;Republic of the Union of Myanmar
GB;United Kingdom;United Kingdom of Great Britain and Northern Ireland
US;United States;United States of America (USA)
EU;European Union;European Union
1 code name descr
2 AU Australia Commonwealth of Australia
3 CA Canada Canada
4 CN China People's Republic of China (PRC)
5 FR France French Republic
6 DE Germany Federal Republic of Germany
7 IN India Republic of India
8 IL Israel State of Israel
9 MM Myanmar Republic of the Union of Myanmar
10 GB United Kingdom United Kingdom of Great Britain and Northern Ireland
11 US United States United States of America (USA)
12 EU European Union European Union

View File

@@ -0,0 +1,12 @@
code;locale;name;descr
AU;de;Australien;Commonwealth Australien
CA;de;Kanada;Canada
CN;de;China;Volksrepublik China
FR;de;Frankreich;Republik Frankreich
DE;de;Deutschland;Bundesrepublik Deutschland
IN;de;Indien;Republik Indien
IL;de;Israel;Staat Israel
MM;de;Myanmar;Republik der Union Myanmar
GB;de;Vereinigtes Königreich;Vereinigtes Königreich Großbritannien und Nordirland
US;de;Vereinigte Staaten;Vereinigte Staaten von Amerika
EU;de;Europäische Union;Europäische Union
1 code locale name descr
2 AU de Australien Commonwealth Australien
3 CA de Kanada Canada
4 CN de China Volksrepublik China
5 FR de Frankreich Republik Frankreich
6 DE de Deutschland Bundesrepublik Deutschland
7 IN de Indien Republik Indien
8 IL de Israel Staat Israel
9 MM de Myanmar Republik der Union Myanmar
10 GB de Vereinigtes Königreich Vereinigtes Königreich Großbritannien und Nordirland
11 US de Vereinigte Staaten Vereinigte Staaten von Amerika
12 EU de Europäische Union Europäische Union

View File

@@ -1,12 +1,12 @@
code;symbol;numcode;minor;exponent code;symbol;name;descr;numcode;minor;exponent
EUR;€;978;Cent;2 EUR;€;Euro;European Euro;978;Cent;2
USD;$;840;Cent;2 USD;$;US Dollar;United States Dollar;840;Cent;2
CAD;$;124;Cent;2 CAD;$;Canadian Dollar;Canadian Dollar;124;Cent;2
AUD;$;036;Cent;2 AUD;$;Australian Dollar;Australian Dollar;036;Cent;2
GBP;£;826;Penny;2 GBP;£;British Pound;Great Britain Pound;826;Penny;2
ILS;₪;376;Agorat;2 ILS;₪;Shekel;Israeli New Shekel;376;Agorat;2
INR;₹;356;Paise;2 INR;₹;Rupee;Indian Rupee;356;Paise;2
QAR;﷼;634;Dirham;2 QAR;﷼;Riyal;Katar Riyal;356;Dirham;2
SAR;﷼;682;Halala;2 SAR;﷼;Riyal;Saudi Riyal;682;Halala;2
JPY;¥;392;Sen;2 JPY;¥;Yen;Japanese Yen;392;Sen;2
CNY;¥;156;Jiao;1 CNY;¥;Yuan;Chinese Yuan Renminbi;156;Jiao;1
1 code symbol name descr numcode minor exponent
2 EUR Euro European Euro 978 Cent 2
3 USD $ US Dollar United States Dollar 840 Cent 2
4 CAD $ Canadian Dollar Canadian Dollar 124 Cent 2
5 AUD $ Australian Dollar Australian Dollar 036 Cent 2
6 GBP £ British Pound Great Britain Pound 826 Penny 2
7 ILS Shekel Israeli New Shekel 376 Agorat 2
8 INR Rupee Indian Rupee 356 Paise 2
9 QAR Riyal Katar Riyal 634 356 Dirham 2
10 SAR Riyal Saudi Riyal 682 Halala 2
11 JPY ¥ Yen Japanese Yen 392 Sen 2
12 CNY ¥ Yuan Chinese Yuan Renminbi 156 Jiao 1

View File

@@ -0,0 +1,15 @@
code;locale;name;descr
EUR;de;Euro;European Euro
USD;de;US-Dollar;United States Dollar
CAD;de;Kanadischer Dollar;Kanadischer Dollar
AUD;de;Australischer Dollar;Australischer Dollar
GBP;de;Pfund;Britische Pfund
ILS;de;Schekel;Israelische Schekel
JPY;de;Yen;Japanische Yen
EUR;fr;euro;de la Zone euro
USD;fr;dollar;dollar des États-Unis
CAD;fr;dollar canadien;dollar canadien
AUD;fr;dollar australien;dollar australien
GBP;fr;livre sterling;pound sterling
ILS;fr;Shekel;shekel israelien
JPY;fr;Yen;Yen japonais
1 code locale name descr
2 EUR de Euro European Euro
3 USD de US-Dollar United States Dollar
4 CAD de Kanadischer Dollar Kanadischer Dollar
5 AUD de Australischer Dollar Australischer Dollar
6 GBP de Pfund Britische Pfund
7 ILS de Schekel Israelische Schekel
8 JPY de Yen Japanische Yen
9 EUR fr euro de la Zone euro
10 USD fr dollar dollar des États-Unis
11 CAD fr dollar canadien dollar canadien
12 AUD fr dollar australien dollar australien
13 GBP fr livre sterling pound sterling
14 ILS fr Shekel shekel israelien
15 JPY fr Yen Yen japonais

View File

@@ -0,0 +1,5 @@
code;name
de;German
fr;French
en;English
en_GB;British English
1 code name
2 de German
3 fr French
4 en English
5 en_GB British English

View File

@@ -0,0 +1,10 @@
code;locale;name
de;en;German
de;de;Deutsch
de;fr;Allemande
fr;en;French
fr;de;Französisch
fr;fr;Francais
en;en;English
en;de;Englisch
en;fr;Anglais
1 code locale name
2 de en German
3 de de Deutsch
4 de fr Allemande
5 fr en French
6 fr de Französisch
7 fr fr Francais
8 en en English
9 en de Englisch
10 en fr Anglais

View File

@@ -1,7 +1,5 @@
using { sap } from '@sap/cds/common'; using { sap } from '@sap/cds/common';
using from '@sap/cds-common-content';
extend sap.common.Currencies with { extend sap.common.Currencies with {
// Currencies.code = ISO 4217 alphabetic three-letter code // Currencies.code = ISO 4217 alphabetic three-letter code
// with the first two letters being equal to ISO 3166 alphabetic country codes // with the first two letters being equal to ISO 3166 alphabetic country codes

View File

@@ -4,5 +4,12 @@
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@sap/cds": "*" "@sap/cds": "*"
},
"cds": {
"requires": {
"common-data": {
"model": "@capire/common"
}
}
} }
} }

View File

@@ -0,0 +1,168 @@
{
"services": {
"LaunchPage": {
"adapter": {
"config": {
"catalogs": [],
"groups": [
{
"id": "Bookshop",
"title": "Bookshop",
"isPreset": true,
"isVisible": true,
"isGroupLocked": false,
"tiles": [
{
"id": "BrowseBooks",
"tileType": "sap.ushell.ui.tile.StaticTile",
"properties": {
"title": "Browse Books",
"targetURL": "#Books-display"
}
},
{
"id": "BrowseGenres",
"tileType": "sap.ushell.ui.tile.StaticTile",
"properties": {
"title": "Browse Genres (OData v2)",
"targetURL": "#Genres-display"
}
}
]
},
{
"id": "Administration",
"title": "Administration",
"isPreset": true,
"isVisible": true,
"isGroupLocked": false,
"tiles": [
{
"id": "ManageBooks",
"tileType": "sap.ushell.ui.tile.StaticTile",
"properties": {
"title": "Manage Books",
"targetURL": "#Books-manage"
}
},
{
"id": "ManageAuthors",
"tileType": "sap.ushell.ui.tile.StaticTile",
"properties": {
"title": "Manage Authors",
"targetURL": "#Authors-display"
}
},
{
"id": "ManageOrders",
"tileType": "sap.ushell.ui.tile.StaticTile",
"properties": {
"title": "Manage Orders",
"targetURL": "#Orders-manage"
}
}
]
}
]
}
}
},
"NavTargetResolution": {
"config": {
"enableClientSideTargetResolution": true
}
},
"ClientSideTargetResolution": {
"adapter": {
"config": {
"inbounds": {
"BrowseBooks": {
"semanticObject": "Books",
"action": "display",
"title": "Browse Books",
"signature": {
"parameters": {
"Books.ID": {
"renameTo": "ID"
},
"Authors.books.ID": {
"renameTo": "ID"
}
},
"additionalParameters": "ignored"
},
"resolutionResult": {
"applicationType": "SAPUI5",
"additionalInformation": "SAPUI5.Component=bookshop",
"url": "/browse/webapp"
}
},
"BrowseAuthors": {
"semanticObject": "Authors",
"action": "display",
"title": "Browse Authors",
"signature": {
"parameters": {
"Books.author.ID":{
"renameTo": "ID"
}
},
"additionalParameters": "ignored"
},
"resolutionResult": {
"applicationType": "SAPUI5",
"additionalInformation": "SAPUI5.Component=authors",
"url": "/admin-authors/webapp"
}
},
"BrowseGenres": {
"semanticObject": "Genres",
"action": "display",
"title": "Browse Genres",
"signature": {
"parameters": {
"Genre.ID": {
"renameTo": "ID"
}
},
"additionalParameters": "ignored"
},
"resolutionResult": {
"applicationType": "SAPUI5",
"additionalInformation": "SAPUI5.Component=genres",
"url": "/genres/webapp"
}
},
"ManageBooks": {
"semanticObject": "Books",
"action": "manage",
"title": "Manage Books",
"signature": {
"parameters": {},
"additionalParameters": "allowed"
},
"resolutionResult": {
"applicationType": "SAPUI5",
"additionalInformation": "SAPUI5.Component=books",
"url": "/admin-books/webapp"
}
},
"ManageOrders": {
"semanticObject": "Orders",
"action": "manage",
"signature": {
"parameters": {},
"additionalParameters": "allowed"
},
"resolutionResult": {
"applicationType": "SAPUI5",
"additionalInformation": "SAPUI5.Component=orders",
"url": "/orders/webapp"
}
}
}
}
}
}
}
}

12
compose/package.json Normal file
View File

@@ -0,0 +1,12 @@
{
"name": "@capire/bookstore",
"version": "1.0.0",
"dependencies": {
"@capire/bookshop": "*",
"@capire/reviews": "*",
"@capire/fiori": "*",
"@capire/orders": "*",
"@sap/cds": ">=5",
"express": "^4.17.1"
}
}

8
compose/server.js Normal file
View File

@@ -0,0 +1,8 @@
const cds = require ('@sap/cds')
// Add Swagger UI
require('./srv/swagger-ui')
// For didactic reasons in capire
const { ReviewsService, OrdersService } = cds.requires
if (!ReviewsService?.credentials && !OrdersService?.credentials) cds.requires.messaging = false

10
compose/srv/swagger-ui.js Normal file
View File

@@ -0,0 +1,10 @@
// -----------------------------------------------------------------------
// Adding Swagger UI - see https://cap.cloud.sap/docs/advanced/openapi
const cds = require ('@sap/cds')
try {
const cds_swagger = require ('cds-swagger-ui-express')
cds.once ('bootstrap', app => app.use (cds_swagger()) )
} catch (err) {
if (err.code !== 'MODULE_NOT_FOUND') throw err
}

View File

@@ -1,5 +1,5 @@
/* global Vue axios */ //> from vue.html /* global Vue axios */ //> from vue.html
const GET = (url) => axios.get('/-data'+url) const GET = (url) => axios.get('/odata/v4/-data'+url)
const storageGet = (key, def) => localStorage.getItem('data-viewer:'+key) || def const storageGet = (key, def) => localStorage.getItem('data-viewer:'+key) || def
const storageSet = (key, val) => localStorage.setItem('data-viewer:'+key, val) const storageSet = (key, val) => localStorage.setItem('data-viewer:'+key, val)
const columnKeysFirst = (c1, c2) => { const columnKeysFirst = (c1, c2) => {

View File

@@ -0,0 +1,3 @@
cds.once('bootstrap',(app)=>{
app.serve ('/data') .from('@capire/data-viewer','app/viewer')
})

View File

@@ -9,5 +9,12 @@
"app", "app",
"srv", "srv",
"index.cds" "index.cds"
] ],
} "cds": {
"requires": {
"orders-service": {
"model": "@capire/data-viewer"
}
}
}
}

View File

@@ -33,7 +33,7 @@
"resources": "resources.json", "resources": "resources.json",
"dataSources": { "dataSources": {
"main": { "main": {
"uri": "/v2/browse", "uri": "/odata/v2/browse",
"type": "OData", "type": "OData",
"settings": { "settings": {
"annotations": ["localAnnotations"], "annotations": ["localAnnotations"],

9
fiori/cds-plugin.js Normal file
View File

@@ -0,0 +1,9 @@
// install OData v2 adapter
const cds = require("@sap/cds")
const proxy = require('@cap-js-community/odata-v2-adapter')
const opts = global.it ? { target:'auto' } : {} // for tests, set 'auto' to detect port dynamically
cds.once('bootstrap', app => {
app.use(proxy(opts)) // install proxy
// cds.log('cov2ap','silent') // suppress anoying log outpout, e.g. for `npm run mocha -- --reporter nyan`
app.serve ('/fiori-apps') .from ('@capire/fiori','app/fiori-apps.html')
})

View File

@@ -1,5 +0,0 @@
ID_TEXTS;ID;locale;title;descr
a5fe2682-fe60-4dc0-9218-695e501e42e6;201;de;Sturmhöhe;Sturmhöhe (Originaltitel: Wuthering Heights) ist der einzige Roman der englischen Schriftstellerin Emily Brontë (18181848). Der 1847 unter dem Pseudonym Ellis Bell veröffentlichte Roman wurde vom viktorianischen Publikum weitgehend abgelehnt, heute gilt er als ein Klassiker der britischen Romanliteratur des 19. Jahrhunderts.
4edebff3-8cde-4761-8cd3-bae7834fc5f5;201;fr;Les Hauts de Hurlevent;Les Hauts de Hurlevent (titre original : Wuthering Heights), parfois orthographié Les Hauts de Hurle-Vent, est l'unique roman d'Emily Brontë, publié pour la première fois en 1847 sous le pseudonyme dEllis Bell. Loin d'être un récit moralisateur, Emily Brontë achève néanmoins le roman dans une atmosphère sereine, suggérant le triomphe de la paix et du Bien sur la vengeance et le Mal.
b649031b-aacc-4dc3-838f-c36bae5d266e;207;de;Jane Eyre;Jane Eyre. Eine Autobiographie (Originaltitel: Jane Eyre. An Autobiography), erstmals erschienen im Jahr 1847 unter dem Pseudonym Currer Bell, ist der erste veröffentlichte Roman der britischen Autorin Charlotte Brontë und ein Klassiker der viktorianischen Romanliteratur des 19. Jahrhunderts. Der Roman erzählt in Form einer Ich-Erzählung die Lebensgeschichte von Jane Eyre (ausgesprochen /ˌdʒeɪn ˈɛə/), die nach einer schweren Kindheit eine Stelle als Gouvernante annimmt und sich in ihren Arbeitgeber verliebt, jedoch immer wieder um ihre Freiheit und Selbstbestimmung kämpfen muss. Als klein, dünn, blass, stets schlicht dunkel gekleidet und mit strengem Mittelscheitel beschrieben, gilt die Heldin des Romans Jane Eyre nicht zuletzt aufgrund der Kino- und Fernsehversionen der melodramatischen Romanvorlage als die bekannteste englische Gouvernante der Literaturgeschichte
aa62f0e1-763c-4c92-a304-50c2b86e21f4;252;de;Eleonora;“Eleonora” ist eine Erzählung von Edgar Allan Poe. Sie wurde 1841 erstveröffentlicht. In ihr geht es um das Paradox der Treue in der Treulosigkeit.
1 ID_TEXTS ID locale title descr
2 a5fe2682-fe60-4dc0-9218-695e501e42e6 201 de Sturmhöhe Sturmhöhe (Originaltitel: Wuthering Heights) ist der einzige Roman der englischen Schriftstellerin Emily Brontë (1818–1848). Der 1847 unter dem Pseudonym Ellis Bell veröffentlichte Roman wurde vom viktorianischen Publikum weitgehend abgelehnt, heute gilt er als ein Klassiker der britischen Romanliteratur des 19. Jahrhunderts.
3 4edebff3-8cde-4761-8cd3-bae7834fc5f5 201 fr Les Hauts de Hurlevent Les Hauts de Hurlevent (titre original : Wuthering Heights), parfois orthographié Les Hauts de Hurle-Vent, est l'unique roman d'Emily Brontë, publié pour la première fois en 1847 sous le pseudonyme d’Ellis Bell. Loin d'être un récit moralisateur, Emily Brontë achève néanmoins le roman dans une atmosphère sereine, suggérant le triomphe de la paix et du Bien sur la vengeance et le Mal.
4 b649031b-aacc-4dc3-838f-c36bae5d266e 207 de Jane Eyre Jane Eyre. Eine Autobiographie (Originaltitel: Jane Eyre. An Autobiography), erstmals erschienen im Jahr 1847 unter dem Pseudonym Currer Bell, ist der erste veröffentlichte Roman der britischen Autorin Charlotte Brontë und ein Klassiker der viktorianischen Romanliteratur des 19. Jahrhunderts. Der Roman erzählt in Form einer Ich-Erzählung die Lebensgeschichte von Jane Eyre (ausgesprochen /ˌdʒeɪn ˈɛə/), die nach einer schweren Kindheit eine Stelle als Gouvernante annimmt und sich in ihren Arbeitgeber verliebt, jedoch immer wieder um ihre Freiheit und Selbstbestimmung kämpfen muss. Als klein, dünn, blass, stets schlicht dunkel gekleidet und mit strengem Mittelscheitel beschrieben, gilt die Heldin des Romans Jane Eyre nicht zuletzt aufgrund der Kino- und Fernsehversionen der melodramatischen Romanvorlage als die bekannteste englische Gouvernante der Literaturgeschichte
5 aa62f0e1-763c-4c92-a304-50c2b86e21f4 252 de Eleonora “Eleonora” ist eine Erzählung von Edgar Allan Poe. Sie wurde 1841 erstveröffentlicht. In ihr geht es um das Paradox der Treue in der Treulosigkeit.

View File

@@ -1 +1,8 @@
using from './db/sqlite/index';
using from './app/services';
using from './app/genres/fiori-service';
using from './app/browse/fiori-service';
using from './app/admin-books/fiori-service';
using from './app/admin-authors/fiori-service';
using from './db/common'; using from './db/common';
using from './app/common';

View File

@@ -22,6 +22,9 @@
"kind": "odata", "kind": "odata",
"model": "@capire/orders" "model": "@capire/orders"
}, },
"self": {
"model": "@capire/fiori"
},
"messaging": { "messaging": {
"[production]": { "[production]": {
"kind": "enterprise-messaging" "kind": "enterprise-messaging"
@@ -34,8 +37,7 @@
} }
}, },
"db": { "db": {
"kind": "sql", "kind": "sql"
"schema_evolution": "auto"
}, },
"db-ext": { "db-ext": {
"[development]": { "[development]": {

View File

@@ -3,6 +3,6 @@ const cds = require("@sap/cds")
const proxy = require('@cap-js-community/odata-v2-adapter') const proxy = require('@cap-js-community/odata-v2-adapter')
const opts = global.it ? { target:'auto' } : {} // for tests, set 'auto' to detect port dynamically const opts = global.it ? { target:'auto' } : {} // for tests, set 'auto' to detect port dynamically
cds.on('bootstrap', app => app.use(proxy(opts))) // install proxy cds.on('bootstrap', app => app.use(proxy(opts))) // install proxy
cds.log('cov2ap','silent') // suppress anoying log outpout, e.g. for `npm run mocha -- --reporter nyan` // cds.log('cov2ap','silent') // suppress anoying log outpout, e.g. for `npm run mocha -- --reporter nyan`
module.exports = require('@capire/bookstore/server.js') module.exports = require('@capire/bookstore/server.js')

View File

@@ -1,3 +1,3 @@
service say { service say @(path: '/say') {
function hello (to:String) returns String; function hello (to:String) returns String;
} }

View File

@@ -8,7 +8,7 @@
"i18n": "i18n/i18n.properties", "i18n": "i18n/i18n.properties",
"dataSources": { "dataSources": {
"OrdersService": { "OrdersService": {
"uri": "/orders/", "uri": "/odata/v4/orders/",
"type": "OData", "type": "OData",
"settings": { "settings": {
"odataVersion": "4.0" "odataVersion": "4.0"

3
orders/cds-plugin.js Normal file
View File

@@ -0,0 +1,3 @@
cds.once('bootstrap',(app)=>{
app.serve ('/orders') .from('@capire/orders','app/orders')
})

View File

@@ -4,5 +4,12 @@
"dependencies": { "dependencies": {
"@capire/common": "*", "@capire/common": "*",
"@sap/cds": ">=5" "@sap/cds": ">=5"
},
"cds": {
"requires": {
"orders-service": {
"model": "@capire/orders"
}
}
} }
} }

944
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
"repository": "https://github.com/sap-samples/cloud-cap-samples.git", "repository": "https://github.com/sap-samples/cloud-cap-samples.git",
"author": "daniel.hutzel@sap.com", "author": "daniel.hutzel@sap.com",
"dependencies": { "dependencies": {
"@sap/cds": ">=5.5.3" "@sap/cds": ">=7"
}, },
"workspaces": [ "workspaces": [
"./bookshop", "./bookshop",

3
reviews/cds-plugin.js Normal file
View File

@@ -0,0 +1,3 @@
cds.once('bootstrap',(app)=>{
app.serve ('/reviews') .from ('@capire/reviews','app/vue')
})

View File

@@ -1,5 +1,5 @@
ID;subject;rating;reviewer;title;text subject;rating;reviewer;title;text
45167af7-8aba-4164-b296-a89461a5fb71;201;5;bob;Intriguing;Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 201;5;bob;Intriguing;Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
2a4b02ad-5ccc-4354-9388-f8aaebef2636;201;4;bob;Fascinating;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id diam maecenas ultricies mi eget mauris pharetra et. Risus at ultrices mi tempus imperdiet nulla malesuada pellentesque. Pulvinar mattis nunc sed blandit libero. Facilisis magna etiam tempor orci eu. Nec sagittis aliquam malesuada bibendum arcu. Eu consequat ac felis donec. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Tortor posuere ac ut consequat semper viverra nam libero. Amet nisl suscipit adipiscing bibendum est ultricies integer quis auctor. Scelerisque purus semper eget duis at tellus. Elementum tempus egestas sed sed risus pretium. Arcu dictum varius duis at. Amet luctus venenatis lectus magna fringilla urna. Eget velit aliquet sagittis id consectetur purus ut faucibus. Vitae auctor eu augue ut lectus. Fermentum iaculis eu non diam phasellus vestibulum. 201;4;bob;Fascinating;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id diam maecenas ultricies mi eget mauris pharetra et. Risus at ultrices mi tempus imperdiet nulla malesuada pellentesque. Pulvinar mattis nunc sed blandit libero. Facilisis magna etiam tempor orci eu. Nec sagittis aliquam malesuada bibendum arcu. Eu consequat ac felis donec. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Tortor posuere ac ut consequat semper viverra nam libero. Amet nisl suscipit adipiscing bibendum est ultricies integer quis auctor. Scelerisque purus semper eget duis at tellus. Elementum tempus egestas sed sed risus pretium. Arcu dictum varius duis at. Amet luctus venenatis lectus magna fringilla urna. Eget velit aliquet sagittis id consectetur purus ut faucibus. Vitae auctor eu augue ut lectus. Fermentum iaculis eu non diam phasellus vestibulum.
3882af87-b2e9-48c7-945b-140f15b5e2fa;207;2;bob;What is this?;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Libero justo laoreet sit amet cursus sit amet dictum. Nunc faucibus a pellentesque sit. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Enim nunc faucibus a pellentesque. Commodo quis imperdiet massa tincidunt nunc pulvinar sapien. Cras ornare arcu dui vivamus. Facilisi etiam dignissim diam quis enim lobortis. Et molestie ac feugiat sed. Urna neque viverra justo nec ultrices dui. Ullamcorper a lacus vestibulum sed arcu non. Volutpat ac tincidunt vitae semper quis. Dignissim sodales ut eu sem. Feugiat in fermentum posuere urna nec. At augue eget arcu dictum varius. 207;2;bob;What is this?;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Libero justo laoreet sit amet cursus sit amet dictum. Nunc faucibus a pellentesque sit. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Enim nunc faucibus a pellentesque. Commodo quis imperdiet massa tincidunt nunc pulvinar sapien. Cras ornare arcu dui vivamus. Facilisi etiam dignissim diam quis enim lobortis. Et molestie ac feugiat sed. Urna neque viverra justo nec ultrices dui. Ullamcorper a lacus vestibulum sed arcu non. Volutpat ac tincidunt vitae semper quis. Dignissim sodales ut eu sem. Feugiat in fermentum posuere urna nec. At augue eget arcu dictum varius.
eb4e934f-af77-4f72-9717-17abd3fefad8;251;3;bob;It's dark...;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Suscipit tellus mauris a diam. Velit aliquet sagittis id consectetur purus ut. Viverra adipiscing at in tellus integer. Vitae elementum curabitur vitae nunc. Mattis ullamcorper velit sed ullamcorper morbi. Diam quis enim lobortis scelerisque. Auctor neque vitae tempus quam pellentesque nec nam aliquam. Semper auctor neque vitae tempus. Quis eleifend quam adipiscing vitae proin. Neque convallis a cras semper auctor neque vitae. Imperdiet massa tincidunt nunc pulvinar sapien et ligula. Sit amet consectetur adipiscing elit ut aliquam purus. Pretium quam vulputate dignissim suspendisse. 251;3;bob;It's dark...;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Suscipit tellus mauris a diam. Velit aliquet sagittis id consectetur purus ut. Viverra adipiscing at in tellus integer. Vitae elementum curabitur vitae nunc. Mattis ullamcorper velit sed ullamcorper morbi. Diam quis enim lobortis scelerisque. Auctor neque vitae tempus quam pellentesque nec nam aliquam. Semper auctor neque vitae tempus. Quis eleifend quam adipiscing vitae proin. Neque convallis a cras semper auctor neque vitae. Imperdiet massa tincidunt nunc pulvinar sapien et ligula. Sit amet consectetur adipiscing elit ut aliquam purus. Pretium quam vulputate dignissim suspendisse.
1 ID subject rating reviewer title text
2 45167af7-8aba-4164-b296-a89461a5fb71 201 5 bob Intriguing Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
3 2a4b02ad-5ccc-4354-9388-f8aaebef2636 201 4 bob Fascinating Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Id diam maecenas ultricies mi eget mauris pharetra et. Risus at ultrices mi tempus imperdiet nulla malesuada pellentesque. Pulvinar mattis nunc sed blandit libero. Facilisis magna etiam tempor orci eu. Nec sagittis aliquam malesuada bibendum arcu. Eu consequat ac felis donec. Ultricies tristique nulla aliquet enim tortor at auctor urna nunc. Tortor posuere ac ut consequat semper viverra nam libero. Amet nisl suscipit adipiscing bibendum est ultricies integer quis auctor. Scelerisque purus semper eget duis at tellus. Elementum tempus egestas sed sed risus pretium. Arcu dictum varius duis at. Amet luctus venenatis lectus magna fringilla urna. Eget velit aliquet sagittis id consectetur purus ut faucibus. Vitae auctor eu augue ut lectus. Fermentum iaculis eu non diam phasellus vestibulum.
4 3882af87-b2e9-48c7-945b-140f15b5e2fa 207 2 bob What is this? Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Libero justo laoreet sit amet cursus sit amet dictum. Nunc faucibus a pellentesque sit. Dis parturient montes nascetur ridiculus mus mauris vitae ultricies. Enim nunc faucibus a pellentesque. Commodo quis imperdiet massa tincidunt nunc pulvinar sapien. Cras ornare arcu dui vivamus. Facilisi etiam dignissim diam quis enim lobortis. Et molestie ac feugiat sed. Urna neque viverra justo nec ultrices dui. Ullamcorper a lacus vestibulum sed arcu non. Volutpat ac tincidunt vitae semper quis. Dignissim sodales ut eu sem. Feugiat in fermentum posuere urna nec. At augue eget arcu dictum varius.
5 eb4e934f-af77-4f72-9717-17abd3fefad8 251 3 bob It's dark... Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Suscipit tellus mauris a diam. Velit aliquet sagittis id consectetur purus ut. Viverra adipiscing at in tellus integer. Vitae elementum curabitur vitae nunc. Mattis ullamcorper velit sed ullamcorper morbi. Diam quis enim lobortis scelerisque. Auctor neque vitae tempus quam pellentesque nec nam aliquam. Semper auctor neque vitae tempus. Quis eleifend quam adipiscing vitae proin. Neque convallis a cras semper auctor neque vitae. Imperdiet massa tincidunt nunc pulvinar sapien et ligula. Sit amet consectetur adipiscing elit ut aliquam purus. Pretium quam vulputate dignissim suspendisse.

View File

@@ -12,6 +12,10 @@
}, },
"cds": { "cds": {
"requires": { "requires": {
"ReviewsService": {
"kind": "odata",
"model": "@capire/reviews"
},
"messaging": { "messaging": {
"[development]": { "kind": "file-based-messaging" }, "[development]": { "kind": "file-based-messaging" },
"[hybrid]": { "kind": "enterprise-messaging-shared" }, "[hybrid]": { "kind": "enterprise-messaging-shared" },

View File

@@ -1,6 +1,6 @@
using { sap.capire.reviews as my } from '../db/schema'; using { sap.capire.reviews as my } from '../db/schema';
service ReviewsService { service ReviewsService @(path:'/reviews') {
// Sync API // Sync API
entity Reviews as projection on my.Reviews excluding { likes } entity Reviews as projection on my.Reviews excluding { likes }

View File

@@ -8,7 +8,7 @@ describe('cap/samples - Fiori APIs - v2', function() {
// if (this.timeout) this.timeout(1e6) // if (this.timeout) this.timeout(1e6)
it('serves $metadata documents in v2', async () => { it('serves $metadata documents in v2', async () => {
const { headers, data } = await GET `/v2/browse/$metadata` const { headers, data } = await GET `/odata/v2/browse/$metadata`
expect(headers).to.contain({ expect(headers).to.contain({
'content-type': 'application/xml', 'content-type': 'application/xml',
'dataserviceversion': '2.0', 'dataserviceversion': '2.0',
@@ -17,7 +17,7 @@ describe('cap/samples - Fiori APIs - v2', function() {
}) })
it('serves Books in v2', async () => { it('serves Books in v2', async () => {
const { data } = await GET `/v2/browse/Books` const { data } = await GET `/odata/v2/browse/Books`
expect(data).to.containSubset({d:{results:[]}}) expect(data).to.containSubset({d:{results:[]}})
expect(data.d.results.length).to.be.greaterThanOrEqual(5) expect(data.d.results.length).to.be.greaterThanOrEqual(5)
}) })