initial load

This commit is contained in:
Koch
2022-09-07 15:26:33 +02:00
parent ee4dcf116c
commit 1b220508c1
6 changed files with 1310 additions and 16 deletions

1226
bookshop/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@
"index.js"
],
"dependencies": {
"@sap/cds": ">=5.9",
"@sap/cds": "^6.1.1",
"express": "^4.17.1",
"passport": ">=0.4.1"
},
@@ -22,7 +22,10 @@
"cds": {
"requires": {
"db": {
"kind": "sql"
"kind": "sqlite",
"credentials": {
"database": "sqlite.db"
}
}
}
}

BIN
bookshop/sqlite.db Normal file

Binary file not shown.

View File

@@ -0,0 +1,58 @@
using { Currency, User, managed, cuid } from '@sap/cds/common';
using {Orders, OrderItems} from '../schema';
namespace sap.capire.orders;
entity OrdersHeaders : managed {
key ID : UUID;
OrderNo : String @title:'Order Number'; //> readable key
buyer : User;
currency : Currency;
Items : Composition of many OrdersItems on Items.Header = $self;
}
entity OrdersItems {
key ID : UUID;
product : Association to Products;
quantity : Integer;
title : String; //> intentionally replicated as snapshot from product.title
price : Double; //> materialized calculated field
Header : Association to OrdersHeaders;
};
// static
view OrdersItemsViewJoin as select
OrdersHeaders.ID as Header_ID,
OrdersHeaders.OrderNo as OrderNo,
OrdersHeaders.buyer as buyer,
OrdersHeaders.currency as currency,
OrdersItems.ID as Item_ID,
OrdersItems.product as product,
OrdersItems.quantity as quantity,
OrdersItems.title as title,
OrdersItems.price as price
from OrdersHeaders JOIN OrdersItems on OrdersHeaders.ID = OrdersItems.Header;
// dynamic entity
entity OrderItemsViewAssoc as projection on Orders;
// sort on right table
view SortedOrdersJoin as select
OrderNo,
buyer,
currency,
Item_ID,
product,
quantity,
title,
price
from OrdersItemsViewJoin
order by title;
// sort on items and join back to header via assoc
view SortedOrdersAssoc as select
from OrdersItems {*, Header.OrderNo, Header.buyer, Header.currency }
order by OrdersItems.title;

View File

@@ -0,0 +1,5 @@
using { sap.capire.orders as my } from '../db/schema';
service OrdersService {
entity Orders as projection on my.Orders;
}

30
package-lock.json generated
View File

@@ -5235,9 +5235,9 @@
}
},
"node_modules/moment": {
"version": "2.29.3",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
"integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==",
"version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
"engines": {
"node": "*"
}
@@ -5644,12 +5644,13 @@
}
},
"node_modules/passport": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.5.2.tgz",
"integrity": "sha512-w9n/Ot5I7orGD4y+7V3EFJCQEznE5RxHamUxcqLT2QoJY0f2JdN8GyHonYFvN0Vz+L6lUJfVhrk2aZz2LbuREw==",
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz",
"integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==",
"dependencies": {
"passport-strategy": "1.x.x",
"pause": "0.0.1"
"pause": "0.0.1",
"utils-merge": "^1.0.1"
},
"engines": {
"node": ">= 0.4.0"
@@ -11283,9 +11284,9 @@
"dev": true
},
"moment": {
"version": "2.29.3",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
"integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw=="
"version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
},
"ms": {
"version": "2.1.2",
@@ -11593,12 +11594,13 @@
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
"passport": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.5.2.tgz",
"integrity": "sha512-w9n/Ot5I7orGD4y+7V3EFJCQEznE5RxHamUxcqLT2QoJY0f2JdN8GyHonYFvN0Vz+L6lUJfVhrk2aZz2LbuREw==",
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz",
"integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==",
"requires": {
"passport-strategy": "1.x.x",
"pause": "0.0.1"
"pause": "0.0.1",
"utils-merge": "^1.0.1"
}
},
"passport-strategy": {