Skip to content

Commit 6c6704f

Browse files
author
Omar ALKABOUSS MOUSSANA
committed
feat(billing): delegate update services to autorenew service
ref: #MANAGER-18779 Signed-off-by: Omar ALKABOUSS MOUSSANA <[email protected]>
1 parent 79e0474 commit 6c6704f

File tree

2 files changed

+113
-29
lines changed

2 files changed

+113
-29
lines changed

packages/manager/modules/billing/src/autoRenew/autorenew.constants.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,69 @@ export const TRACKING_AGREEMENTS_PAGE_NAME = `${TRACKING_AUTORENEW_PAGE_NAME}::a
103103

104104
export const TRACKING_ACTIONS_PREFIX = `${TRACKING_CHAPTER_1}::${TRACKING_CHAPTER_2}::${TRACKING_CHAPTER_3}::${TRACKING_PAGE_CATEGORY}`;
105105

106+
export const SERVICE_NAME_PLACEHOLDER = '{serviceName}';
107+
export const SERVICE_INFOS_URLS_BY_TYPE = {
108+
ALL_DOM: `/allDom/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
109+
CLUSTER_HADOOP: `/cluster/hadoop/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
110+
CDN_DEDICATED: `/cdn/dedicated/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
111+
CDN_WEBSITE: `/cdn/website/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
112+
CDN_WEBSTORAGE: `/cdn/webstorage/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
113+
DEDICATED_ANTHOS: `/dedicated/anthos/tenants/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
114+
DEDICATED_NAS: `/dedicated/nas/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
115+
DEDICATED_NASHA: `/dedicated/nasha/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
116+
DEDICATED_SERVER: `/dedicated/server/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
117+
DEDICATED_HOUSING: `/dedicated/housing/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
118+
VPS: `/vps/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
119+
DEDICATED_CLOUD: `/dedicatedCloud/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
120+
ESSENTIALS: `/dedicatedCloud/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
121+
DOMAIN: `/domain/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
122+
EMAIL_DOMAIN: `/email/domain/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
123+
HOSTING_WEB: `/hosting/web/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
124+
HOSTING_RESELLER: `/hosting/reseller/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
125+
HOSTING_PRIVATE_DATABASE: `/hosting/privateDatabase/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
126+
LICENCE_CLOUD_LINUX: `/license/cloudLinux/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
127+
LICENCE_CPANEL: `/license/cpanel/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
128+
LICENCE_DIRECT_ADMIN: `/license/directadmin/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
129+
LICENCE_PLESK: `/license/plesk/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
130+
LICENCE_VIRTUOZZO: `/license/virtuozzo/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
131+
LICENCE_WINDOWS: `/license/windows/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
132+
LICENCE_WORKLIGHT: `/license/worklight/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
133+
LICENCE_OFFICE: `/license/office/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
134+
LICENCE_SQL_SERVER: `/license/sqlserver/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
135+
MIS: `/stack/mis/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
136+
OVER_THE_BOX: `/overTheBox/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
137+
ROUTER: `/router/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
138+
SMS: `/sms/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
139+
TELEPHONY: `/telephony/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
140+
XDSL: `/xdsl/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
141+
IP_LOADBALANCING: `/ip/loadBalancing/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
142+
CAAS_CONTAINERS: `/caas/containers/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
143+
CAAS_REGISTRY: `/caas/registry/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
144+
DBAAS_QUEUE: `/dbaas/queue/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
145+
DESKAAS: `/deskaas/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
146+
HORIZONVIEW: `/horizonView/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
147+
PAAS_DATABASE: `/paas/database/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
148+
PAAS_MONITORING: `/paas/monitoring/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
149+
DBAAS_TIMESERIES: `/dbaas/timeseries/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
150+
DBAAS_LOGS: `/dbaas/logs/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
151+
DEDICATED_CEPH: `/dedicated/ceph/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
152+
SAAS_CSP2: `/saas/csp2/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
153+
SSL_GATEWAY: `/sslGateway/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
154+
EMAIL_PRO: `/email/pro/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
155+
VEEAM_CLOUD_CONNECT: `/veeamCloudConnect/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
156+
VEEAM_ENTERPRISE: `/veeam/veeamEnterprise/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
157+
SHAREPOINT: `/msServices/sharepoint/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
158+
VIP: `/vip/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
159+
EXCHANGE: `/email/exchange/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
160+
METRICS: `/metrics/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
161+
COWORKING: `/coworking/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
162+
IP_LOADBALANCER: `/ipLoadbalancing/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
163+
WEBCOACH: `/webcoach/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
164+
OVH_CLOUD_CONNECT: `/ovhCloudConnect/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
165+
NETAPP: `/storage/netapp/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
166+
NUTANIX: `/nutanix/${SERVICE_NAME_PLACEHOLDER}/serviceInfos`,
167+
};
168+
106169
export default {
107170
AUTORENEW_EVENT,
108171
CONTRACTS_IDS,
@@ -112,4 +175,6 @@ export default {
112175
SERVICE_STATES,
113176
SERVICE_STATUS,
114177
URL_PARAMETER_SEPARATOR,
178+
SERVICE_INFOS_URLS_BY_TYPE,
179+
SERVICE_NAME_PLACEHOLDER,
115180
};

packages/manager/modules/billing/src/autoRenew/autorenew.service.js

Lines changed: 48 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import head from 'lodash/head';
33
import map from 'lodash/map';
44
import pick from 'lodash/pick';
55
import reduce from 'lodash/reduce';
6-
import set from 'lodash/set';
76
import values from 'lodash/values';
87

98
import { BillingService } from '@ovh-ux/manager-models';
@@ -15,6 +14,8 @@ import {
1514
SERVICE_STATUS,
1615
SERVICE_RENEW_MODES,
1716
SERVICE_TYPES,
17+
SERVICE_INFOS_URLS_BY_TYPE,
18+
SERVICE_NAME_PLACEHOLDER,
1819
} from './autorenew.constants';
1920

2021
export default class {
@@ -52,6 +53,19 @@ export default class {
5253
};
5354
}
5455

56+
static getServiceInfosUrl(service) {
57+
if (service.route) {
58+
return `${service.route}/serviceInfos`;
59+
}
60+
61+
const pattern = SERVICE_INFOS_URLS_BY_TYPE[service.serviceType];
62+
if (!pattern) {
63+
return null;
64+
}
65+
66+
return pattern.replace(SERVICE_NAME_PLACEHOLDER, service.serviceId);
67+
}
68+
5569
getAllServices() {
5670
return this.OvhApiBillingAutorenewServices.Aapi().query().$promise;
5771
}
@@ -154,37 +168,42 @@ export default class {
154168
);
155169
}
156170

157-
updateServices(updateList) {
158-
return this.OvhApiBillingAutorenewServices.Aapi()
159-
.put(
160-
{},
161-
{
162-
updateList,
163-
},
164-
)
165-
.$promise.then((result) => {
166-
if (result.state === 'OK') {
167-
return result;
168-
}
169-
set(result, 'state', 'ERROR');
170-
return this.$q.reject(result);
171+
updateService(service) {
172+
const url = this.constructor.getServiceInfosUrl(service);
173+
174+
if (!url) {
175+
return this.$q.reject({
176+
id: service.serviceId,
177+
message: 'Unsupported serviceType',
178+
type: 'ERROR',
171179
});
180+
}
181+
182+
return this.OvhHttp.put(url, {
183+
rootPath: 'apiv6',
184+
data: {
185+
renew: service.renew,
186+
},
187+
}).catch((err) => ({
188+
id: service.serviceId,
189+
message: err,
190+
type: 'ERROR',
191+
}));
172192
}
173193

174-
updateService(service) {
175-
return this.OvhApiBillingAutorenewServices.Aapi()
176-
.put(
177-
{},
178-
{
179-
updateList: [service],
180-
},
181-
)
182-
.$promise.then((result) => {
183-
if (result.state === 'OK') {
184-
return result;
185-
}
186-
return this.$q.reject(result);
187-
});
194+
updateServices(updateList) {
195+
const updatePromises = updateList.map((service) =>
196+
this.updateService(service),
197+
);
198+
199+
return this.$q.all(updatePromises).then((results) => {
200+
const errors = results.filter((res) => res.type === 'ERROR');
201+
202+
return {
203+
messages: errors,
204+
state: errors.length > 0 ? 'PARTIAL' : 'OK',
205+
};
206+
});
188207
}
189208

190209
getAutorenew() {

0 commit comments

Comments
 (0)