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