Skip to content

Commit f96df69

Browse files
fix: update getSubscription cloud function for guest login flow and handle subscription details
1 parent 654dadc commit f96df69

File tree

3 files changed

+119
-42
lines changed

3 files changed

+119
-42
lines changed

apps/OpenSign/src/constant/Utils.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ export const openInNewTab = (url) => {
1313
window.open(url, "_blank", "noopener,noreferrer");
1414
};
1515

16-
export async function fetchSubscription(extUserId) {
16+
export async function fetchSubscription(extUserId, contactObjId) {
1717
try {
1818
const extClass = localStorage.getItem("Extand_Class");
19+
const isGuestSign = localStorage.getItem("isGuestSigner");
1920
let extUser;
2021
if (extClass) {
2122
const jsonSender = JSON.parse(extClass);
@@ -30,10 +31,18 @@ export async function fetchSubscription(extUserId) {
3031
"X-Parse-Application-Id": localStorage.getItem("parseAppId"),
3132
sessionToken: localStorage.getItem("accesstoken")
3233
};
33-
const params = { extUserId: extUser };
34+
const params = isGuestSign
35+
? { contactId: contactObjId }
36+
: { extUserId: extUser };
3437
const tenatRes = await axios.post(url, params, { headers: headers });
35-
const plan = tenatRes.data?.result?.result?.PlanCode;
36-
const billingDate = tenatRes.data?.result?.result?.Next_billing_date?.iso;
38+
let plan, status, billingDate;
39+
if (isGuestSign) {
40+
plan = tenatRes.data?.result?.result?.plan;
41+
status = tenatRes.data?.result?.result?.isSubscribed;
42+
} else {
43+
plan = tenatRes.data?.result?.result?.PlanCode;
44+
billingDate = tenatRes.data?.result?.result?.Next_billing_date?.iso;
45+
}
3746
return { plan, billingDate };
3847
} catch (err) {
3948
console.log("Err in fetch subscription", err);

apps/OpenSign/src/pages/PdfRequestFiles.js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,12 @@ function PdfRequestFiles() {
138138
// eslint-disable-next-line react-hooks/exhaustive-deps
139139
}, [divRef.current]);
140140

141-
async function checkIsSubscribed(extUserId) {
142-
const res = await fetchSubscription(extUserId);
141+
async function checkIsSubscribed(extUserId, contactId) {
142+
const isGuestSign = localStorage.getItem("isGuestSigner");
143+
const res = await fetchSubscription(extUserId, contactId);
143144
const plan = res.plan;
144-
const billingDate = res.billingDate;
145+
const billingDate = res?.billingDate;
146+
const status = res?.status;
145147
if (plan === "freeplan") {
146148
return true;
147149
} else if (billingDate) {
@@ -155,8 +157,15 @@ function PdfRequestFiles() {
155157
navigate(`/subscription`);
156158
}
157159
}
160+
} else if (isGuestSign) {
161+
if (status) {
162+
setIsSubscribed(true);
163+
return true;
164+
} else {
165+
setIsSubscriptionExpired(true);
166+
}
158167
} else {
159-
if (location.pathname.includes("/load/")) {
168+
if (isGuestSign) {
160169
setIsSubscriptionExpired(true);
161170
} else {
162171
navigate(`/subscription`);
@@ -178,9 +187,7 @@ function PdfRequestFiles() {
178187
} else {
179188
setPdfArrayBuffer(arrayBuffer);
180189
}
181-
if (isEnableSubscription) {
182-
await checkIsSubscribed(documentData[0]?.ExtUserPtr?.objectId);
183-
}
190+
184191
setExtUserId(documentData[0]?.ExtUserPtr?.objectId);
185192
const isCompleted =
186193
documentData[0].IsCompleted && documentData[0].IsCompleted;
@@ -196,6 +203,12 @@ function PdfRequestFiles() {
196203
);
197204

198205
currUserId = getCurrentSigner[0] ? getCurrentSigner[0].objectId : "";
206+
if (isEnableSubscription) {
207+
await checkIsSubscribed(
208+
documentData[0]?.ExtUserPtr?.objectId,
209+
currUserId
210+
);
211+
}
199212
setSignerObjectId(currUserId);
200213
if (documentData[0].SignedUrl) {
201214
setPdfUrl(documentData[0].SignedUrl);

apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js

Lines changed: 86 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,96 @@ import axios from 'axios';
22
const serverUrl = process.env.SERVER_URL;
33
const appId = process.env.APP_ID;
44
export default async function getSubscription(request) {
5-
const extUserId = request.params.extUserId;
6-
try {
7-
const userRes = await axios.get(serverUrl + '/users/me', {
8-
headers: {
9-
'X-Parse-Application-Id': appId,
10-
'X-Parse-Session-Token': request.headers['sessiontoken'],
11-
},
12-
});
13-
const userId = userRes.data && userRes.data.objectId;
14-
if (userId) {
15-
const subcriptionCls = new Parse.Query('contracts_Users');
16-
const exUser = await subcriptionCls.get(extUserId, { useMasterKey: true });
17-
if (exUser) {
18-
const subscriptionCls = new Parse.Query('contracts_Subscriptions');
19-
subscriptionCls.equalTo('TenantId', {
20-
__type: 'Pointer',
21-
className: 'partners_Tenant',
22-
objectId: exUser.get('TenantId').id,
23-
});
24-
subscriptionCls.descending('createdAt');
25-
const subcripitions = await subscriptionCls.first({ useMasterKey: true });
26-
if (subcripitions) {
27-
const _subcripitions = JSON.parse(JSON.stringify(subcripitions));
28-
return { status: 'success', result: _subcripitions };
5+
const extUserId = request.params.extUserId || '';
6+
const contactId = request.params.contactId || '';
7+
8+
if (extUserId) {
9+
try {
10+
const userRes = await axios.get(serverUrl + '/users/me', {
11+
headers: {
12+
'X-Parse-Application-Id': appId,
13+
'X-Parse-Session-Token': request.headers['sessiontoken'],
14+
},
15+
});
16+
const userId = userRes.data && userRes.data.objectId;
17+
if (userId) {
18+
const extCls = new Parse.Query('contracts_Users');
19+
const exUser = await extCls.get(extUserId, { useMasterKey: true });
20+
if (exUser) {
21+
const subscriptionCls = new Parse.Query('contracts_Subscriptions');
22+
subscriptionCls.equalTo('TenantId', {
23+
__type: 'Pointer',
24+
className: 'partners_Tenant',
25+
objectId: exUser.get('TenantId').id,
26+
});
27+
subscriptionCls.descending('createdAt');
28+
const subcripitions = await subscriptionCls.first({ useMasterKey: true });
29+
if (subcripitions) {
30+
const _subcripitions = JSON.parse(JSON.stringify(subcripitions));
31+
return { status: 'success', result: _subcripitions };
32+
} else {
33+
return { status: 'success', result: {} };
34+
}
2935
} else {
30-
return { status: 'success', result: {} };
36+
return { status: 'error', result: 'User not found!' };
3137
}
3238
} else {
33-
return { status: 'error', result: 'User not found!' };
39+
return { status: 'error', result: 'Invalid session token!' };
3440
}
35-
} else {
36-
return { status: 'error', result: 'Invalid session token!' };
41+
} catch (err) {
42+
console.log('Err in get subscription', err.message);
43+
return { status: 'error', result: err.message };
3744
}
38-
} catch (err) {
39-
console.log('Err in get subscription', err.message);
40-
return { status: 'error', result: err.message };
45+
} else if (contactId) {
46+
try {
47+
const userRes = await axios.get(serverUrl + '/users/me', {
48+
headers: {
49+
'X-Parse-Application-Id': appId,
50+
'X-Parse-Session-Token': request.headers['sessiontoken'],
51+
},
52+
});
53+
54+
const userId = userRes.data && userRes.data.objectId;
55+
if (userId) {
56+
const contactCls = new Parse.Query('contracts_Contactbook');
57+
const contactUser = await contactCls.get(contactId, { useMasterKey: true });
58+
if (contactUser) {
59+
const subscriptionCls = new Parse.Query('contracts_Subscriptions');
60+
subscriptionCls.equalTo('TenantId', {
61+
__type: 'Pointer',
62+
className: 'partners_Tenant',
63+
objectId: contactUser.get('TenantId').id,
64+
});
65+
subscriptionCls.descending('createdAt');
66+
const subcripitions = await subscriptionCls.first({ useMasterKey: true });
67+
68+
if (subcripitions) {
69+
const _subcripitions = JSON.parse(JSON.stringify(subcripitions));
70+
if (_subcripitions.PlanCode === 'freeplan') {
71+
return { status: 'success', result: { isSubscribed: false, plan: 'freeplan' } };
72+
} else if (_subcripitions?.Next_billing_date?.iso) {
73+
if (new Date(_subcripitions.Next_billing_date.iso) > new Date()) {
74+
return { status: 'success', result: { isSubscribed: true } };
75+
} else {
76+
return { status: 'success', result: { isSubscribed: false } };
77+
}
78+
} else {
79+
return { status: 'success', result: { isSubscribed: false } };
80+
}
81+
} else {
82+
return { status: 'success', result: { isSubscribed: false } };
83+
}
84+
} else {
85+
return { status: 'error', result: 'User not found!' };
86+
}
87+
} else {
88+
return { status: 'error', result: 'Invalid session token!' };
89+
}
90+
} catch (err) {
91+
console.log('Err in get subscription2', err.message);
92+
return { status: 'error', result: err.message };
93+
}
94+
} else {
95+
return { status: 'error', result: 'Invalid session token!' };
4196
}
4297
}

0 commit comments

Comments
 (0)