@powerhousedao/service-offering 1.0.0-dev.3 → 1.0.0-dev.5
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/document-models/facet/v1/actions.d.ts +3 -1
- package/dist/document-models/facet/v1/actions.d.ts.map +1 -1
- package/dist/document-models/facet/v1/gen/controller.d.ts +4 -0
- package/dist/document-models/facet/v1/gen/controller.d.ts.map +1 -0
- package/dist/document-models/facet/v1/gen/controller.js +3 -0
- package/dist/document-models/facet/v1/gen/document-model.d.ts.map +1 -1
- package/dist/document-models/facet/v1/gen/document-model.js +31 -7
- package/dist/document-models/facet/v1/gen/document-schema.d.ts +6 -6
- package/dist/document-models/facet/v1/gen/index.d.ts +1 -0
- package/dist/document-models/facet/v1/gen/index.d.ts.map +1 -1
- package/dist/document-models/facet/v1/gen/index.js +1 -0
- package/dist/document-models/facet/v1/gen/option-management/error.d.ts +27 -1
- package/dist/document-models/facet/v1/gen/option-management/error.d.ts.map +1 -1
- package/dist/document-models/facet/v1/gen/option-management/error.js +23 -1
- package/dist/document-models/facet/v1/gen/ph-factories.js +2 -2
- package/dist/document-models/facet/v1/gen/schema/types.d.ts +2 -2
- package/dist/document-models/facet/v1/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/facet/v1/gen/schema/zod.js +2 -2
- package/dist/document-models/facet/v1/gen/utils.js +2 -2
- package/dist/document-models/facet/v1/module.d.ts +1 -1
- package/dist/document-models/facet/v1/module.d.ts.map +1 -1
- package/dist/document-models/facet/v1/module.js +4 -1
- package/dist/document-models/resource-instance/v1/actions.d.ts +4 -1
- package/dist/document-models/resource-instance/v1/actions.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/configuration-management/error.d.ts +34 -1
- package/dist/document-models/resource-instance/v1/gen/configuration-management/error.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/configuration-management/error.js +32 -1
- package/dist/document-models/resource-instance/v1/gen/controller.d.ts +4 -0
- package/dist/document-models/resource-instance/v1/gen/controller.d.ts.map +1 -0
- package/dist/document-models/resource-instance/v1/gen/controller.js +3 -0
- package/dist/document-models/resource-instance/v1/gen/document-model.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/document-model.js +222 -70
- package/dist/document-models/resource-instance/v1/gen/document-schema.d.ts +0 -6
- package/dist/document-models/resource-instance/v1/gen/document-schema.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/index.d.ts +1 -0
- package/dist/document-models/resource-instance/v1/gen/index.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/index.js +1 -0
- package/dist/document-models/resource-instance/v1/gen/instance-management/actions.d.ts +6 -2
- package/dist/document-models/resource-instance/v1/gen/instance-management/actions.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/instance-management/creators.d.ts +3 -2
- package/dist/document-models/resource-instance/v1/gen/instance-management/creators.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/instance-management/creators.js +2 -1
- package/dist/document-models/resource-instance/v1/gen/instance-management/error.d.ts +98 -1
- package/dist/document-models/resource-instance/v1/gen/instance-management/error.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/instance-management/error.js +112 -1
- package/dist/document-models/resource-instance/v1/gen/instance-management/operations.d.ts +2 -1
- package/dist/document-models/resource-instance/v1/gen/instance-management/operations.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/ph-factories.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/ph-factories.js +0 -2
- package/dist/document-models/resource-instance/v1/gen/reducer.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/reducer.js +6 -1
- package/dist/document-models/resource-instance/v1/gen/schema/types.d.ts +3 -3
- package/dist/document-models/resource-instance/v1/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/schema/zod.d.ts +2 -1
- package/dist/document-models/resource-instance/v1/gen/schema/zod.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/schema/zod.js +5 -3
- package/dist/document-models/resource-instance/v1/gen/utils.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/gen/utils.js +0 -2
- package/dist/document-models/resource-instance/v1/module.d.ts +1 -1
- package/dist/document-models/resource-instance/v1/module.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/module.js +4 -1
- package/dist/document-models/resource-instance/v1/src/reducers/configuration-management.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/src/reducers/configuration-management.js +57 -53
- package/dist/document-models/resource-instance/v1/src/reducers/instance-management.d.ts.map +1 -1
- package/dist/document-models/resource-instance/v1/src/reducers/instance-management.js +57 -21
- package/dist/document-models/resource-instance/v1/tests/instance-management.test.js +11 -1
- package/dist/document-models/resource-template/v1/actions.d.ts +3 -1
- package/dist/document-models/resource-template/v1/actions.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/gen/audience-management/error.d.ts +20 -1
- package/dist/document-models/resource-template/v1/gen/audience-management/error.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/gen/audience-management/error.js +16 -1
- package/dist/document-models/resource-template/v1/gen/controller.d.ts +4 -0
- package/dist/document-models/resource-template/v1/gen/controller.d.ts.map +1 -0
- package/dist/document-models/resource-template/v1/gen/controller.js +3 -0
- package/dist/document-models/resource-template/v1/gen/document-model.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/gen/document-model.js +207 -89
- package/dist/document-models/resource-template/v1/gen/document-schema.d.ts +12 -12
- package/dist/document-models/resource-template/v1/gen/facet-targeting/error.d.ts +27 -1
- package/dist/document-models/resource-template/v1/gen/facet-targeting/error.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/gen/facet-targeting/error.js +23 -1
- package/dist/document-models/resource-template/v1/gen/index.d.ts +1 -0
- package/dist/document-models/resource-template/v1/gen/index.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/gen/index.js +1 -0
- package/dist/document-models/resource-template/v1/gen/option-group-management/error.d.ts +27 -1
- package/dist/document-models/resource-template/v1/gen/option-group-management/error.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/gen/option-group-management/error.js +23 -1
- package/dist/document-models/resource-template/v1/gen/ph-factories.js +3 -3
- package/dist/document-models/resource-template/v1/gen/schema/types.d.ts +4 -4
- package/dist/document-models/resource-template/v1/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/gen/schema/zod.js +4 -4
- package/dist/document-models/resource-template/v1/gen/service-management/error.d.ts +51 -1
- package/dist/document-models/resource-template/v1/gen/service-management/error.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/gen/service-management/error.js +49 -1
- package/dist/document-models/resource-template/v1/gen/utils.js +3 -3
- package/dist/document-models/resource-template/v1/module.d.ts +1 -1
- package/dist/document-models/resource-template/v1/module.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/module.js +4 -1
- package/dist/document-models/resource-template/v1/src/reducers/option-group-management.d.ts.map +1 -1
- package/dist/document-models/resource-template/v1/src/reducers/option-group-management.js +2 -21
- package/dist/document-models/service-offering/v1/actions.d.ts +3 -1
- package/dist/document-models/service-offering/v1/actions.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/controller.d.ts +4 -0
- package/dist/document-models/service-offering/v1/gen/controller.d.ts.map +1 -0
- package/dist/document-models/service-offering/v1/gen/controller.js +3 -0
- package/dist/document-models/service-offering/v1/gen/document-model.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/document-model.js +421 -199
- package/dist/document-models/service-offering/v1/gen/document-schema.d.ts +9 -9
- package/dist/document-models/service-offering/v1/gen/index.d.ts +1 -0
- package/dist/document-models/service-offering/v1/gen/index.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/index.js +1 -0
- package/dist/document-models/service-offering/v1/gen/offering/error.d.ts +41 -1
- package/dist/document-models/service-offering/v1/gen/offering/error.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/offering/error.js +37 -1
- package/dist/document-models/service-offering/v1/gen/option-groups/error.d.ts +55 -1
- package/dist/document-models/service-offering/v1/gen/option-groups/error.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/option-groups/error.js +53 -1
- package/dist/document-models/service-offering/v1/gen/ph-factories.js +3 -3
- package/dist/document-models/service-offering/v1/gen/schema/types.d.ts +134 -61
- package/dist/document-models/service-offering/v1/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/schema/zod.d.ts +35 -10
- package/dist/document-models/service-offering/v1/gen/schema/zod.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/schema/zod.js +182 -64
- package/dist/document-models/service-offering/v1/gen/services/error.d.ts +20 -1
- package/dist/document-models/service-offering/v1/gen/services/error.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/services/error.js +16 -1
- package/dist/document-models/service-offering/v1/gen/tiers/error.d.ts +100 -1
- package/dist/document-models/service-offering/v1/gen/tiers/error.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/gen/tiers/error.js +106 -1
- package/dist/document-models/service-offering/v1/gen/utils.js +4 -4
- package/dist/document-models/service-offering/v1/module.d.ts +1 -1
- package/dist/document-models/service-offering/v1/module.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/module.js +4 -1
- package/dist/document-models/service-offering/v1/src/reducers/offering.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/src/reducers/offering.js +20 -12
- package/dist/document-models/service-offering/v1/src/reducers/option-groups.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/src/reducers/option-groups.js +157 -39
- package/dist/document-models/service-offering/v1/src/reducers/services.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/src/reducers/services.js +17 -14
- package/dist/document-models/service-offering/v1/src/reducers/tiers.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/src/reducers/tiers.js +111 -78
- package/dist/document-models/service-offering/v1/src/utils.d.ts +60 -1
- package/dist/document-models/service-offering/v1/src/utils.d.ts.map +1 -1
- package/dist/document-models/service-offering/v1/src/utils.js +173 -1
- package/dist/document-models/service-offering/v1/tests/option-groups.test.js +1 -1
- package/dist/document-models/service-offering/v1/utils.d.ts +3 -0
- package/dist/document-models/service-offering/v1/utils.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/actions.d.ts +3 -1
- package/dist/document-models/subscription-instance/v1/actions.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/controller.d.ts +4 -0
- package/dist/document-models/subscription-instance/v1/gen/controller.d.ts.map +1 -0
- package/dist/document-models/subscription-instance/v1/gen/controller.js +3 -0
- package/dist/document-models/subscription-instance/v1/gen/document-model.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/document-model.js +488 -246
- package/dist/document-models/subscription-instance/v1/gen/document-schema.d.ts +3 -3
- package/dist/document-models/subscription-instance/v1/gen/index.d.ts +1 -0
- package/dist/document-models/subscription-instance/v1/gen/index.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/index.js +1 -0
- package/dist/document-models/subscription-instance/v1/gen/metrics/error.d.ts +73 -1
- package/dist/document-models/subscription-instance/v1/gen/metrics/error.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/metrics/error.js +86 -1
- package/dist/document-models/subscription-instance/v1/gen/ph-factories.js +1 -1
- package/dist/document-models/subscription-instance/v1/gen/schema/types.d.ts +199 -82
- package/dist/document-models/subscription-instance/v1/gen/schema/types.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/schema/zod.d.ts +22 -12
- package/dist/document-models/subscription-instance/v1/gen/schema/zod.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/schema/zod.js +230 -84
- package/dist/document-models/subscription-instance/v1/gen/service/error.d.ts +62 -1
- package/dist/document-models/subscription-instance/v1/gen/service/error.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/service/error.js +60 -1
- package/dist/document-models/subscription-instance/v1/gen/service-group/error.d.ts +39 -1
- package/dist/document-models/subscription-instance/v1/gen/service-group/error.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/service-group/error.js +39 -1
- package/dist/document-models/subscription-instance/v1/gen/subscription/error.d.ts +55 -1
- package/dist/document-models/subscription-instance/v1/gen/subscription/error.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/gen/subscription/error.js +51 -1
- package/dist/document-models/subscription-instance/v1/gen/utils.js +2 -2
- package/dist/document-models/subscription-instance/v1/module.d.ts +1 -1
- package/dist/document-models/subscription-instance/v1/module.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/module.js +4 -1
- package/dist/document-models/subscription-instance/v1/src/reducers/customer.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/src/reducers/customer.js +1 -0
- package/dist/document-models/subscription-instance/v1/src/reducers/metrics.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/src/reducers/metrics.js +70 -45
- package/dist/document-models/subscription-instance/v1/src/reducers/service-group.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/src/reducers/service-group.js +108 -30
- package/dist/document-models/subscription-instance/v1/src/reducers/service.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/src/reducers/service.js +108 -39
- package/dist/document-models/subscription-instance/v1/src/reducers/subscription.d.ts.map +1 -1
- package/dist/document-models/subscription-instance/v1/src/reducers/subscription.js +193 -35
- package/dist/editors/resource-instance-editor/editor.d.ts.map +1 -1
- package/dist/editors/resource-instance-editor/editor.js +13 -3
- package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.d.ts.map +1 -1
- package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.js +4 -2
- package/dist/editors/service-offering-editor/components/ServiceCatalog.d.ts.map +1 -1
- package/dist/editors/service-offering-editor/components/ServiceCatalog.js +189 -32
- package/dist/editors/service-offering-editor/components/TheMatrix.d.ts +1 -1
- package/dist/editors/service-offering-editor/components/TheMatrix.d.ts.map +1 -1
- package/dist/editors/service-offering-editor/components/TheMatrix.js +295 -140
- package/dist/editors/service-offering-editor/components/TierDefinition.d.ts.map +1 -1
- package/dist/editors/service-offering-editor/components/TierDefinition.js +2 -0
- package/dist/editors/service-offering-editor/components/TierPricingOptionsPanel.js +3 -3
- package/dist/editors/service-offering-editor/components/pricing-utils.d.ts.map +1 -1
- package/dist/editors/service-offering-editor/components/pricing-utils.js +26 -7
- package/dist/editors/subscription-instance-editor/components/BillingPanel.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/BillingPanel.js +4 -4
- package/dist/editors/subscription-instance-editor/components/CustomerInfo.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/CustomerInfo.js +3 -2
- package/dist/editors/subscription-instance-editor/components/ImportServiceConfigButton.d.ts +3 -0
- package/dist/editors/subscription-instance-editor/components/ImportServiceConfigButton.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/ImportServiceConfigButton.js +12 -0
- package/dist/editors/subscription-instance-editor/components/MetricActions.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/MetricActions.js +4 -2
- package/dist/editors/subscription-instance-editor/components/MockDataButton.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/MockDataButton.js +214 -2
- package/dist/editors/subscription-instance-editor/components/OperatorNotes.js +1 -1
- package/dist/editors/subscription-instance-editor/components/ServicesPanel.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/ServicesPanel.js +9 -20
- package/dist/editors/subscription-instance-editor/components/SubscriptionActions.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/SubscriptionActions.js +8 -9
- package/dist/editors/subscription-instance-editor/components/SubscriptionHeader.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/SubscriptionHeader.js +1 -1
- package/dist/editors/subscription-instance-editor/components/billing-utils.d.ts +14 -6
- package/dist/editors/subscription-instance-editor/components/billing-utils.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/billing-utils.js +19 -23
- package/dist/editors/subscription-instance-editor/components/mapOfferingToSubscription.d.ts +16 -2
- package/dist/editors/subscription-instance-editor/components/mapOfferingToSubscription.d.ts.map +1 -1
- package/dist/editors/subscription-instance-editor/components/mapOfferingToSubscription.js +155 -6
- package/dist/powerhouse.manifest.json +29 -3
- package/dist/style.css +14 -0
- package/dist/subgraphs/resources-services/resolvers.d.ts +2 -2
- package/dist/subgraphs/resources-services/resolvers.d.ts.map +1 -1
- package/dist/subgraphs/resources-services/resolvers.js +262 -196
- package/package.json +22 -18
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {} from "@powerhousedao/
|
|
2
|
-
import { createAction
|
|
3
|
-
import { addFile } from "document-drive";
|
|
4
|
-
import { ResourceInstanceV1, SubscriptionInstanceV1, } from "@powerhousedao/service-offering/document-models";
|
|
1
|
+
import { getUserSelectionPriceBreakdown, } from "@powerhousedao/service-offering/document-models/service-offering";
|
|
2
|
+
import { createAction } from "document-model/core";
|
|
3
|
+
import { addFile, driveCreateDocument } from "document-drive";
|
|
4
|
+
import { ResourceInstanceV1 as ResourceInstance, SubscriptionInstanceV1 as SubscriptionInstance, } from "@powerhousedao/service-offering/document-models";
|
|
5
|
+
import { mapOfferingToSubscription } from "../../editors/subscription-instance-editor/components/mapOfferingToSubscription.js";
|
|
5
6
|
export const getResolvers = (subgraph) => {
|
|
6
|
-
const
|
|
7
|
+
const reactorClient = subgraph.reactorClient;
|
|
7
8
|
return {
|
|
8
9
|
Query: {
|
|
9
10
|
resourceTemplates: async (_, args) => {
|
|
@@ -11,17 +12,15 @@ export const getResolvers = (subgraph) => {
|
|
|
11
12
|
// If filtering by specific id, try to fetch directly
|
|
12
13
|
if (id) {
|
|
13
14
|
try {
|
|
14
|
-
const doc = await
|
|
15
|
+
const doc = await reactorClient.get(id);
|
|
15
16
|
if (doc &&
|
|
16
17
|
doc.header.documentType === "powerhouse/resource-template") {
|
|
17
18
|
const state = doc.state.global;
|
|
18
|
-
// Check status filter if provided
|
|
19
19
|
if (status &&
|
|
20
20
|
status.length > 0 &&
|
|
21
21
|
!status.includes(state.status)) {
|
|
22
22
|
return [];
|
|
23
23
|
}
|
|
24
|
-
// Check operatorId filter if provided
|
|
25
24
|
if (operatorId && state.operatorId !== operatorId) {
|
|
26
25
|
return [];
|
|
27
26
|
}
|
|
@@ -33,42 +32,26 @@ export const getResolvers = (subgraph) => {
|
|
|
33
32
|
}
|
|
34
33
|
return [];
|
|
35
34
|
}
|
|
36
|
-
//
|
|
37
|
-
const
|
|
35
|
+
// Find all resource template documents
|
|
36
|
+
const { results: docs } = await reactorClient.find({
|
|
37
|
+
type: "powerhouse/resource-template",
|
|
38
|
+
});
|
|
38
39
|
const resourceTemplates = [];
|
|
39
|
-
for (const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
}));
|
|
50
|
-
for (const doc of docs) {
|
|
51
|
-
if (doc &&
|
|
52
|
-
doc.header.documentType === "powerhouse/resource-template") {
|
|
53
|
-
const resourceDoc = doc;
|
|
54
|
-
const state = resourceDoc.state.global;
|
|
55
|
-
// Apply status filter if provided
|
|
56
|
-
if (status &&
|
|
57
|
-
status.length > 0 &&
|
|
58
|
-
!status.includes(state.status)) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
// Apply operatorId filter if provided
|
|
62
|
-
if (operatorId && state.operatorId !== operatorId) {
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
resourceTemplates.push(mapResourceTemplateState(state, doc));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
40
|
+
for (const doc of docs) {
|
|
41
|
+
const resourceDoc = doc;
|
|
42
|
+
const state = resourceDoc.state.global;
|
|
43
|
+
// Skip documents missing required fields
|
|
44
|
+
if (!state.operatorId)
|
|
45
|
+
continue;
|
|
46
|
+
// Apply status filter if provided
|
|
47
|
+
if (status && status.length > 0 && !status.includes(state.status)) {
|
|
48
|
+
continue;
|
|
68
49
|
}
|
|
69
|
-
|
|
70
|
-
|
|
50
|
+
// Apply operatorId filter if provided
|
|
51
|
+
if (operatorId && state.operatorId !== operatorId) {
|
|
52
|
+
continue;
|
|
71
53
|
}
|
|
54
|
+
resourceTemplates.push(mapResourceTemplateState(state, doc));
|
|
72
55
|
}
|
|
73
56
|
return resourceTemplates;
|
|
74
57
|
},
|
|
@@ -77,21 +60,18 @@ export const getResolvers = (subgraph) => {
|
|
|
77
60
|
// If filtering by specific id, try to fetch directly
|
|
78
61
|
if (id) {
|
|
79
62
|
try {
|
|
80
|
-
const doc = await
|
|
63
|
+
const doc = await reactorClient.get(id);
|
|
81
64
|
if (doc &&
|
|
82
65
|
doc.header.documentType === "powerhouse/service-offering") {
|
|
83
66
|
const state = doc.state.global;
|
|
84
|
-
// Check status filter if provided
|
|
85
67
|
if (status &&
|
|
86
68
|
status.length > 0 &&
|
|
87
69
|
!status.includes(state.status)) {
|
|
88
70
|
return [];
|
|
89
71
|
}
|
|
90
|
-
// Check operatorId filter if provided
|
|
91
72
|
if (operatorId && state.operatorId !== operatorId) {
|
|
92
73
|
return [];
|
|
93
74
|
}
|
|
94
|
-
// Check resourceTemplateId filter if provided
|
|
95
75
|
if (resourceTemplateId &&
|
|
96
76
|
state.resourceTemplateId !== resourceTemplateId) {
|
|
97
77
|
return [];
|
|
@@ -104,47 +84,31 @@ export const getResolvers = (subgraph) => {
|
|
|
104
84
|
}
|
|
105
85
|
return [];
|
|
106
86
|
}
|
|
107
|
-
//
|
|
108
|
-
const
|
|
87
|
+
// Find all service offering documents
|
|
88
|
+
const { results: docs } = await reactorClient.find({
|
|
89
|
+
type: "powerhouse/service-offering",
|
|
90
|
+
});
|
|
109
91
|
const serviceOfferings = [];
|
|
110
|
-
for (const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
}));
|
|
121
|
-
for (const doc of docs) {
|
|
122
|
-
if (doc &&
|
|
123
|
-
doc.header.documentType === "powerhouse/service-offering") {
|
|
124
|
-
const offeringDoc = doc;
|
|
125
|
-
const state = offeringDoc.state.global;
|
|
126
|
-
// Apply status filter if provided
|
|
127
|
-
if (status &&
|
|
128
|
-
status.length > 0 &&
|
|
129
|
-
!status.includes(state.status)) {
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
// Apply operatorId filter if provided
|
|
133
|
-
if (operatorId && state.operatorId !== operatorId) {
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
// Apply resourceTemplateId filter if provided
|
|
137
|
-
if (resourceTemplateId &&
|
|
138
|
-
state.resourceTemplateId !== resourceTemplateId) {
|
|
139
|
-
continue;
|
|
140
|
-
}
|
|
141
|
-
serviceOfferings.push(mapServiceOfferingState(state, doc));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
92
|
+
for (const doc of docs) {
|
|
93
|
+
const offeringDoc = doc;
|
|
94
|
+
const state = offeringDoc.state.global;
|
|
95
|
+
// Skip documents missing required fields
|
|
96
|
+
if (!state.operatorId)
|
|
97
|
+
continue;
|
|
98
|
+
// Apply status filter if provided
|
|
99
|
+
if (status && status.length > 0 && !status.includes(state.status)) {
|
|
100
|
+
continue;
|
|
144
101
|
}
|
|
145
|
-
|
|
146
|
-
|
|
102
|
+
// Apply operatorId filter if provided
|
|
103
|
+
if (operatorId && state.operatorId !== operatorId) {
|
|
104
|
+
continue;
|
|
147
105
|
}
|
|
106
|
+
// Apply resourceTemplateId filter if provided
|
|
107
|
+
if (resourceTemplateId &&
|
|
108
|
+
state.resourceTemplateId !== resourceTemplateId) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
serviceOfferings.push(mapServiceOfferingState(state, doc));
|
|
148
112
|
}
|
|
149
113
|
return serviceOfferings;
|
|
150
114
|
},
|
|
@@ -230,7 +194,7 @@ export const getResolvers = (subgraph) => {
|
|
|
230
194
|
};
|
|
231
195
|
}
|
|
232
196
|
// Fetch the service offering
|
|
233
|
-
const serviceOfferingDoc = await
|
|
197
|
+
const serviceOfferingDoc = await reactorClient.get(serviceOfferingId);
|
|
234
198
|
if (!serviceOfferingDoc) {
|
|
235
199
|
return {
|
|
236
200
|
success: false,
|
|
@@ -247,13 +211,38 @@ export const getResolvers = (subgraph) => {
|
|
|
247
211
|
errors: ["Service offering has no associated resource template"],
|
|
248
212
|
};
|
|
249
213
|
}
|
|
250
|
-
//
|
|
251
|
-
const
|
|
252
|
-
|
|
214
|
+
// Convert GraphQL overrides to Record<string, BillingCycle>
|
|
215
|
+
const groupBillingCycleOverrides = {};
|
|
216
|
+
for (const o of userSelection.groupBillingCycleOverrides ?? []) {
|
|
217
|
+
groupBillingCycleOverrides[o.groupId] =
|
|
218
|
+
o.billingCycle;
|
|
219
|
+
}
|
|
220
|
+
const addonBillingCycleOverrides = {};
|
|
221
|
+
for (const o of userSelection.addonBillingCycleOverrides ?? []) {
|
|
222
|
+
addonBillingCycleOverrides[o.groupId] =
|
|
223
|
+
o.billingCycle;
|
|
224
|
+
}
|
|
225
|
+
// Compute price breakdown from user selection
|
|
226
|
+
const selection = {
|
|
227
|
+
tierId: userSelection.tierId,
|
|
228
|
+
billingCycle: userSelection.billingCycle,
|
|
229
|
+
optionGroupIds: userSelection.optionGroupIds ?? [],
|
|
230
|
+
groupBillingCycleOverrides,
|
|
231
|
+
addonBillingCycleOverrides,
|
|
232
|
+
};
|
|
233
|
+
let priceBreakdown;
|
|
234
|
+
try {
|
|
235
|
+
priceBreakdown = getUserSelectionPriceBreakdown(serviceOfferingDoc.state, selection);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
253
238
|
return {
|
|
254
239
|
success: false,
|
|
255
240
|
data: null,
|
|
256
|
-
errors: [
|
|
241
|
+
errors: [
|
|
242
|
+
error instanceof Error
|
|
243
|
+
? error.message
|
|
244
|
+
: "Failed to compute price breakdown from user selection",
|
|
245
|
+
],
|
|
257
246
|
};
|
|
258
247
|
}
|
|
259
248
|
// Sanitize names for use as drive id/slug: lowercase, trim, collapse whitespace, replace spaces with hyphens
|
|
@@ -262,37 +251,37 @@ export const getResolvers = (subgraph) => {
|
|
|
262
251
|
.toLowerCase()
|
|
263
252
|
.replace(/\s+/g, "-")
|
|
264
253
|
.replace(/_/g, "-");
|
|
265
|
-
const parsedName = name
|
|
266
|
-
.trim()
|
|
267
|
-
.toLowerCase()
|
|
268
|
-
.replace(/\s+/g, "-")
|
|
269
|
-
.replace(/_/g, "-");
|
|
270
254
|
try {
|
|
271
255
|
// create team-builder-admin drive
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
256
|
+
const driveDoc = driveCreateDocument();
|
|
257
|
+
driveDoc.state.global.name = teamName;
|
|
258
|
+
driveDoc.state.global.icon =
|
|
259
|
+
"https://cdn-icons-png.flaticon.com/512/6020/6020347.png";
|
|
260
|
+
driveDoc.header.slug = parsedTeamName;
|
|
261
|
+
if (!driveDoc.header.meta)
|
|
262
|
+
driveDoc.header.meta = {};
|
|
263
|
+
driveDoc.header.meta.preferredEditor = "builder-team-admin";
|
|
264
|
+
const teamBuilderAdminDrive = await reactorClient.create(driveDoc);
|
|
281
265
|
// create builder-profile doc inside the team-builder-admin drive
|
|
282
|
-
const builderProfileDoc = await
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
266
|
+
const builderProfileDoc = await reactorClient.createEmpty("powerhouse/builder-profile");
|
|
267
|
+
const teamRootFolder = teamBuilderAdminDrive.state.global.nodes.find((node) => node.kind === "folder")?.parentFolder;
|
|
268
|
+
await reactorClient.execute(teamBuilderAdminDrive.header.id, "main", [
|
|
269
|
+
addFile({
|
|
270
|
+
documentType: "powerhouse/builder-profile",
|
|
271
|
+
id: builderProfileDoc.header.id,
|
|
272
|
+
name: `${parsedTeamName} Builder Profile`,
|
|
273
|
+
parentFolder: teamRootFolder,
|
|
274
|
+
}),
|
|
275
|
+
]);
|
|
276
|
+
await reactorClient.execute(builderProfileDoc.header.id, "main", [
|
|
277
|
+
createAction("UPDATE_PROFILE", { name: parsedTeamName }, undefined, undefined, "global"),
|
|
278
|
+
]);
|
|
290
279
|
// create resource-instance and subscription-instance docs
|
|
291
|
-
const resourceInstanceDoc = await
|
|
292
|
-
const subscriptionInstanceDoc = await
|
|
280
|
+
const resourceInstanceDoc = await reactorClient.createEmpty("powerhouse/resource-instance");
|
|
281
|
+
const subscriptionInstanceDoc = await reactorClient.createEmpty("powerhouse/subscription-instance");
|
|
293
282
|
// resolve parent folders for both drives
|
|
294
|
-
const teamParentFolder = teamBuilderAdminDrive.state.global.nodes
|
|
295
|
-
const operatorDrive = await getOperatorDrive(
|
|
283
|
+
const teamParentFolder = teamBuilderAdminDrive.state.global.nodes.find((node) => node.kind === "folder")?.parentFolder;
|
|
284
|
+
const operatorDrive = await getOperatorDrive(reactorClient, resourceTemplateId);
|
|
296
285
|
if (!operatorDrive) {
|
|
297
286
|
throw new Error(`Operator drive not found for resource template ${resourceTemplateId}`);
|
|
298
287
|
}
|
|
@@ -305,7 +294,7 @@ export const getResolvers = (subgraph) => {
|
|
|
305
294
|
}
|
|
306
295
|
const operatorParentFolder = operatorDrive.state.global.nodes.find((node) => node.kind === "folder")?.parentFolder;
|
|
307
296
|
// batch add resource-instance and subscription-instance to team-builder-admin drive
|
|
308
|
-
await
|
|
297
|
+
await reactorClient.execute(teamBuilderAdminDrive.header.id, "main", [
|
|
309
298
|
addFile({
|
|
310
299
|
documentType: "powerhouse/resource-instance",
|
|
311
300
|
id: resourceInstanceDoc.header.id,
|
|
@@ -320,7 +309,7 @@ export const getResolvers = (subgraph) => {
|
|
|
320
309
|
}),
|
|
321
310
|
]);
|
|
322
311
|
// batch add resource-instance and subscription-instance to operator drive
|
|
323
|
-
await
|
|
312
|
+
await reactorClient.execute(operatorDrive.header.id, "main", [
|
|
324
313
|
addFile({
|
|
325
314
|
documentType: "powerhouse/resource-instance",
|
|
326
315
|
id: resourceInstanceDoc.header.id,
|
|
@@ -335,30 +324,37 @@ export const getResolvers = (subgraph) => {
|
|
|
335
324
|
}),
|
|
336
325
|
]);
|
|
337
326
|
// populate documents after all files are added to both drives
|
|
338
|
-
await populateResourceInstance(
|
|
327
|
+
await populateResourceInstance(reactorClient, resourceInstanceDoc.header.id, resourceTemplateId, operatorProfileId, // operator profile id
|
|
339
328
|
builderProfileDoc.header.id, // customer id
|
|
340
329
|
parsedTeamName);
|
|
341
330
|
const now = new Date().toISOString();
|
|
342
|
-
|
|
343
|
-
|
|
331
|
+
const subscriptionInput = mapOfferingToSubscription({
|
|
332
|
+
offering: serviceOfferingState,
|
|
333
|
+
tierId: selection.tierId,
|
|
334
|
+
selectedBillingCycle: selection.billingCycle,
|
|
344
335
|
customerId: builderProfileDoc.header.id,
|
|
345
336
|
customerName: name,
|
|
346
337
|
customerEmail,
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
338
|
+
createdAt: now,
|
|
339
|
+
priceBreakdown,
|
|
340
|
+
});
|
|
341
|
+
await reactorClient.execute(subscriptionInstanceDoc.header.id, "main", [
|
|
342
|
+
SubscriptionInstance.actions.initializeSubscription({
|
|
343
|
+
...subscriptionInput,
|
|
344
|
+
resourceId: resourceInstanceDoc.header.id,
|
|
345
|
+
resourceLabel: parsedTeamName,
|
|
346
|
+
resourceThumbnailUrl: serviceOfferingState.thumbnailUrl,
|
|
347
|
+
}),
|
|
348
|
+
]);
|
|
349
|
+
// Set billing projection from tier price
|
|
350
|
+
const projectedAmount = subscriptionInput.tierPrice ?? priceBreakdown.tierCycleTotal;
|
|
357
351
|
if (projectedAmount != null) {
|
|
358
|
-
await
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
352
|
+
await reactorClient.execute(subscriptionInstanceDoc.header.id, "main", [
|
|
353
|
+
SubscriptionInstance.actions.updateBillingProjection({
|
|
354
|
+
projectedBillAmount: projectedAmount,
|
|
355
|
+
projectedBillCurrency: priceBreakdown.tierCurrency || "USD",
|
|
356
|
+
}),
|
|
357
|
+
]);
|
|
362
358
|
}
|
|
363
359
|
return {
|
|
364
360
|
success: true,
|
|
@@ -389,7 +385,7 @@ export const getResolvers = (subgraph) => {
|
|
|
389
385
|
* Uses the drive slug in the switchboard URL path.
|
|
390
386
|
*/
|
|
391
387
|
function getDriveLink(driveSlug) {
|
|
392
|
-
const baseUri = process.env.BASE_URI || "";
|
|
388
|
+
const baseUri = typeof process !== "undefined" ? process.env.BASE_URI || "" : "";
|
|
393
389
|
if (baseUri.includes("-dev.")) {
|
|
394
390
|
return `https://connect-dev.powerhouse.xyz/?driveUrl=https://switchboard-dev.powerhouse.xyz/d/${driveSlug}`;
|
|
395
391
|
}
|
|
@@ -415,18 +411,18 @@ function mapResourceTemplateState(state, doc) {
|
|
|
415
411
|
infoLink: state.infoLink || null,
|
|
416
412
|
status: state.status,
|
|
417
413
|
lastModified: state.lastModified,
|
|
418
|
-
targetAudiences: state.targetAudiences.map((audience) => ({
|
|
414
|
+
targetAudiences: (state.targetAudiences || []).map((audience) => ({
|
|
419
415
|
id: audience.id,
|
|
420
416
|
label: audience.label,
|
|
421
417
|
color: audience.color || null,
|
|
422
418
|
})),
|
|
423
|
-
setupServices: state.setupServices,
|
|
424
|
-
recurringServices: state.recurringServices,
|
|
425
|
-
facetTargets: state.facetTargets.map((facet) => ({
|
|
419
|
+
setupServices: state.setupServices || [],
|
|
420
|
+
recurringServices: state.recurringServices || [],
|
|
421
|
+
facetTargets: (state.facetTargets || []).map((facet) => ({
|
|
426
422
|
id: facet.id,
|
|
427
423
|
categoryKey: facet.categoryKey,
|
|
428
424
|
categoryLabel: facet.categoryLabel,
|
|
429
|
-
selectedOptions: facet.selectedOptions,
|
|
425
|
+
selectedOptions: facet.selectedOptions || [],
|
|
430
426
|
})),
|
|
431
427
|
services: (state.services || []).map((service) => ({
|
|
432
428
|
id: service.id,
|
|
@@ -436,6 +432,12 @@ function mapResourceTemplateState(state, doc) {
|
|
|
436
432
|
parentServiceId: service.parentServiceId || null,
|
|
437
433
|
isSetupFormation: service.isSetupFormation,
|
|
438
434
|
optionGroupId: service.optionGroupId || null,
|
|
435
|
+
facetBindings: (service.facetBindings || []).map((binding) => ({
|
|
436
|
+
id: binding.id,
|
|
437
|
+
facetName: binding.facetName,
|
|
438
|
+
facetType: binding.facetType,
|
|
439
|
+
supportedOptions: binding.supportedOptions || [],
|
|
440
|
+
})),
|
|
439
441
|
})),
|
|
440
442
|
optionGroups: (state.optionGroups || []).map((group) => ({
|
|
441
443
|
id: group.id,
|
|
@@ -450,7 +452,7 @@ function mapResourceTemplateState(state, doc) {
|
|
|
450
452
|
answer: faq.answer || null,
|
|
451
453
|
displayOrder: faq.displayOrder,
|
|
452
454
|
})),
|
|
453
|
-
contentSections: state.contentSections.map((section) => ({
|
|
455
|
+
contentSections: (state.contentSections || []).map((section) => ({
|
|
454
456
|
id: section.id,
|
|
455
457
|
title: section.title,
|
|
456
458
|
content: section.content,
|
|
@@ -462,35 +464,50 @@ function mapResourceTemplateState(state, doc) {
|
|
|
462
464
|
* Populate a resource-instance document with data from a resource-template.
|
|
463
465
|
* Initializes basic info and sets facet configuration from template facetTargets.
|
|
464
466
|
*/
|
|
465
|
-
async function populateResourceInstance(
|
|
466
|
-
const resourceTemplateDoc = await
|
|
467
|
+
async function populateResourceInstance(reactorClient, resourceInstanceDocId, resourceTemplateId, operatorId, customerId, customerName) {
|
|
468
|
+
const resourceTemplateDoc = await reactorClient.get(resourceTemplateId);
|
|
467
469
|
if (!resourceTemplateDoc)
|
|
468
470
|
return;
|
|
469
471
|
const templateState = resourceTemplateDoc.state.global;
|
|
470
472
|
// Initialize instance with basic info from template
|
|
471
|
-
await
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
473
|
+
await reactorClient.execute(resourceInstanceDocId, "main", [
|
|
474
|
+
ResourceInstance.actions.initializeInstance({
|
|
475
|
+
operatorId,
|
|
476
|
+
operatorDocumentType: "powerhouse/builder-profile",
|
|
477
|
+
resourceTemplateId,
|
|
478
|
+
customerId,
|
|
479
|
+
customerName,
|
|
480
|
+
templateName: templateState.title,
|
|
481
|
+
thumbnailUrl: templateState.thumbnailUrl,
|
|
482
|
+
infoLink: templateState.infoLink,
|
|
483
|
+
description: templateState.description,
|
|
484
|
+
}),
|
|
485
|
+
]);
|
|
482
486
|
// Populate facet configuration from template's facetTargets
|
|
483
487
|
for (const facetTarget of templateState.facetTargets) {
|
|
484
488
|
if (facetTarget.selectedOptions.length > 0) {
|
|
485
|
-
await
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
489
|
+
await reactorClient.execute(resourceInstanceDocId, "main", [
|
|
490
|
+
ResourceInstance.actions.setInstanceFacet({
|
|
491
|
+
id: facetTarget.id,
|
|
492
|
+
categoryKey: facetTarget.categoryKey,
|
|
493
|
+
categoryLabel: facetTarget.categoryLabel,
|
|
494
|
+
selectedOption: facetTarget.selectedOptions[0],
|
|
495
|
+
}),
|
|
496
|
+
]);
|
|
491
497
|
}
|
|
492
498
|
}
|
|
493
499
|
}
|
|
500
|
+
/**
|
|
501
|
+
* Map a DiscountRule to the GraphQL shape, or null
|
|
502
|
+
*/
|
|
503
|
+
function mapDiscountRule(rule) {
|
|
504
|
+
if (!rule)
|
|
505
|
+
return null;
|
|
506
|
+
return {
|
|
507
|
+
discountType: rule.discountType,
|
|
508
|
+
discountValue: rule.discountValue,
|
|
509
|
+
};
|
|
510
|
+
}
|
|
494
511
|
/**
|
|
495
512
|
* Map ServiceOfferingState from document model to GraphQL response
|
|
496
513
|
*/
|
|
@@ -506,14 +523,14 @@ function mapServiceOfferingState(state, doc) {
|
|
|
506
523
|
infoLink: state.infoLink || null,
|
|
507
524
|
status: state.status,
|
|
508
525
|
lastModified: state.lastModified,
|
|
509
|
-
availableBillingCycles: state.availableBillingCycles,
|
|
510
|
-
facetTargets: state.facetTargets.map((facet) => ({
|
|
526
|
+
availableBillingCycles: state.availableBillingCycles || [],
|
|
527
|
+
facetTargets: (state.facetTargets || []).map((facet) => ({
|
|
511
528
|
id: facet.id,
|
|
512
529
|
categoryKey: facet.categoryKey,
|
|
513
530
|
categoryLabel: facet.categoryLabel,
|
|
514
|
-
selectedOptions: facet.selectedOptions,
|
|
531
|
+
selectedOptions: facet.selectedOptions || [],
|
|
515
532
|
})),
|
|
516
|
-
services: state.services.map((service) => ({
|
|
533
|
+
services: (state.services || []).map((service) => ({
|
|
517
534
|
id: service.id,
|
|
518
535
|
title: service.title,
|
|
519
536
|
description: service.description || null,
|
|
@@ -521,37 +538,45 @@ function mapServiceOfferingState(state, doc) {
|
|
|
521
538
|
isSetupFormation: service.isSetupFormation,
|
|
522
539
|
optionGroupId: service.optionGroupId || null,
|
|
523
540
|
})),
|
|
524
|
-
tiers: state.tiers.map((tier) => ({
|
|
541
|
+
tiers: (state.tiers || []).map((tier) => ({
|
|
525
542
|
id: tier.id,
|
|
526
543
|
name: tier.name,
|
|
527
544
|
description: tier.description || null,
|
|
528
545
|
isCustomPricing: tier.isCustomPricing,
|
|
529
546
|
pricingMode: tier.pricingMode || null,
|
|
530
|
-
pricing:
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
}
|
|
535
|
-
: null,
|
|
547
|
+
pricing: {
|
|
548
|
+
amount: tier.pricing?.amount ?? null,
|
|
549
|
+
currency: tier.pricing?.currency ?? "USD",
|
|
550
|
+
},
|
|
536
551
|
defaultBillingCycle: tier.defaultBillingCycle || null,
|
|
537
|
-
billingCycleDiscounts: tier.billingCycleDiscounts.map((d) => ({
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
552
|
+
billingCycleDiscounts: (tier.billingCycleDiscounts || []).map((d) => ({
|
|
553
|
+
billingCycle: d.billingCycle,
|
|
554
|
+
discountRule: {
|
|
555
|
+
discountType: d.discountRule?.discountType,
|
|
556
|
+
discountValue: d.discountRule?.discountValue,
|
|
557
|
+
},
|
|
541
558
|
})),
|
|
542
|
-
serviceLevels: tier.serviceLevels.map((level) => ({
|
|
559
|
+
serviceLevels: (tier.serviceLevels || []).map((level) => ({
|
|
543
560
|
id: level.id,
|
|
544
561
|
serviceId: level.serviceId,
|
|
545
562
|
level: level.level,
|
|
563
|
+
customValue: level.customValue || null,
|
|
564
|
+
optionGroupId: level.optionGroupId || null,
|
|
546
565
|
})),
|
|
547
|
-
usageLimits: tier.usageLimits.map((limit) => ({
|
|
566
|
+
usageLimits: (tier.usageLimits || []).map((limit) => ({
|
|
548
567
|
id: limit.id,
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
568
|
+
serviceId: limit.serviceId,
|
|
569
|
+
metric: limit.metric,
|
|
570
|
+
unitName: limit.unitName || null,
|
|
571
|
+
freeLimit: limit.freeLimit ?? null,
|
|
572
|
+
paidLimit: limit.paidLimit ?? null,
|
|
573
|
+
resetCycle: limit.resetCycle || null,
|
|
574
|
+
notes: limit.notes || null,
|
|
575
|
+
unitPrice: limit.unitPrice ?? null,
|
|
576
|
+
unitPriceCurrency: limit.unitPriceCurrency || null,
|
|
552
577
|
})),
|
|
553
578
|
})),
|
|
554
|
-
optionGroups: state.optionGroups.map((group) => ({
|
|
579
|
+
optionGroups: (state.optionGroups || []).map((group) => ({
|
|
555
580
|
id: group.id,
|
|
556
581
|
name: group.name,
|
|
557
582
|
description: group.description || null,
|
|
@@ -560,21 +585,55 @@ function mapServiceOfferingState(state, doc) {
|
|
|
560
585
|
pricingMode: group.pricingMode || null,
|
|
561
586
|
standalonePricing: group.standalonePricing
|
|
562
587
|
? {
|
|
563
|
-
|
|
564
|
-
|
|
588
|
+
setupCost: group.standalonePricing.setupCost
|
|
589
|
+
? {
|
|
590
|
+
amount: group.standalonePricing.setupCost.amount,
|
|
591
|
+
currency: group.standalonePricing.setupCost.currency,
|
|
592
|
+
discount: mapDiscountRule(group.standalonePricing.setupCost.discount),
|
|
593
|
+
}
|
|
594
|
+
: null,
|
|
595
|
+
recurringPricing: (group.standalonePricing.recurringPricing || []).map((rp) => ({
|
|
596
|
+
id: rp.id,
|
|
597
|
+
billingCycle: rp.billingCycle,
|
|
598
|
+
amount: rp.amount,
|
|
599
|
+
currency: rp.currency,
|
|
600
|
+
discount: mapDiscountRule(rp.discount),
|
|
601
|
+
})),
|
|
565
602
|
}
|
|
566
603
|
: null,
|
|
567
604
|
tierDependentPricing: (group.tierDependentPricing || []).map((tp) => ({
|
|
605
|
+
id: tp.id,
|
|
568
606
|
tierId: tp.tierId,
|
|
569
|
-
|
|
570
|
-
|
|
607
|
+
setupCost: tp.setupCost
|
|
608
|
+
? {
|
|
609
|
+
amount: tp.setupCost.amount,
|
|
610
|
+
currency: tp.setupCost.currency,
|
|
611
|
+
discount: mapDiscountRule(tp.setupCost.discount),
|
|
612
|
+
}
|
|
613
|
+
: null,
|
|
614
|
+
setupCostDiscounts: (tp.setupCostDiscounts || []).map((d) => ({
|
|
615
|
+
billingCycle: d.billingCycle,
|
|
616
|
+
discountRule: {
|
|
617
|
+
discountType: d.discountRule?.discountType,
|
|
618
|
+
discountValue: d.discountRule?.discountValue,
|
|
619
|
+
},
|
|
620
|
+
})),
|
|
621
|
+
recurringPricing: (tp.recurringPricing || []).map((rp) => ({
|
|
622
|
+
id: rp.id,
|
|
623
|
+
billingCycle: rp.billingCycle,
|
|
624
|
+
amount: rp.amount,
|
|
625
|
+
currency: rp.currency,
|
|
626
|
+
discount: mapDiscountRule(rp.discount),
|
|
627
|
+
})),
|
|
571
628
|
})),
|
|
572
629
|
costType: group.costType || null,
|
|
573
630
|
availableBillingCycles: group.availableBillingCycles || [],
|
|
574
|
-
billingCycleDiscounts: group.billingCycleDiscounts.map((d) => ({
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
631
|
+
billingCycleDiscounts: (group.billingCycleDiscounts || []).map((d) => ({
|
|
632
|
+
billingCycle: d.billingCycle,
|
|
633
|
+
discountRule: {
|
|
634
|
+
discountType: d.discountRule?.discountType,
|
|
635
|
+
discountValue: d.discountRule?.discountValue,
|
|
636
|
+
},
|
|
578
637
|
})),
|
|
579
638
|
discountMode: group.discountMode || null,
|
|
580
639
|
price: group.price ?? null,
|
|
@@ -582,12 +641,19 @@ function mapServiceOfferingState(state, doc) {
|
|
|
582
641
|
})),
|
|
583
642
|
};
|
|
584
643
|
}
|
|
585
|
-
async function getOperatorDrive(
|
|
586
|
-
|
|
587
|
-
const results = await
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
644
|
+
async function getOperatorDrive(reactorClient, resourceTemplateId) {
|
|
645
|
+
// Find all drives
|
|
646
|
+
const { results: drives } = await reactorClient.find({
|
|
647
|
+
type: "powerhouse/document-drive",
|
|
648
|
+
});
|
|
649
|
+
for (const drive of drives) {
|
|
650
|
+
const driveDoc = drive;
|
|
651
|
+
// Check if this drive contains the resource template as a child
|
|
652
|
+
const { results: children } = await reactorClient.getChildren(driveDoc.header.id);
|
|
653
|
+
const hasTemplate = children.some((child) => child.header.id === resourceTemplateId);
|
|
654
|
+
if (hasTemplate) {
|
|
655
|
+
return driveDoc;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return undefined;
|
|
593
659
|
}
|