@powerhousedao/service-offering 1.0.0-dev.4 → 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 +1 -1
- package/dist/subgraphs/resources-services/resolvers.d.ts.map +1 -1
- package/dist/subgraphs/resources-services/resolvers.js +272 -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,53 @@
|
|
|
1
|
-
import {
|
|
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 reactor = subgraph.reactor;
|
|
7
7
|
const reactorClient = subgraph.reactorClient;
|
|
8
8
|
return {
|
|
9
9
|
Query: {
|
|
10
10
|
resourceTemplates: async (_, args) => {
|
|
11
11
|
const { id, status, operatorId } = args.filter || {};
|
|
12
|
-
// If filtering by specific id, fetch directly
|
|
12
|
+
// If filtering by specific id, try to fetch directly
|
|
13
13
|
if (id) {
|
|
14
14
|
try {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
const doc = await reactorClient.get(id);
|
|
16
|
+
if (doc &&
|
|
17
|
+
doc.header.documentType === "powerhouse/resource-template") {
|
|
18
|
+
const state = doc.state.global;
|
|
19
|
+
if (status &&
|
|
20
|
+
status.length > 0 &&
|
|
21
|
+
!status.includes(state.status)) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
if (operatorId && state.operatorId !== operatorId) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
return [mapResourceTemplateState(state, doc)];
|
|
23
28
|
}
|
|
24
|
-
if (operatorId && state.operatorId !== operatorId) {
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
return [mapResourceTemplateState(state, doc)];
|
|
28
29
|
}
|
|
29
30
|
catch {
|
|
30
|
-
|
|
31
|
+
// Document not found
|
|
31
32
|
}
|
|
33
|
+
return [];
|
|
32
34
|
}
|
|
33
35
|
// Find all resource template documents
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
+
const { results: docs } = await reactorClient.find({
|
|
37
|
+
type: "powerhouse/resource-template",
|
|
38
|
+
});
|
|
36
39
|
const resourceTemplates = [];
|
|
37
40
|
for (const doc of docs) {
|
|
38
|
-
const
|
|
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
|
|
39
47
|
if (status && status.length > 0 && !status.includes(state.status)) {
|
|
40
48
|
continue;
|
|
41
49
|
}
|
|
50
|
+
// Apply operatorId filter if provided
|
|
42
51
|
if (operatorId && state.operatorId !== operatorId) {
|
|
43
52
|
continue;
|
|
44
53
|
}
|
|
@@ -48,43 +57,53 @@ export const getResolvers = (subgraph) => {
|
|
|
48
57
|
},
|
|
49
58
|
serviceOfferings: async (_, args) => {
|
|
50
59
|
const { id, status, operatorId, resourceTemplateId } = args.filter || {};
|
|
51
|
-
// If filtering by specific id, fetch directly
|
|
60
|
+
// If filtering by specific id, try to fetch directly
|
|
52
61
|
if (id) {
|
|
53
62
|
try {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
const doc = await reactorClient.get(id);
|
|
64
|
+
if (doc &&
|
|
65
|
+
doc.header.documentType === "powerhouse/service-offering") {
|
|
66
|
+
const state = doc.state.global;
|
|
67
|
+
if (status &&
|
|
68
|
+
status.length > 0 &&
|
|
69
|
+
!status.includes(state.status)) {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
if (operatorId && state.operatorId !== operatorId) {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
if (resourceTemplateId &&
|
|
76
|
+
state.resourceTemplateId !== resourceTemplateId) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
return [mapServiceOfferingState(state, doc)];
|
|
65
80
|
}
|
|
66
|
-
if (resourceTemplateId &&
|
|
67
|
-
state.resourceTemplateId !== resourceTemplateId) {
|
|
68
|
-
return [];
|
|
69
|
-
}
|
|
70
|
-
return [mapServiceOfferingState(state, doc)];
|
|
71
81
|
}
|
|
72
82
|
catch {
|
|
73
|
-
|
|
83
|
+
// Document not found
|
|
74
84
|
}
|
|
85
|
+
return [];
|
|
75
86
|
}
|
|
76
87
|
// Find all service offering documents
|
|
77
|
-
const
|
|
78
|
-
|
|
88
|
+
const { results: docs } = await reactorClient.find({
|
|
89
|
+
type: "powerhouse/service-offering",
|
|
90
|
+
});
|
|
79
91
|
const serviceOfferings = [];
|
|
80
92
|
for (const doc of docs) {
|
|
81
|
-
const
|
|
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
|
|
82
99
|
if (status && status.length > 0 && !status.includes(state.status)) {
|
|
83
100
|
continue;
|
|
84
101
|
}
|
|
102
|
+
// Apply operatorId filter if provided
|
|
85
103
|
if (operatorId && state.operatorId !== operatorId) {
|
|
86
104
|
continue;
|
|
87
105
|
}
|
|
106
|
+
// Apply resourceTemplateId filter if provided
|
|
88
107
|
if (resourceTemplateId &&
|
|
89
108
|
state.resourceTemplateId !== resourceTemplateId) {
|
|
90
109
|
continue;
|
|
@@ -175,7 +194,7 @@ export const getResolvers = (subgraph) => {
|
|
|
175
194
|
};
|
|
176
195
|
}
|
|
177
196
|
// Fetch the service offering
|
|
178
|
-
const serviceOfferingDoc = await
|
|
197
|
+
const serviceOfferingDoc = await reactorClient.get(serviceOfferingId);
|
|
179
198
|
if (!serviceOfferingDoc) {
|
|
180
199
|
return {
|
|
181
200
|
success: false,
|
|
@@ -192,13 +211,38 @@ export const getResolvers = (subgraph) => {
|
|
|
192
211
|
errors: ["Service offering has no associated resource template"],
|
|
193
212
|
};
|
|
194
213
|
}
|
|
195
|
-
//
|
|
196
|
-
const
|
|
197
|
-
|
|
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) {
|
|
198
238
|
return {
|
|
199
239
|
success: false,
|
|
200
240
|
data: null,
|
|
201
|
-
errors: [
|
|
241
|
+
errors: [
|
|
242
|
+
error instanceof Error
|
|
243
|
+
? error.message
|
|
244
|
+
: "Failed to compute price breakdown from user selection",
|
|
245
|
+
],
|
|
202
246
|
};
|
|
203
247
|
}
|
|
204
248
|
// Sanitize names for use as drive id/slug: lowercase, trim, collapse whitespace, replace spaces with hyphens
|
|
@@ -207,36 +251,36 @@ export const getResolvers = (subgraph) => {
|
|
|
207
251
|
.toLowerCase()
|
|
208
252
|
.replace(/\s+/g, "-")
|
|
209
253
|
.replace(/_/g, "-");
|
|
210
|
-
const parsedName = name
|
|
211
|
-
.trim()
|
|
212
|
-
.toLowerCase()
|
|
213
|
-
.replace(/\s+/g, "-")
|
|
214
|
-
.replace(/_/g, "-");
|
|
215
254
|
try {
|
|
216
255
|
// create team-builder-admin drive
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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);
|
|
226
265
|
// create builder-profile doc inside the team-builder-admin drive
|
|
227
|
-
const builderProfileDoc = await
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
+
]);
|
|
235
279
|
// create resource-instance and subscription-instance docs
|
|
236
|
-
const resourceInstanceDoc = await
|
|
237
|
-
const subscriptionInstanceDoc = await
|
|
280
|
+
const resourceInstanceDoc = await reactorClient.createEmpty("powerhouse/resource-instance");
|
|
281
|
+
const subscriptionInstanceDoc = await reactorClient.createEmpty("powerhouse/subscription-instance");
|
|
238
282
|
// resolve parent folders for both drives
|
|
239
|
-
const teamParentFolder = teamBuilderAdminDrive.state.global.nodes
|
|
283
|
+
const teamParentFolder = teamBuilderAdminDrive.state.global.nodes.find((node) => node.kind === "folder")?.parentFolder;
|
|
240
284
|
const operatorDrive = await getOperatorDrive(reactorClient, resourceTemplateId);
|
|
241
285
|
if (!operatorDrive) {
|
|
242
286
|
throw new Error(`Operator drive not found for resource template ${resourceTemplateId}`);
|
|
@@ -250,7 +294,7 @@ export const getResolvers = (subgraph) => {
|
|
|
250
294
|
}
|
|
251
295
|
const operatorParentFolder = operatorDrive.state.global.nodes.find((node) => node.kind === "folder")?.parentFolder;
|
|
252
296
|
// batch add resource-instance and subscription-instance to team-builder-admin drive
|
|
253
|
-
await
|
|
297
|
+
await reactorClient.execute(teamBuilderAdminDrive.header.id, "main", [
|
|
254
298
|
addFile({
|
|
255
299
|
documentType: "powerhouse/resource-instance",
|
|
256
300
|
id: resourceInstanceDoc.header.id,
|
|
@@ -265,7 +309,7 @@ export const getResolvers = (subgraph) => {
|
|
|
265
309
|
}),
|
|
266
310
|
]);
|
|
267
311
|
// batch add resource-instance and subscription-instance to operator drive
|
|
268
|
-
await
|
|
312
|
+
await reactorClient.execute(operatorDrive.header.id, "main", [
|
|
269
313
|
addFile({
|
|
270
314
|
documentType: "powerhouse/resource-instance",
|
|
271
315
|
id: resourceInstanceDoc.header.id,
|
|
@@ -280,30 +324,37 @@ export const getResolvers = (subgraph) => {
|
|
|
280
324
|
}),
|
|
281
325
|
]);
|
|
282
326
|
// populate documents after all files are added to both drives
|
|
283
|
-
await populateResourceInstance(
|
|
327
|
+
await populateResourceInstance(reactorClient, resourceInstanceDoc.header.id, resourceTemplateId, operatorProfileId, // operator profile id
|
|
284
328
|
builderProfileDoc.header.id, // customer id
|
|
285
329
|
parsedTeamName);
|
|
286
330
|
const now = new Date().toISOString();
|
|
287
|
-
|
|
288
|
-
|
|
331
|
+
const subscriptionInput = mapOfferingToSubscription({
|
|
332
|
+
offering: serviceOfferingState,
|
|
333
|
+
tierId: selection.tierId,
|
|
334
|
+
selectedBillingCycle: selection.billingCycle,
|
|
289
335
|
customerId: builderProfileDoc.header.id,
|
|
290
336
|
customerName: name,
|
|
291
337
|
customerEmail,
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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;
|
|
302
351
|
if (projectedAmount != null) {
|
|
303
|
-
await
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
352
|
+
await reactorClient.execute(subscriptionInstanceDoc.header.id, "main", [
|
|
353
|
+
SubscriptionInstance.actions.updateBillingProjection({
|
|
354
|
+
projectedBillAmount: projectedAmount,
|
|
355
|
+
projectedBillCurrency: priceBreakdown.tierCurrency || "USD",
|
|
356
|
+
}),
|
|
357
|
+
]);
|
|
307
358
|
}
|
|
308
359
|
return {
|
|
309
360
|
success: true,
|
|
@@ -334,7 +385,7 @@ export const getResolvers = (subgraph) => {
|
|
|
334
385
|
* Uses the drive slug in the switchboard URL path.
|
|
335
386
|
*/
|
|
336
387
|
function getDriveLink(driveSlug) {
|
|
337
|
-
const baseUri = process.env.BASE_URI || "";
|
|
388
|
+
const baseUri = typeof process !== "undefined" ? process.env.BASE_URI || "" : "";
|
|
338
389
|
if (baseUri.includes("-dev.")) {
|
|
339
390
|
return `https://connect-dev.powerhouse.xyz/?driveUrl=https://switchboard-dev.powerhouse.xyz/d/${driveSlug}`;
|
|
340
391
|
}
|
|
@@ -360,18 +411,18 @@ function mapResourceTemplateState(state, doc) {
|
|
|
360
411
|
infoLink: state.infoLink || null,
|
|
361
412
|
status: state.status,
|
|
362
413
|
lastModified: state.lastModified,
|
|
363
|
-
targetAudiences: state.targetAudiences.map((audience) => ({
|
|
414
|
+
targetAudiences: (state.targetAudiences || []).map((audience) => ({
|
|
364
415
|
id: audience.id,
|
|
365
416
|
label: audience.label,
|
|
366
417
|
color: audience.color || null,
|
|
367
418
|
})),
|
|
368
|
-
setupServices: state.setupServices,
|
|
369
|
-
recurringServices: state.recurringServices,
|
|
370
|
-
facetTargets: state.facetTargets.map((facet) => ({
|
|
419
|
+
setupServices: state.setupServices || [],
|
|
420
|
+
recurringServices: state.recurringServices || [],
|
|
421
|
+
facetTargets: (state.facetTargets || []).map((facet) => ({
|
|
371
422
|
id: facet.id,
|
|
372
423
|
categoryKey: facet.categoryKey,
|
|
373
424
|
categoryLabel: facet.categoryLabel,
|
|
374
|
-
selectedOptions: facet.selectedOptions,
|
|
425
|
+
selectedOptions: facet.selectedOptions || [],
|
|
375
426
|
})),
|
|
376
427
|
services: (state.services || []).map((service) => ({
|
|
377
428
|
id: service.id,
|
|
@@ -385,7 +436,7 @@ function mapResourceTemplateState(state, doc) {
|
|
|
385
436
|
id: binding.id,
|
|
386
437
|
facetName: binding.facetName,
|
|
387
438
|
facetType: binding.facetType,
|
|
388
|
-
supportedOptions: binding.supportedOptions,
|
|
439
|
+
supportedOptions: binding.supportedOptions || [],
|
|
389
440
|
})),
|
|
390
441
|
})),
|
|
391
442
|
optionGroups: (state.optionGroups || []).map((group) => ({
|
|
@@ -401,7 +452,7 @@ function mapResourceTemplateState(state, doc) {
|
|
|
401
452
|
answer: faq.answer || null,
|
|
402
453
|
displayOrder: faq.displayOrder,
|
|
403
454
|
})),
|
|
404
|
-
contentSections: state.contentSections.map((section) => ({
|
|
455
|
+
contentSections: (state.contentSections || []).map((section) => ({
|
|
405
456
|
id: section.id,
|
|
406
457
|
title: section.title,
|
|
407
458
|
content: section.content,
|
|
@@ -413,35 +464,50 @@ function mapResourceTemplateState(state, doc) {
|
|
|
413
464
|
* Populate a resource-instance document with data from a resource-template.
|
|
414
465
|
* Initializes basic info and sets facet configuration from template facetTargets.
|
|
415
466
|
*/
|
|
416
|
-
async function populateResourceInstance(
|
|
417
|
-
const resourceTemplateDoc = await
|
|
467
|
+
async function populateResourceInstance(reactorClient, resourceInstanceDocId, resourceTemplateId, operatorId, customerId, customerName) {
|
|
468
|
+
const resourceTemplateDoc = await reactorClient.get(resourceTemplateId);
|
|
418
469
|
if (!resourceTemplateDoc)
|
|
419
470
|
return;
|
|
420
471
|
const templateState = resourceTemplateDoc.state.global;
|
|
421
472
|
// Initialize instance with basic info from template
|
|
422
|
-
await
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
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
|
+
]);
|
|
433
486
|
// Populate facet configuration from template's facetTargets
|
|
434
487
|
for (const facetTarget of templateState.facetTargets) {
|
|
435
488
|
if (facetTarget.selectedOptions.length > 0) {
|
|
436
|
-
await
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
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
|
+
]);
|
|
442
497
|
}
|
|
443
498
|
}
|
|
444
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
|
+
}
|
|
445
511
|
/**
|
|
446
512
|
* Map ServiceOfferingState from document model to GraphQL response
|
|
447
513
|
*/
|
|
@@ -457,14 +523,14 @@ function mapServiceOfferingState(state, doc) {
|
|
|
457
523
|
infoLink: state.infoLink || null,
|
|
458
524
|
status: state.status,
|
|
459
525
|
lastModified: state.lastModified,
|
|
460
|
-
availableBillingCycles: state.availableBillingCycles,
|
|
461
|
-
facetTargets: state.facetTargets.map((facet) => ({
|
|
526
|
+
availableBillingCycles: state.availableBillingCycles || [],
|
|
527
|
+
facetTargets: (state.facetTargets || []).map((facet) => ({
|
|
462
528
|
id: facet.id,
|
|
463
529
|
categoryKey: facet.categoryKey,
|
|
464
530
|
categoryLabel: facet.categoryLabel,
|
|
465
|
-
selectedOptions: facet.selectedOptions,
|
|
531
|
+
selectedOptions: facet.selectedOptions || [],
|
|
466
532
|
})),
|
|
467
|
-
services: state.services.map((service) => ({
|
|
533
|
+
services: (state.services || []).map((service) => ({
|
|
468
534
|
id: service.id,
|
|
469
535
|
title: service.title,
|
|
470
536
|
description: service.description || null,
|
|
@@ -472,61 +538,102 @@ function mapServiceOfferingState(state, doc) {
|
|
|
472
538
|
isSetupFormation: service.isSetupFormation,
|
|
473
539
|
optionGroupId: service.optionGroupId || null,
|
|
474
540
|
})),
|
|
475
|
-
tiers: state.tiers.map((tier) => ({
|
|
541
|
+
tiers: (state.tiers || []).map((tier) => ({
|
|
476
542
|
id: tier.id,
|
|
477
543
|
name: tier.name,
|
|
478
544
|
description: tier.description || null,
|
|
479
545
|
isCustomPricing: tier.isCustomPricing,
|
|
480
|
-
pricingMode: tier.pricingMode,
|
|
481
|
-
pricing:
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
}
|
|
486
|
-
: null,
|
|
546
|
+
pricingMode: tier.pricingMode || null,
|
|
547
|
+
pricing: {
|
|
548
|
+
amount: tier.pricing?.amount ?? null,
|
|
549
|
+
currency: tier.pricing?.currency ?? "USD",
|
|
550
|
+
},
|
|
487
551
|
defaultBillingCycle: tier.defaultBillingCycle || null,
|
|
488
|
-
billingCycleDiscounts: tier.billingCycleDiscounts.map((d) => ({
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
552
|
+
billingCycleDiscounts: (tier.billingCycleDiscounts || []).map((d) => ({
|
|
553
|
+
billingCycle: d.billingCycle,
|
|
554
|
+
discountRule: {
|
|
555
|
+
discountType: d.discountRule?.discountType,
|
|
556
|
+
discountValue: d.discountRule?.discountValue,
|
|
557
|
+
},
|
|
492
558
|
})),
|
|
493
|
-
serviceLevels: tier.serviceLevels.map((level) => ({
|
|
559
|
+
serviceLevels: (tier.serviceLevels || []).map((level) => ({
|
|
494
560
|
id: level.id,
|
|
495
561
|
serviceId: level.serviceId,
|
|
496
562
|
level: level.level,
|
|
497
|
-
|
|
563
|
+
customValue: level.customValue || null,
|
|
564
|
+
optionGroupId: level.optionGroupId || null,
|
|
498
565
|
})),
|
|
499
|
-
usageLimits: tier.usageLimits.map((limit) => ({
|
|
566
|
+
usageLimits: (tier.usageLimits || []).map((limit) => ({
|
|
500
567
|
id: limit.id,
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
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,
|
|
504
577
|
})),
|
|
505
578
|
})),
|
|
506
|
-
optionGroups: state.optionGroups.map((group) => ({
|
|
579
|
+
optionGroups: (state.optionGroups || []).map((group) => ({
|
|
507
580
|
id: group.id,
|
|
508
581
|
name: group.name,
|
|
509
582
|
description: group.description || null,
|
|
510
583
|
isAddOn: group.isAddOn,
|
|
511
584
|
defaultSelected: group.defaultSelected,
|
|
512
|
-
pricingMode: group.pricingMode,
|
|
585
|
+
pricingMode: group.pricingMode || null,
|
|
513
586
|
standalonePricing: group.standalonePricing
|
|
514
587
|
? {
|
|
515
|
-
|
|
516
|
-
|
|
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
|
+
})),
|
|
517
602
|
}
|
|
518
603
|
: null,
|
|
519
604
|
tierDependentPricing: (group.tierDependentPricing || []).map((tp) => ({
|
|
605
|
+
id: tp.id,
|
|
520
606
|
tierId: tp.tierId,
|
|
521
|
-
|
|
522
|
-
|
|
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
|
+
})),
|
|
523
628
|
})),
|
|
524
629
|
costType: group.costType || null,
|
|
525
630
|
availableBillingCycles: group.availableBillingCycles || [],
|
|
526
|
-
billingCycleDiscounts: group.billingCycleDiscounts.map((d) => ({
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
631
|
+
billingCycleDiscounts: (group.billingCycleDiscounts || []).map((d) => ({
|
|
632
|
+
billingCycle: d.billingCycle,
|
|
633
|
+
discountRule: {
|
|
634
|
+
discountType: d.discountRule?.discountType,
|
|
635
|
+
discountValue: d.discountRule?.discountValue,
|
|
636
|
+
},
|
|
530
637
|
})),
|
|
531
638
|
discountMode: group.discountMode || null,
|
|
532
639
|
price: group.price ?? null,
|
|
@@ -534,12 +641,19 @@ function mapServiceOfferingState(state, doc) {
|
|
|
534
641
|
})),
|
|
535
642
|
};
|
|
536
643
|
}
|
|
537
|
-
/**
|
|
538
|
-
* Find the drive that contains a given resource template document.
|
|
539
|
-
* Uses reactorClient to find the parent drive.
|
|
540
|
-
*/
|
|
541
644
|
async function getOperatorDrive(reactorClient, resourceTemplateId) {
|
|
542
|
-
|
|
543
|
-
const
|
|
544
|
-
|
|
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;
|
|
545
659
|
}
|
|
@@ -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"}
|