fix: update getSubscription cloud function for guest login flow and handle subscription details

This commit is contained in:
RaktimaNXG
2024-04-22 17:26:14 +05:30
parent 654dadce93
commit f96df699e4
3 changed files with 119 additions and 42 deletions
+13 -4
View File
@@ -13,9 +13,10 @@ export const openInNewTab = (url) => {
window.open(url, "_blank", "noopener,noreferrer");
};
export async function fetchSubscription(extUserId) {
export async function fetchSubscription(extUserId, contactObjId) {
try {
const extClass = localStorage.getItem("Extand_Class");
const isGuestSign = localStorage.getItem("isGuestSigner");
let extUser;
if (extClass) {
const jsonSender = JSON.parse(extClass);
@@ -30,10 +31,18 @@ export async function fetchSubscription(extUserId) {
"X-Parse-Application-Id": localStorage.getItem("parseAppId"),
sessionToken: localStorage.getItem("accesstoken")
};
const params = { extUserId: extUser };
const params = isGuestSign
? { contactId: contactObjId }
: { extUserId: extUser };
const tenatRes = await axios.post(url, params, { headers: headers });
const plan = tenatRes.data?.result?.result?.PlanCode;
const billingDate = tenatRes.data?.result?.result?.Next_billing_date?.iso;
let plan, status, billingDate;
if (isGuestSign) {
plan = tenatRes.data?.result?.result?.plan;
status = tenatRes.data?.result?.result?.isSubscribed;
} else {
plan = tenatRes.data?.result?.result?.PlanCode;
billingDate = tenatRes.data?.result?.result?.Next_billing_date?.iso;
}
return { plan, billingDate };
} catch (err) {
console.log("Err in fetch subscription", err);
+20 -7
View File
@@ -138,10 +138,12 @@ function PdfRequestFiles() {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [divRef.current]);
async function checkIsSubscribed(extUserId) {
const res = await fetchSubscription(extUserId);
async function checkIsSubscribed(extUserId, contactId) {
const isGuestSign = localStorage.getItem("isGuestSigner");
const res = await fetchSubscription(extUserId, contactId);
const plan = res.plan;
const billingDate = res.billingDate;
const billingDate = res?.billingDate;
const status = res?.status;
if (plan === "freeplan") {
return true;
} else if (billingDate) {
@@ -155,8 +157,15 @@ function PdfRequestFiles() {
navigate(`/subscription`);
}
}
} else if (isGuestSign) {
if (status) {
setIsSubscribed(true);
return true;
} else {
setIsSubscriptionExpired(true);
}
} else {
if (location.pathname.includes("/load/")) {
if (isGuestSign) {
setIsSubscriptionExpired(true);
} else {
navigate(`/subscription`);
@@ -178,9 +187,7 @@ function PdfRequestFiles() {
} else {
setPdfArrayBuffer(arrayBuffer);
}
if (isEnableSubscription) {
await checkIsSubscribed(documentData[0]?.ExtUserPtr?.objectId);
}
setExtUserId(documentData[0]?.ExtUserPtr?.objectId);
const isCompleted =
documentData[0].IsCompleted && documentData[0].IsCompleted;
@@ -196,6 +203,12 @@ function PdfRequestFiles() {
);
currUserId = getCurrentSigner[0] ? getCurrentSigner[0].objectId : "";
if (isEnableSubscription) {
await checkIsSubscribed(
documentData[0]?.ExtUserPtr?.objectId,
currUserId
);
}
setSignerObjectId(currUserId);
if (documentData[0].SignedUrl) {
setPdfUrl(documentData[0].SignedUrl);
@@ -2,41 +2,96 @@ import axios from 'axios';
const serverUrl = process.env.SERVER_URL;
const appId = process.env.APP_ID;
export default async function getSubscription(request) {
const extUserId = request.params.extUserId;
try {
const userRes = await axios.get(serverUrl + '/users/me', {
headers: {
'X-Parse-Application-Id': appId,
'X-Parse-Session-Token': request.headers['sessiontoken'],
},
});
const userId = userRes.data && userRes.data.objectId;
if (userId) {
const subcriptionCls = new Parse.Query('contracts_Users');
const exUser = await subcriptionCls.get(extUserId, { useMasterKey: true });
if (exUser) {
const subscriptionCls = new Parse.Query('contracts_Subscriptions');
subscriptionCls.equalTo('TenantId', {
__type: 'Pointer',
className: 'partners_Tenant',
objectId: exUser.get('TenantId').id,
});
subscriptionCls.descending('createdAt');
const subcripitions = await subscriptionCls.first({ useMasterKey: true });
if (subcripitions) {
const _subcripitions = JSON.parse(JSON.stringify(subcripitions));
return { status: 'success', result: _subcripitions };
const extUserId = request.params.extUserId || '';
const contactId = request.params.contactId || '';
if (extUserId) {
try {
const userRes = await axios.get(serverUrl + '/users/me', {
headers: {
'X-Parse-Application-Id': appId,
'X-Parse-Session-Token': request.headers['sessiontoken'],
},
});
const userId = userRes.data && userRes.data.objectId;
if (userId) {
const extCls = new Parse.Query('contracts_Users');
const exUser = await extCls.get(extUserId, { useMasterKey: true });
if (exUser) {
const subscriptionCls = new Parse.Query('contracts_Subscriptions');
subscriptionCls.equalTo('TenantId', {
__type: 'Pointer',
className: 'partners_Tenant',
objectId: exUser.get('TenantId').id,
});
subscriptionCls.descending('createdAt');
const subcripitions = await subscriptionCls.first({ useMasterKey: true });
if (subcripitions) {
const _subcripitions = JSON.parse(JSON.stringify(subcripitions));
return { status: 'success', result: _subcripitions };
} else {
return { status: 'success', result: {} };
}
} else {
return { status: 'success', result: {} };
return { status: 'error', result: 'User not found!' };
}
} else {
return { status: 'error', result: 'User not found!' };
return { status: 'error', result: 'Invalid session token!' };
}
} else {
return { status: 'error', result: 'Invalid session token!' };
} catch (err) {
console.log('Err in get subscription', err.message);
return { status: 'error', result: err.message };
}
} catch (err) {
console.log('Err in get subscription', err.message);
return { status: 'error', result: err.message };
} else if (contactId) {
try {
const userRes = await axios.get(serverUrl + '/users/me', {
headers: {
'X-Parse-Application-Id': appId,
'X-Parse-Session-Token': request.headers['sessiontoken'],
},
});
const userId = userRes.data && userRes.data.objectId;
if (userId) {
const contactCls = new Parse.Query('contracts_Contactbook');
const contactUser = await contactCls.get(contactId, { useMasterKey: true });
if (contactUser) {
const subscriptionCls = new Parse.Query('contracts_Subscriptions');
subscriptionCls.equalTo('TenantId', {
__type: 'Pointer',
className: 'partners_Tenant',
objectId: contactUser.get('TenantId').id,
});
subscriptionCls.descending('createdAt');
const subcripitions = await subscriptionCls.first({ useMasterKey: true });
if (subcripitions) {
const _subcripitions = JSON.parse(JSON.stringify(subcripitions));
if (_subcripitions.PlanCode === 'freeplan') {
return { status: 'success', result: { isSubscribed: false, plan: 'freeplan' } };
} else if (_subcripitions?.Next_billing_date?.iso) {
if (new Date(_subcripitions.Next_billing_date.iso) > new Date()) {
return { status: 'success', result: { isSubscribed: true } };
} else {
return { status: 'success', result: { isSubscribed: false } };
}
} else {
return { status: 'success', result: { isSubscribed: false } };
}
} else {
return { status: 'success', result: { isSubscribed: false } };
}
} else {
return { status: 'error', result: 'User not found!' };
}
} else {
return { status: 'error', result: 'Invalid session token!' };
}
} catch (err) {
console.log('Err in get subscription2', err.message);
return { status: 'error', result: err.message };
}
} else {
return { status: 'error', result: 'Invalid session token!' };
}
}