Using managed compositions for Order.Items (#273)

* Using managed compositions for Order.Items
Co-authored-by: sjvans <30337871+sjvans@users.noreply.github.com>
This commit is contained in:
Daniel Hutzel
2021-11-08 17:41:33 +01:00
committed by GitHub
parent 482b71e60b
commit 8cc2db7118
7 changed files with 16 additions and 22 deletions

View File

@@ -20,9 +20,11 @@ extend Books with {
// //
// Extend Orders with Books as Products // Extend Orders with Books as Products
// //
using { sap.capire.orders.Orders_Items } from '@capire/orders'; using { sap.capire.orders.Orders } from '@capire/orders';
extend Orders_Items with { extend Orders with {
book : Association to Books on product.ID = book.ID extend Items with {
book : Association to Books on product.ID = book.ID
}
} }

View File

@@ -68,7 +68,7 @@ annotate OrdersService.Orders with @(
annotate OrdersService.Orders_Items with @( annotate OrdersService.Orders.Items with @(
UI: { UI: {
LineItem: [ LineItem: [
{Value: product_ID, Label:'Product ID'}, {Value: product_ID, Label:'Product ID'},

View File

@@ -3,27 +3,22 @@ namespace sap.capire.orders;
entity Orders : cuid, managed { entity Orders : cuid, managed {
OrderNo : String @title:'Order Number'; //> readable key OrderNo : String @title:'Order Number'; //> readable key
Items : Composition of many Orders_Items on Items.up_ = $self; Items : Composition of many {
key ID : UUID;
product : Association to Products;
quantity : Integer;
title : String; //> intentionally replicated as snapshot from product.title
price : Double; //> materialized calculated field
};
buyer : User; buyer : User;
currency : Currency; currency : Currency;
} }
entity Orders_Items {
key ID : UUID;
up_ : Association to Orders;
product : Association to Products;
quantity : Integer;
title : String; //> intentionally replicated as snapshot from product.title
price : Double;
}
/** This is a stand-in for arbitrary ordered Products */ /** This is a stand-in for arbitrary ordered Products */
entity Products @(cds.persistence.skip:'always') { entity Products @(cds.persistence.skip:'always') {
key ID : String; key ID : String;
} }
// this is to ensure we have filled-in currencies // this is to ensure we have filled-in currencies
using from '@capire/common'; using from '@capire/common';

View File

@@ -2,6 +2,7 @@
"name": "@capire/orders", "name": "@capire/orders",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"@capire/common": "*",
"@sap/cds": "^5" "@sap/cds": "^5"
} }
} }

View File

@@ -3,7 +3,7 @@ class OrdersService extends cds.ApplicationService {
/** register custom handlers */ /** register custom handlers */
init(){ init(){
const { Orders_Items:OrderItems } = this.entities const { 'Orders.Items':OrderItems } = this.entities
this.before ('UPDATE', 'Orders', async function(req) { this.before ('UPDATE', 'Orders', async function(req) {
const { ID, Items } = req.data const { ID, Items } = req.data

View File

@@ -1,8 +1,6 @@
const cds = require('@sap/cds/lib') const cds = require('@sap/cds/lib')
const {expect} = cds.test const {expect} = cds.test
const { parse:cdr } = cds.ql
// should become cds.compile(...) when cds5 is released // should become cds.compile(...) when cds5 is released
const model = cds.compile.to.csn (` const model = cds.compile.to.csn (`
entity Categories { entity Categories {
@@ -78,9 +76,7 @@ describe('Hierarchical Data', ()=>{
{ ID:101, name:'Cat' }, { ID:101, name:'Cat' },
{ ID:108, name:'Catweazle' } { ID:108, name:'Catweazle' }
] ]
return 'skipped as this will be fixed in a newer cds version' expect ( await SELECT`ID,name`.from(Cats) ).to.eql (expected)
if (cdr) expect ( await SELECT.from(Cats) ).to.containSubset (expected)
else expect ( await SELECT.from(Cats) ).to.eql (expected)
}) })
}) })