@decaf-ts/for-fabric 0.3.25 → 0.3.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/for-fabric.cjs +1 -1
- package/dist/for-fabric.cjs.map +1 -1
- package/dist/for-fabric.js +1 -1
- package/dist/for-fabric.js.map +1 -1
- package/lib/client/FabricClientAdapter.cjs +5 -1
- package/lib/client/FabricClientAdapter.js.map +1 -1
- package/lib/contract/models/History.cjs +75 -0
- package/lib/contract/models/History.d.ts +9 -0
- package/lib/contract/models/History.js.map +1 -0
- package/lib/contract/models/OtherBatchShared.cjs +2 -0
- package/lib/contract/models/OtherBatchShared.js.map +1 -1
- package/lib/contract/models/OtherMarket.cjs +6 -0
- package/lib/contract/models/OtherMarket.d.ts +1 -0
- package/lib/contract/models/OtherMarket.js.map +1 -1
- package/lib/contract/models/OtherProduct.cjs +2 -0
- package/lib/contract/models/OtherProduct.js.map +1 -1
- package/lib/contract/models/OtherProductShared.cjs +2 -0
- package/lib/contract/models/OtherProductShared.js.map +1 -1
- package/lib/contract/models/OtherProductStrength.cjs +6 -0
- package/lib/contract/models/OtherProductStrength.d.ts +1 -0
- package/lib/contract/models/OtherProductStrength.js.map +1 -1
- package/lib/contract/models/decorators-private.cjs +54 -7
- package/lib/contract/models/decorators-private.js.map +1 -1
- package/lib/contract/models/decorators.cjs +63 -5
- package/lib/contract/models/decorators.d.ts +5 -0
- package/lib/contract/models/decorators.js.map +1 -1
- package/lib/contract/models/history-dec.cjs +83 -0
- package/lib/contract/models/history-dec.d.ts +6 -0
- package/lib/contract/models/history-dec.js.map +1 -0
- package/lib/esm/client/FabricClientAdapter.js +5 -1
- package/lib/esm/client/FabricClientAdapter.js.map +1 -1
- package/lib/esm/contract/models/History.d.ts +9 -0
- package/lib/esm/contract/models/History.js +72 -0
- package/lib/esm/contract/models/History.js.map +1 -0
- package/lib/esm/contract/models/OtherBatchShared.js +2 -0
- package/lib/esm/contract/models/OtherBatchShared.js.map +1 -1
- package/lib/esm/contract/models/OtherMarket.d.ts +1 -0
- package/lib/esm/contract/models/OtherMarket.js +7 -1
- package/lib/esm/contract/models/OtherMarket.js.map +1 -1
- package/lib/esm/contract/models/OtherProduct.js +2 -0
- package/lib/esm/contract/models/OtherProduct.js.map +1 -1
- package/lib/esm/contract/models/OtherProductShared.js +2 -0
- package/lib/esm/contract/models/OtherProductShared.js.map +1 -1
- package/lib/esm/contract/models/OtherProductStrength.d.ts +1 -0
- package/lib/esm/contract/models/OtherProductStrength.js +7 -1
- package/lib/esm/contract/models/OtherProductStrength.js.map +1 -1
- package/lib/esm/contract/models/decorators-private.js +55 -8
- package/lib/esm/contract/models/decorators-private.js.map +1 -1
- package/lib/esm/contract/models/decorators.d.ts +5 -0
- package/lib/esm/contract/models/decorators.js +63 -6
- package/lib/esm/contract/models/decorators.js.map +1 -1
- package/lib/esm/contract/models/history-dec.d.ts +6 -0
- package/lib/esm/contract/models/history-dec.js +78 -0
- package/lib/esm/contract/models/history-dec.js.map +1 -0
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/version.cjs +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -10,11 +10,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import { maxlength, minlength, model, required, } from "@decaf-ts/decorator-validation";
|
|
11
11
|
import { TableNames } from "./constants.js";
|
|
12
12
|
import { column, index, OrderDirection, pk, table } from "@decaf-ts/core";
|
|
13
|
-
import { composed } from "@decaf-ts/db-decorators";
|
|
13
|
+
import { composed, version } from "@decaf-ts/db-decorators";
|
|
14
14
|
import { description, uses } from "@decaf-ts/decoration";
|
|
15
15
|
import { BaseIdentifiedModel } from "./BaseIdentifiedModel.js";
|
|
16
16
|
import { gtin } from "./gtin.js";
|
|
17
17
|
import { FabricFlavour, mirror, NamespaceCollection, sharedData, } from "./../../shared/index.js";
|
|
18
|
+
import { historyDec } from "./history-dec.js";
|
|
18
19
|
let OtherMarket = class OtherMarket extends BaseIdentifiedModel {
|
|
19
20
|
constructor(model) {
|
|
20
21
|
super(model);
|
|
@@ -22,6 +23,7 @@ let OtherMarket = class OtherMarket extends BaseIdentifiedModel {
|
|
|
22
23
|
};
|
|
23
24
|
__decorate([
|
|
24
25
|
pk({ type: String, generated: false }),
|
|
26
|
+
historyDec(),
|
|
25
27
|
mirror("mirror-collection", "org-b"),
|
|
26
28
|
composed(["productCode", "marketId"], ":", true),
|
|
27
29
|
description("Unique identifier composed of product code and market ID."),
|
|
@@ -62,6 +64,10 @@ __decorate([
|
|
|
62
64
|
description("Address of the Marketing Authorization Holder or responsible legal entity."),
|
|
63
65
|
__metadata("design:type", String)
|
|
64
66
|
], OtherMarket.prototype, "mahAddress", void 0);
|
|
67
|
+
__decorate([
|
|
68
|
+
version(),
|
|
69
|
+
__metadata("design:type", Number)
|
|
70
|
+
], OtherMarket.prototype, "counter", void 0);
|
|
65
71
|
OtherMarket = __decorate([
|
|
66
72
|
sharedData(NamespaceCollection("decaf-namespace")),
|
|
67
73
|
description("Links a product to a specific market."),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtherMarket.js","sourceRoot":"","sources":["../../../../src/contract/models/OtherMarket.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EACL,SAAS,EACT,SAAS,EACT,KAAK,EACL,QAAQ,GACT,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,uBAAoB;AACzC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"OtherMarket.js","sourceRoot":"","sources":["../../../../src/contract/models/OtherMarket.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EACL,SAAS,EACT,SAAS,EACT,KAAK,EACL,QAAQ,GACT,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,uBAAoB;AACzC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,IAAI,EAAE,kBAAe;AAC9B,OAAO,EACL,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,UAAU,GACX,gCAA2B;AAC5B,OAAO,EAAE,UAAU,EAAE,yBAAsB;AAOpC,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,mBAAmB;IAgDlD,YAAY,KAA6B;QACvC,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF,CAAA;AA7CC;IALC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACtC,UAAU,EAAE;IACZ,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;IAChD,WAAW,CAAC,2DAA2D,CAAC;;uCAC7D;AAQZ;IANC,MAAM,EAAE;IACR,QAAQ,EAAE;IACV,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/C,WAAW,CACV,mEAAmE,CACpE;;6CACiB;AAKlB;IAHC,MAAM,EAAE;IACR,IAAI,EAAE;IACN,QAAQ,EAAE;;gDACU;AAQrB;IANC,MAAM,EAAE;IACR,SAAS,CAAC,CAAC,CAAC;IACZ,SAAS,CAAC,CAAC,CAAC;IACZ,WAAW,CACV,0EAA0E,CAC3E;;iDACqB;AAItB;IAFC,MAAM,EAAE;IACR,WAAW,CAAC,mDAAmD,CAAC;;4CAChD;AAMjB;IAJC,MAAM,EAAE;IACR,WAAW,CACV,sEAAsE,CACvE;;oDACwB;AAMzB;IAJC,MAAM,EAAE;IACR,WAAW,CACV,4EAA4E,CAC7E;;+CACmB;AAGpB;IADC,OAAO,EAAE;;4CACO;AA9CN,WAAW;IALvB,UAAU,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAClD,WAAW,CAAC,uCAAuC,CAAC;IACpD,IAAI,CAAC,aAAa,CAAC;IACnB,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;IACxB,KAAK,EAAE;;GACK,WAAW,CAmDvB"}
|
|
@@ -16,6 +16,7 @@ import { gtin } from "./gtin.js";
|
|
|
16
16
|
import { audit } from "./decorators.js";
|
|
17
17
|
import { FabricFlavour, mirror, ownedBy, privateData, } from "./../../shared/index.js";
|
|
18
18
|
import { version } from "@decaf-ts/db-decorators";
|
|
19
|
+
import { historyDec } from "./history-dec.js";
|
|
19
20
|
let OtherProduct = class OtherProduct extends BaseIdentifiedModel {
|
|
20
21
|
constructor(args) {
|
|
21
22
|
super(args);
|
|
@@ -25,6 +26,7 @@ let OtherProduct = class OtherProduct extends BaseIdentifiedModel {
|
|
|
25
26
|
__decorate([
|
|
26
27
|
pk(),
|
|
27
28
|
gtin(),
|
|
29
|
+
historyDec(),
|
|
28
30
|
mirror("mirror-collection", "org-b"),
|
|
29
31
|
audit(OtherProduct),
|
|
30
32
|
__metadata("design:type", String)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtherProduct.js","sourceRoot":"","sources":["../../../../src/contract/models/OtherProduct.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC1E,oFAAoF;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,IAAI,EAAE,kBAAe;AAE9B,OAAO,EAAE,KAAK,EAAE,wBAAqB;AACrC,OAAO,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,WAAW,GACZ,gCAA2B;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"OtherProduct.js","sourceRoot":"","sources":["../../../../src/contract/models/OtherProduct.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC1E,oFAAoF;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,IAAI,EAAE,kBAAe;AAE9B,OAAO,EAAE,KAAK,EAAE,wBAAqB;AACrC,OAAO,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,WAAW,GACZ,gCAA2B;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,yBAAsB;AAOpC,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,mBAAmB;IAiEnD,YAAY,IAA6B;QACvC,KAAK,CAAC,IAAI,CAAC,CAAC;QA3Cd,kBAAa,GAAY,KAAK,CAAC;IA4C/B,CAAC;CACF,CAAA;AA9DC;IALC,EAAE,EAAE;IACJ,IAAI,EAAE;IACN,UAAU,EAAE;IACZ,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACpC,KAAK,CAAC,YAAY,CAAC;;iDACC;AAKrB;IAHC,MAAM,EAAE;IACR,QAAQ,EAAE;IACV,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;;kDAC1B;AAKtB;IAHC,MAAM,EAAE;IACR,QAAQ,EAAE;IACV,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;;0DAClB;AAG9B;IADC,MAAM,EAAE;;0DACqB;AAI9B;IAFC,MAAM,EAAE;IACR,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;;mDACjB;AAsB/B;IADC,OAAO,EAAE;;6CACO;AAkBjB;IAFC,MAAM,EAAE;IACR,OAAO,EAAE;;6CACO;AA/DN,YAAY;IALxB,WAAW,EAAE;IACb,IAAI,CAAC,aAAa,CAAC;IACpB,2CAA2C;;IAC1C,KAAK,CAAC,eAAe,CAAC;IACtB,KAAK,EAAE;;GACK,YAAY,CAoExB"}
|
|
@@ -19,6 +19,7 @@ import { version } from "@decaf-ts/db-decorators";
|
|
|
19
19
|
import { OtherProductStrength } from "./OtherProductStrength.js";
|
|
20
20
|
import { OtherMarket } from "./OtherMarket.js";
|
|
21
21
|
import { assignProductOwner } from "./decorators.js";
|
|
22
|
+
import { historyDec } from "./history-dec.js";
|
|
22
23
|
let OtherProductShared = class OtherProductShared extends BaseIdentifiedModel {
|
|
23
24
|
constructor(args) {
|
|
24
25
|
super(args);
|
|
@@ -28,6 +29,7 @@ let OtherProductShared = class OtherProductShared extends BaseIdentifiedModel {
|
|
|
28
29
|
__decorate([
|
|
29
30
|
pk(),
|
|
30
31
|
gtin(),
|
|
32
|
+
historyDec(),
|
|
31
33
|
assignProductOwner(),
|
|
32
34
|
mirror("mirror-collection", "org-b"),
|
|
33
35
|
audit(OtherProductShared),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtherProductShared.js","sourceRoot":"","sources":["../../../../src/contract/models/OtherProductShared.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,SAAS,EACT,cAAc,EACd,EAAE,EACF,KAAK,GACN,MAAM,gBAAgB,CAAC;AACxB,oFAAoF;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,IAAI,EAAE,kBAAe;AAC9B,OAAO,EAAE,KAAK,EAAE,gCAA6B;AAC7C,OAAO,EACL,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,UAAU,GACX,gCAA2B;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,kCAA+B;AAC9D,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,kBAAkB,EAAE,wBAAqB;
|
|
1
|
+
{"version":3,"file":"OtherProductShared.js","sourceRoot":"","sources":["../../../../src/contract/models/OtherProductShared.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,SAAS,EACT,cAAc,EACd,EAAE,EACF,KAAK,GACN,MAAM,gBAAgB,CAAC;AACxB,oFAAoF;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,IAAI,EAAE,kBAAe;AAC9B,OAAO,EAAE,KAAK,EAAE,gCAA6B;AAC7C,OAAO,EACL,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,UAAU,GACX,gCAA2B;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,kCAA+B;AAC9D,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,kBAAkB,EAAE,wBAAqB;AAClD,OAAO,EAAE,UAAU,EAAE,yBAAsB;AAOpC,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,mBAAmB;IAkEzD,YAAY,IAAmC;QAC7C,KAAK,CAAC,IAAI,CAAC,CAAC;QA3Cd,kBAAa,GAAY,KAAK,CAAC;IA4C/B,CAAC;CACF,CAAA;AA9DC;IANC,EAAE,EAAE;IACJ,IAAI,EAAE;IACN,UAAU,EAAE;IACZ,kBAAkB,EAAE;IACpB,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACpC,KAAK,CAAC,kBAAkB,CAAC;;uDACL;AAKrB;IAHC,MAAM,EAAE;IACR,QAAQ,EAAE;IACV,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;;wDAC1B;AAKtB;IAHC,MAAM,EAAE;IACR,QAAQ,EAAE;IACV,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;;gEAClB;AAG9B;IADC,MAAM,EAAE;;gEACqB;AAI9B;IAFC,MAAM,EAAE;IACR,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;;yDACjB;AAsB/B;IADC,OAAO,EAAE;;mDACO;AAOjB;IALC,SAAS,CACR,GAAG,EAAE,CAAC,oBAAoB,EAC1B,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,EACpD,IAAI,CACL;;qDACkC;AAOnC;IALC,SAAS,CACR,GAAG,EAAE,CAAC,WAAW,EACjB,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,EACpD,IAAI,CACL;;mDACuB;AAIxB;IAFC,MAAM,EAAE;IACR,OAAO,EAAE;;mDACO;AAhEN,kBAAkB;IAL9B,UAAU,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAClD,IAAI,CAAC,aAAa,CAAC;IACpB,2CAA2C;;IAC1C,KAAK,CAAC,sBAAsB,CAAC;IAC7B,KAAK,EAAE;;GACK,kBAAkB,CAqE9B"}
|
|
@@ -13,8 +13,9 @@ import { TableNames } from "./constants.js";
|
|
|
13
13
|
import { description, uses } from "@decaf-ts/decoration";
|
|
14
14
|
import { BaseIdentifiedModel } from "./BaseIdentifiedModel.js";
|
|
15
15
|
import { FabricFlavour, mirror, NamespaceCollection, sharedData, } from "./../../shared/index.js";
|
|
16
|
-
import { composed, InternalError } from "@decaf-ts/db-decorators";
|
|
16
|
+
import { composed, InternalError, version } from "@decaf-ts/db-decorators";
|
|
17
17
|
import { gtin } from "./gtin.js";
|
|
18
|
+
import { historyDec } from "./history-dec.js";
|
|
18
19
|
function strengthSeed(m) {
|
|
19
20
|
try {
|
|
20
21
|
return `${m.productCode}${m.strength}${m.substance ? m.substance : ""}`;
|
|
@@ -30,6 +31,7 @@ let OtherProductStrength = class OtherProductStrength extends BaseIdentifiedMode
|
|
|
30
31
|
};
|
|
31
32
|
__decorate([
|
|
32
33
|
pk(),
|
|
34
|
+
historyDec(),
|
|
33
35
|
mirror("mirror-collection", "org-b"),
|
|
34
36
|
composed(["productCode", "uuid"], ":"),
|
|
35
37
|
description("Unique identifier of the product strength."),
|
|
@@ -65,6 +67,10 @@ __decorate([
|
|
|
65
67
|
description("Legal entity name responsible for the product."),
|
|
66
68
|
__metadata("design:type", String)
|
|
67
69
|
], OtherProductStrength.prototype, "legalEntityName", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
version(),
|
|
72
|
+
__metadata("design:type", Number)
|
|
73
|
+
], OtherProductStrength.prototype, "counter", void 0);
|
|
68
74
|
OtherProductStrength = __decorate([
|
|
69
75
|
sharedData(NamespaceCollection("decaf-namespace")),
|
|
70
76
|
uses(FabricFlavour),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtherProductStrength.js","sourceRoot":"","sources":["../../../../src/contract/models/OtherProductStrength.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,uBAAoB;AACzC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAE5D,OAAO,EACL,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,UAAU,GACX,gCAA2B;AAC5B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"OtherProductStrength.js","sourceRoot":"","sources":["../../../../src/contract/models/OtherProductStrength.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,uBAAoB;AACzC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAE5D,OAAO,EACL,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,UAAU,GACX,gCAA2B;AAC5B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,kBAAe;AAC9B,OAAO,EAAE,UAAU,EAAE,yBAAsB;AAE3C,SAAS,YAAY,CAAC,CAAuB;IAC3C,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1E,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CAAC,0CAA0C,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAOM,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,mBAAmB;IAyC3D,YAAY,KAAsC;QAChD,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF,CAAA;AAtCC;IALC,EAAE,EAAE;IACJ,UAAU,EAAE;IACZ,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC;IACtC,WAAW,CAAC,4CAA4C,CAAC;;gDAC9C;AAKZ;IAHC,IAAI,CAAC,YAAY,CAAC;IAClB,QAAQ,EAAE;IACV,WAAW,CAAC,wCAAwC,CAAC;;kDACxC;AAUd;IAHC,IAAI,EAAE;IACN,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/C,WAAW,CAAC,mDAAmD,CAAC;;yDAC5C;AAMrB;IAJC,MAAM,EAAE;IACR,QAAQ,EAAE;IACV,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/C,WAAW,CAAC,qDAAqD,CAAC;;sDACjD;AAKlB;IAHC,MAAM,EAAE;IACR,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/C,WAAW,CAAC,oDAAoD,CAAC;;uDAC/C;AAInB;IAFC,MAAM,EAAE;IACR,WAAW,CAAC,gDAAgD,CAAC;;6DACrC;AAGzB;IADC,OAAO,EAAE;;qDACO;AAvCN,oBAAoB;IALhC,UAAU,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAClD,IAAI,CAAC,aAAa,CAAC;IACnB,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;IACjC,KAAK,EAAE;IACP,WAAW,CAAC,4DAA4D,CAAC;;GAC7D,oBAAoB,CA4ChC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
2
|
import { metadata, apply } from "@decaf-ts/decoration";
|
|
3
|
-
import { afterCreate, afterDelete,
|
|
3
|
+
import { afterCreate, afterDelete, onUpdate, InternalError, OperationKeys, } from "@decaf-ts/db-decorators";
|
|
4
4
|
import { OtherAudit } from "./OtherAudit.js";
|
|
5
5
|
import { Repository } from "@decaf-ts/core";
|
|
6
|
+
import { populateRelations } from "./decorators.js";
|
|
6
7
|
export async function rebuildForMatchingCollection(model, context, collections) {
|
|
7
8
|
const mapToCollections = collections && (collections.privateCols || collections.sharedCols);
|
|
8
9
|
let cols = undefined;
|
|
@@ -17,7 +18,15 @@ export async function rebuildForMatchingCollection(model, context, collections)
|
|
|
17
18
|
];
|
|
18
19
|
const pk = Model.pk(model);
|
|
19
20
|
cols.forEach((col) => {
|
|
20
|
-
|
|
21
|
+
let segData;
|
|
22
|
+
try {
|
|
23
|
+
segData = context.get("segregatedData");
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return; // segregatedData not present in this context (e.g. cascade child)
|
|
27
|
+
}
|
|
28
|
+
if (!segData || !segData[col] || !(model[pk] in segData[col]))
|
|
29
|
+
return;
|
|
21
30
|
Object.assign(model, segData[col][model[pk]]);
|
|
22
31
|
});
|
|
23
32
|
}
|
|
@@ -25,10 +34,9 @@ export async function rebuildForMatchingCollection(model, context, collections)
|
|
|
25
34
|
}
|
|
26
35
|
export async function createAuditHandler(context, data, key, model) {
|
|
27
36
|
const repo = Repository.forModel(OtherAudit);
|
|
28
|
-
const collections = Model.collectionsFor(OtherAudit);
|
|
29
|
-
model = await rebuildForMatchingCollection(model, context, collections);
|
|
30
37
|
if (!context.identity || !context.identity.getID)
|
|
31
38
|
throw new InternalError(`Lost context apparently for audit`);
|
|
39
|
+
model = await populateRelations(model, context, this._overrides);
|
|
32
40
|
const toCreate = new OtherAudit({
|
|
33
41
|
userGroup: context.identity.getID(),
|
|
34
42
|
userId: context.identity.getID(),
|
|
@@ -40,19 +48,57 @@ export async function createAuditHandler(context, data, key, model) {
|
|
|
40
48
|
const audit = await repo.override(this._overrides).create(toCreate, context);
|
|
41
49
|
context.logger.info(`Audit log for ${OperationKeys.CREATE} of ${Model.tableName(this.class)} created: ${audit.id}: ${JSON.stringify(audit, undefined, 2)}`);
|
|
42
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns a shallow-cloned copy of the model where each relation array item
|
|
53
|
+
* is normalised to its string ID. This ensures that `{ id: "x" }` and `"x"`
|
|
54
|
+
* compare as equal so that unchanged relations produce no diff.
|
|
55
|
+
*/
|
|
56
|
+
function normalizeRelationsForAudit(model) {
|
|
57
|
+
const copy = Object.assign(Object.create(Object.getPrototypeOf(model)), model);
|
|
58
|
+
const relProps = Model.relations(model);
|
|
59
|
+
if (!relProps || !relProps.length)
|
|
60
|
+
return copy;
|
|
61
|
+
for (const propKey of relProps) {
|
|
62
|
+
const value = copy[propKey];
|
|
63
|
+
if (Array.isArray(value)) {
|
|
64
|
+
copy[propKey] = value.map((item) => {
|
|
65
|
+
if (item == null)
|
|
66
|
+
return item;
|
|
67
|
+
if (typeof item === "string" || typeof item === "number")
|
|
68
|
+
return String(item);
|
|
69
|
+
if (item.id != null)
|
|
70
|
+
return String(item.id);
|
|
71
|
+
return item; // new object without id — keep as-is
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if (value != null) {
|
|
75
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
76
|
+
copy[propKey] = String(value);
|
|
77
|
+
}
|
|
78
|
+
else if (value.id != null) {
|
|
79
|
+
copy[propKey] = String(value.id);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return copy;
|
|
84
|
+
}
|
|
43
85
|
export async function updateAuditHandler(context, data, key, model, oldModel) {
|
|
44
86
|
const repo = Repository.forModel(OtherAudit);
|
|
45
|
-
const collections = Model.collectionsFor(OtherAudit);
|
|
46
|
-
model = await rebuildForMatchingCollection(model, context, collections);
|
|
47
87
|
if (!context.identity || !context.identity.getID)
|
|
48
88
|
throw new InternalError(`Lost context apparently for audit`);
|
|
89
|
+
// At onUpdate time `model` still has all private fields (not yet stripped by
|
|
90
|
+
// adapter.revert). Normalise relation arrays to ID strings on both sides so
|
|
91
|
+
// that { id: "x" } and "x" compare as equal and unchanged relations produce
|
|
92
|
+
// no spurious diff.
|
|
93
|
+
const normalizedModel = normalizeRelationsForAudit(model);
|
|
94
|
+
const normalizedOldModel = normalizeRelationsForAudit(oldModel);
|
|
49
95
|
const toCreate = new OtherAudit({
|
|
50
96
|
userGroup: context.identity.getID(),
|
|
51
97
|
userId: context.identity.getID(),
|
|
52
98
|
model: Model.tableName(data.class),
|
|
53
99
|
transaction: context.stub.getTxID(),
|
|
54
100
|
action: OperationKeys.UPDATE,
|
|
55
|
-
diffs:
|
|
101
|
+
diffs: normalizedModel.compare(normalizedOldModel),
|
|
56
102
|
});
|
|
57
103
|
const audit = await repo.override(this._overrides).create(toCreate, context);
|
|
58
104
|
context.logger.info(`Audit log for ${OperationKeys.UPDATE} of ${Model.tableName(this.class)} created: ${JSON.stringify(audit, undefined, 2)}`);
|
|
@@ -60,6 +106,7 @@ export async function updateAuditHandler(context, data, key, model, oldModel) {
|
|
|
60
106
|
export async function deleteAuditHandler(context, data, key, model) {
|
|
61
107
|
if (!context.identity || !context.identity.getID)
|
|
62
108
|
throw new InternalError(`Lost context apprently. no getId in identity`);
|
|
109
|
+
model = await populateRelations(model, context, this._overrides);
|
|
63
110
|
const toCreate = new OtherAudit({
|
|
64
111
|
userGroup: context.identity.getID(),
|
|
65
112
|
userId: context.identity.getID(),
|
|
@@ -76,6 +123,6 @@ export function audit(model) {
|
|
|
76
123
|
const meta = {
|
|
77
124
|
class: model,
|
|
78
125
|
};
|
|
79
|
-
return apply(afterCreate(createAuditHandler, meta),
|
|
126
|
+
return apply(afterCreate(createAuditHandler, meta), onUpdate(updateAuditHandler, meta), afterDelete(deleteAuditHandler, meta), metadata("audit", true));
|
|
80
127
|
}
|
|
81
128
|
//# sourceMappingURL=decorators-private.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators-private.js","sourceRoot":"","sources":["../../../../src/contract/models/decorators-private.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AACpE,OAAO,EACL,WAAW,EACX,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"decorators-private.js","sourceRoot":"","sources":["../../../../src/contract/models/decorators-private.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,11 @@ export declare function rebuildForMatchingCollection<M extends Model>(model: M,
|
|
|
7
7
|
privateCols: (string | CollectionResolver)[];
|
|
8
8
|
sharedCols: (string | CollectionResolver)[];
|
|
9
9
|
}): Promise<M>;
|
|
10
|
+
/**
|
|
11
|
+
* Returns a shallow-cloned copy of the model with relation properties resolved
|
|
12
|
+
* to their full instances. The original model is NOT mutated.
|
|
13
|
+
*/
|
|
14
|
+
export declare function populateRelations<M extends Model>(model: M, context: FabricContractContext, overrides?: Record<string, any>): Promise<M>;
|
|
10
15
|
export declare function createAuditHandler<M extends Model, R extends Repository<M, any>>(this: R, context: FabricContractContext, data: AuditMetadata, key: keyof M, model: M): Promise<void>;
|
|
11
16
|
export declare function updateAuditHandler<M extends Model, R extends Repository<M, any>>(this: R, context: FabricContractContext, data: AuditMetadata, key: keyof M, model: M, oldModel: M): Promise<void>;
|
|
12
17
|
export declare function deleteAuditHandler<M extends Model, R extends Repository<M, any>>(this: R, context: FabricContractContext, data: AuditMetadata, key: keyof M, model: M): Promise<void>;
|
|
@@ -2,7 +2,7 @@ import { Model } from "@decaf-ts/decorator-validation";
|
|
|
2
2
|
import { metadata, apply } from "@decaf-ts/decoration";
|
|
3
3
|
import { afterCreate, afterDelete, afterUpdate, InternalError, onCreate, OperationKeys, } from "@decaf-ts/db-decorators";
|
|
4
4
|
import { Audit } from "./Audit.js";
|
|
5
|
-
import { Repository, UnsupportedError } from "@decaf-ts/core";
|
|
5
|
+
import { Repository, UnsupportedError, } from "@decaf-ts/core";
|
|
6
6
|
import { GtinOwner } from "./GtinOwner.js";
|
|
7
7
|
export async function rebuildForMatchingCollection(model, context, collections) {
|
|
8
8
|
const mapToCollections = collections && (collections.privateCols || collections.sharedCols);
|
|
@@ -18,19 +18,73 @@ export async function rebuildForMatchingCollection(model, context, collections)
|
|
|
18
18
|
];
|
|
19
19
|
const pk = Model.pk(model);
|
|
20
20
|
cols.forEach((col) => {
|
|
21
|
-
|
|
21
|
+
let segData;
|
|
22
|
+
try {
|
|
23
|
+
segData = context.get("segregatedData");
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return; // segregatedData not present in this context (e.g. cascade child)
|
|
27
|
+
}
|
|
28
|
+
if (!segData || !segData[col] || !(model[pk] in segData[col]))
|
|
29
|
+
return;
|
|
22
30
|
Object.assign(model, segData[col][model[pk]]);
|
|
23
31
|
});
|
|
24
32
|
}
|
|
25
33
|
return model;
|
|
26
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Returns a shallow-cloned copy of the model with relation properties resolved
|
|
37
|
+
* to their full instances. The original model is NOT mutated.
|
|
38
|
+
*/
|
|
39
|
+
export async function populateRelations(model, context, overrides) {
|
|
40
|
+
// Create a shallow copy preserving the prototype so compare() etc. still work
|
|
41
|
+
const copy = Object.assign(Object.create(Object.getPrototypeOf(model)), model);
|
|
42
|
+
const relProps = Model.relations(model);
|
|
43
|
+
if (!relProps || !relProps.length)
|
|
44
|
+
return copy;
|
|
45
|
+
for (const propKey of relProps) {
|
|
46
|
+
const meta = Model.relations(model, propKey);
|
|
47
|
+
const clazzOrFn = meta.class;
|
|
48
|
+
const clazz = typeof clazzOrFn === "function" && clazzOrFn.name
|
|
49
|
+
? clazzOrFn
|
|
50
|
+
: clazzOrFn();
|
|
51
|
+
const value = copy[propKey];
|
|
52
|
+
if (value === null || value === undefined)
|
|
53
|
+
continue;
|
|
54
|
+
const repo = Repository.forModel(clazz).override(overrides || {});
|
|
55
|
+
if (Array.isArray(value)) {
|
|
56
|
+
const resolved = [];
|
|
57
|
+
for (const item of value) {
|
|
58
|
+
if (typeof item === "string" || typeof item === "number") {
|
|
59
|
+
try {
|
|
60
|
+
resolved.push(await repo.read(String(item), context));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
resolved.push(item);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
resolved.push(item);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
copy[propKey] = resolved;
|
|
71
|
+
}
|
|
72
|
+
else if (typeof value === "string" || typeof value === "number") {
|
|
73
|
+
try {
|
|
74
|
+
copy[propKey] = await repo.read(String(value), context);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// keep original value if read fails
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return copy;
|
|
82
|
+
}
|
|
27
83
|
export async function createAuditHandler(context, data, key, model) {
|
|
28
84
|
const repo = Repository.forModel(Audit);
|
|
29
|
-
const collections = Model.collectionsFor(Audit);
|
|
30
|
-
//
|
|
31
|
-
// model = await rebuildForMatchingCollection(model, context, collections);
|
|
32
85
|
if (!context.identity || !context.identity.getID)
|
|
33
86
|
throw new InternalError(`Lost context apparently for audit`);
|
|
87
|
+
model = await populateRelations(model, context, this._overrides);
|
|
34
88
|
const toCreate = new Audit({
|
|
35
89
|
userGroup: context.identity.getID(),
|
|
36
90
|
userId: context.identity.getID(),
|
|
@@ -49,13 +103,15 @@ export async function updateAuditHandler(context, data, key, model, oldModel) {
|
|
|
49
103
|
// model = await rebuildForMatchingCollection(model, context, collections);
|
|
50
104
|
if (!context.identity || !context.identity.getID)
|
|
51
105
|
throw new InternalError(`Lost context apparently for audit`);
|
|
106
|
+
const populatedModel = await populateRelations(model, context, this._overrides);
|
|
107
|
+
const populatedOldModel = await populateRelations(oldModel, context, this._overrides);
|
|
52
108
|
const toCreate = new Audit({
|
|
53
109
|
userGroup: context.identity.getID(),
|
|
54
110
|
userId: context.identity.getID(),
|
|
55
111
|
model: Model.tableName(data.class),
|
|
56
112
|
transaction: context.stub.getTxID(),
|
|
57
113
|
action: OperationKeys.UPDATE,
|
|
58
|
-
diffs:
|
|
114
|
+
diffs: populatedModel.compare(populatedOldModel),
|
|
59
115
|
});
|
|
60
116
|
const audit = await repo.override(this._overrides).create(toCreate, context);
|
|
61
117
|
context.logger.info(`Audit log for ${OperationKeys.UPDATE} of ${Model.tableName(this.class)} created: ${JSON.stringify(audit, undefined, 2)}`);
|
|
@@ -63,6 +119,7 @@ export async function updateAuditHandler(context, data, key, model, oldModel) {
|
|
|
63
119
|
export async function deleteAuditHandler(context, data, key, model) {
|
|
64
120
|
if (!context.identity || !context.identity.getID)
|
|
65
121
|
throw new InternalError(`Lost context apprently. no getId in identity`);
|
|
122
|
+
model = await populateRelations(model, context, this._overrides);
|
|
66
123
|
const toCreate = new Audit({
|
|
67
124
|
userGroup: context.identity.getID(),
|
|
68
125
|
userId: context.identity.getID(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../../src/contract/models/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAe,MAAM,sBAAsB,CAAC;AACpE,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,mBAAgB;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../../src/contract/models/decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { Repository } from "@decaf-ts/core";
|
|
3
|
+
import { type FabricContractContext } from "../../contracts/index";
|
|
4
|
+
export declare function updateHistoryHandler<M extends Model, R extends Repository<M, any>>(this: R, context: FabricContractContext, data: any, key: keyof M, model: M, oldModel: M): Promise<void>;
|
|
5
|
+
export declare function deleteHistoryHandler<M extends Model, R extends Repository<M, any>>(this: R, context: FabricContractContext, data: any, key: keyof M, model: M): Promise<void>;
|
|
6
|
+
export declare function historyDec(): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor | number) => void;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { Repository } from "@decaf-ts/core";
|
|
3
|
+
import { apply, Metadata, metadata } from "@decaf-ts/decoration";
|
|
4
|
+
import { afterDelete, DBKeys, InternalError, onUpdate, } from "@decaf-ts/db-decorators";
|
|
5
|
+
import { populateRelations } from "./decorators.js";
|
|
6
|
+
import { History } from "./History.js";
|
|
7
|
+
/**
|
|
8
|
+
* Correctly extracts the version number from a model by inspecting
|
|
9
|
+
* the property decorated with `@version()`.
|
|
10
|
+
*
|
|
11
|
+
* `Model.versionProp()` has a bug where it returns `Object.keys(meta)[0]`
|
|
12
|
+
* (the first metadata key overall) instead of the actual version property name.
|
|
13
|
+
* This helper uses `Metadata.get()` correctly to find the `DBKeys.VERSION`
|
|
14
|
+
* entry and then reads the first property name from it.
|
|
15
|
+
*
|
|
16
|
+
* @returns the version number (>= 1), or undefined if none found.
|
|
17
|
+
*/
|
|
18
|
+
function getVersionOf(model) {
|
|
19
|
+
const meta = Metadata.get(model.constructor);
|
|
20
|
+
if (!meta)
|
|
21
|
+
return undefined;
|
|
22
|
+
const versionMeta = meta[DBKeys.VERSION];
|
|
23
|
+
if (!versionMeta || typeof versionMeta !== "object")
|
|
24
|
+
return undefined;
|
|
25
|
+
const versionProp = Object.keys(versionMeta)[0];
|
|
26
|
+
if (!versionProp)
|
|
27
|
+
return undefined;
|
|
28
|
+
const value = model[versionProp];
|
|
29
|
+
return typeof value === "number" && value >= 1 ? value : undefined;
|
|
30
|
+
}
|
|
31
|
+
export async function updateHistoryHandler(context, data, key, model, oldModel) {
|
|
32
|
+
if (!context.identity || !context.identity.getID)
|
|
33
|
+
throw new InternalError(`Lost context apparently for history`);
|
|
34
|
+
const table = Model.tableName(oldModel);
|
|
35
|
+
const pk = Model.pk(oldModel, true);
|
|
36
|
+
const version = getVersionOf(oldModel);
|
|
37
|
+
if (version === undefined)
|
|
38
|
+
return; // model has no @version field — skip history
|
|
39
|
+
// Populate relations on a non-mutating copy of oldModel, then convert to a
|
|
40
|
+
// plain object so no model-anchor (__model) keys appear in the stored JSON.
|
|
41
|
+
const populated = await populateRelations(oldModel, context, this._overrides);
|
|
42
|
+
const record = JSON.parse(JSON.stringify(populated));
|
|
43
|
+
const repo = Repository.forModel(History).override(this._overrides);
|
|
44
|
+
const toCreate = new History({
|
|
45
|
+
table,
|
|
46
|
+
key: pk,
|
|
47
|
+
version,
|
|
48
|
+
record,
|
|
49
|
+
});
|
|
50
|
+
await repo.create(toCreate, context);
|
|
51
|
+
context.logger.info(`History for ${table}'s ${pk.toString()} version ${version} stored`);
|
|
52
|
+
}
|
|
53
|
+
export async function deleteHistoryHandler(context, data, key, model) {
|
|
54
|
+
if (!context.identity || !context.identity.getID)
|
|
55
|
+
throw new InternalError(`Lost context apparently for history`);
|
|
56
|
+
const table = Model.tableName(model);
|
|
57
|
+
const pk = Model.pk(model, true);
|
|
58
|
+
const version = getVersionOf(model);
|
|
59
|
+
if (version === undefined)
|
|
60
|
+
return; // model has no @version field — skip history
|
|
61
|
+
// Populate relations on a non-mutating copy of model, then convert to a
|
|
62
|
+
// plain object so no model-anchor (__model) keys appear in the stored JSON.
|
|
63
|
+
const populated = await populateRelations(model, context, this._overrides);
|
|
64
|
+
const record = JSON.parse(JSON.stringify(populated));
|
|
65
|
+
const repo = Repository.forModel(History).override(this._overrides);
|
|
66
|
+
const toCreate = new History({
|
|
67
|
+
table,
|
|
68
|
+
key: pk,
|
|
69
|
+
version,
|
|
70
|
+
record,
|
|
71
|
+
});
|
|
72
|
+
await repo.create(toCreate, context);
|
|
73
|
+
context.logger.info(`History for ${table}'s ${pk.toString()} version ${version} stored`);
|
|
74
|
+
}
|
|
75
|
+
export function historyDec() {
|
|
76
|
+
return apply(onUpdate(updateHistoryHandler, {}, { priority: 99 }), afterDelete(deleteHistoryHandler, {}, { priority: 99 }), metadata("history", true));
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=history-dec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-dec.js","sourceRoot":"","sources":["../../../../src/contract/models/history-dec.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.3.
|
|
1
|
+
export declare const VERSION = "0.3.26";
|
|
2
2
|
export declare const PACKAGE_NAME = "@decaf-ts/for-fabric";
|
package/lib/esm/version.js
CHANGED
package/lib/version.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PACKAGE_NAME = exports.VERSION = void 0;
|
|
4
4
|
const decoration_1 = require("@decaf-ts/decoration");
|
|
5
|
-
exports.VERSION = "0.3.
|
|
5
|
+
exports.VERSION = "0.3.26";
|
|
6
6
|
exports.PACKAGE_NAME = "@decaf-ts/for-fabric";
|
|
7
7
|
decoration_1.Metadata.registerLibrary(exports.PACKAGE_NAME, exports.VERSION);
|
|
8
8
|
//# sourceMappingURL=version.js.map
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.3.
|
|
1
|
+
export declare const VERSION = "0.3.26";
|
|
2
2
|
export declare const PACKAGE_NAME = "@decaf-ts/for-fabric";
|