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:
@@ -20,9 +20,11 @@ extend Books with {
|
||||
//
|
||||
// Extend Orders with Books as Products
|
||||
//
|
||||
using { sap.capire.orders.Orders_Items } from '@capire/orders';
|
||||
extend Orders_Items with {
|
||||
book : Association to Books on product.ID = book.ID
|
||||
using { sap.capire.orders.Orders } from '@capire/orders';
|
||||
extend Orders with {
|
||||
extend Items with {
|
||||
book : Association to Books on product.ID = book.ID
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ annotate OrdersService.Orders with @(
|
||||
|
||||
|
||||
|
||||
annotate OrdersService.Orders_Items with @(
|
||||
annotate OrdersService.Orders.Items with @(
|
||||
UI: {
|
||||
LineItem: [
|
||||
{Value: product_ID, Label:'Product ID'},
|
||||
|
||||
@@ -3,27 +3,22 @@ namespace sap.capire.orders;
|
||||
|
||||
entity Orders : cuid, managed {
|
||||
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;
|
||||
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 */
|
||||
entity Products @(cds.persistence.skip:'always') {
|
||||
key ID : String;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// this is to ensure we have filled-in currencies
|
||||
using from '@capire/common';
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"name": "@capire/orders",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"@capire/common": "*",
|
||||
"@sap/cds": "^5"
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ class OrdersService extends cds.ApplicationService {
|
||||
|
||||
/** register custom handlers */
|
||||
init(){
|
||||
const { Orders_Items:OrderItems } = this.entities
|
||||
const { 'Orders.Items':OrderItems } = this.entities
|
||||
|
||||
this.before ('UPDATE', 'Orders', async function(req) {
|
||||
const { ID, Items } = req.data
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
const cds = require('@sap/cds/lib')
|
||||
const {expect} = cds.test
|
||||
|
||||
const { parse:cdr } = cds.ql
|
||||
|
||||
// should become cds.compile(...) when cds5 is released
|
||||
const model = cds.compile.to.csn (`
|
||||
entity Categories {
|
||||
@@ -78,9 +76,7 @@ describe('Hierarchical Data', ()=>{
|
||||
{ ID:101, name:'Cat' },
|
||||
{ ID:108, name:'Catweazle' }
|
||||
]
|
||||
return 'skipped as this will be fixed in a newer cds version'
|
||||
if (cdr) expect ( await SELECT.from(Cats) ).to.containSubset (expected)
|
||||
else expect ( await SELECT.from(Cats) ).to.eql (expected)
|
||||
expect ( await SELECT`ID,name`.from(Cats) ).to.eql (expected)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user