From 5b85d5b277e140c5e725c4899a9a7c50635a9a1c Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Tue, 16 Apr 2024 15:57:37 +0530 Subject: [PATCH] refactor: update extrainfo of user --- apps/OpenSign/src/constant/Utils.js | 2 +- apps/OpenSign/src/pages/Pgsignup.js | 56 ++----- .../cloud/customRoute/saveSubscription.js | 8 +- apps/OpenSignServer/cloud/main.js | 2 + .../cloud/parsefunction/SubscribeFree.js | 6 +- .../cloud/parsefunction/ZohoDetails.js | 7 +- .../cloud/parsefunction/saveSubscription.js | 77 ++++++++++ .../cloud/parsefunction/usersignup.js | 144 ++++++++++-------- 8 files changed, 188 insertions(+), 114 deletions(-) create mode 100644 apps/OpenSignServer/cloud/parsefunction/saveSubscription.js diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index 599370ff5..526a6c578 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -26,7 +26,7 @@ export async function fetchSubscription() { }; const params = { extUserId: jsonSender[0].objectId }; const tenatRes = await axios.post(url, params, { headers: headers }); - const plan = tenatRes.data?.result?.result?.PlanName; + const plan = tenatRes.data?.result?.result?.PlanCode; const billingDate = tenatRes.data?.result?.result?.Next_billing_date?.iso; return { plan, billingDate }; } catch (err) { diff --git a/apps/OpenSign/src/pages/Pgsignup.js b/apps/OpenSign/src/pages/Pgsignup.js index f34cf9d7b..f0310adce 100644 --- a/apps/OpenSign/src/pages/Pgsignup.js +++ b/apps/OpenSign/src/pages/Pgsignup.js @@ -41,12 +41,8 @@ const PgSignUp = () => { const url = window.location.href; let paramString = url.split("?")[1]; let queryString = new URLSearchParams(paramString); - // console.log("url ", queryString); - let obj = { ...formData }; for (let pair of queryString.entries()) { - // console.log("Key is: " + pair[0]); - // console.log("Value is: " + pair[1]); obj = { ...obj, [pair[0]]: pair[1] }; } const zohoRes = await axios.post( @@ -61,34 +57,27 @@ const PgSignUp = () => { } } ); - // console.log("zohoRes ", zohoRes); const userSettings = JSON.parse(localStorage.getItem("userSettings")); - const extClass = userSettings[0].extended_class; - // console.log("extClass ", extClass); - const params = { email: userDetails.email }; - const res = await Parse.Cloud.run("getUserDetails", params); - // console.log("res", res); - if (res) { - const updateQuery = new Parse.Object(extClass); - updateQuery.id = res.id; - updateQuery.set( - "Next_billing_date", - new Date(zohoRes.data.result.nextBillingDate) - ); - updateQuery.set("Plan", zohoRes.data.result.plan); - updateQuery.set("Customer_id", zohoRes.data.result.customer_id); - updateQuery.set( - "Subscription_id", - zohoRes.data.result.subscription_id - ); - const updateRes = await updateQuery.save(); - if (updateRes) { + const params = { subscription: zohoRes.data.result.subscription }; + const baseurl = `${parseBaseUrl}functions/savesubscription`; + try { + const res = await axios.post(baseurl, params, { + headers: { + "Content-Type": "application/json", + "X-Parse-Application-Id": parseAppId, + sessiontoken: localStorage.getItem("accesstoken") + } + }); + if (res) { localStorage.removeItem("userDetails"); navigate( "/" + userSettings[0].pageType + "/" + userSettings[0].pageId ); setIsLoader(false); } + } catch (err) { + console.log("err ", err.message); + setIsLoader(false); } } catch (err) { console.log("err ", err); @@ -108,12 +97,8 @@ const PgSignUp = () => { const url = window.location.href; let paramString = url.split("?")[1]; let queryString = new URLSearchParams(paramString); - // console.log("url ", queryString); - let obj = { ...formData }; for (let pair of queryString.entries()) { - // console.log("Key is: " + pair[0]); - // console.log("Value is: " + pair[1]); obj = { ...obj, [pair[0]]: pair[1] }; } saveUser(obj); @@ -157,19 +142,8 @@ const PgSignUp = () => { email: zohoRes.data.result.email, phone: zohoRes.data.result.phone, role: obj.role - // "pincode": "", - // "address": "", - // "country": "", - // "state": "", - // "city": "" }, - - planDetails: { - plan: zohoRes.data.result.plan || {}, - nextBillingDate: zohoRes.data.result.nextBillingDate || "", - customer_id: zohoRes.data.result.customer_id || "", - subscription_id: zohoRes.data.result.subscription_id || "" - } + subscription: zohoRes.data.result.subscription }; const usersignup = await Parse.Cloud.run("usersignup", params); // console.log("usersignup ", usersignup); diff --git a/apps/OpenSignServer/cloud/customRoute/saveSubscription.js b/apps/OpenSignServer/cloud/customRoute/saveSubscription.js index ecf07c4a6..dfdca0c2b 100644 --- a/apps/OpenSignServer/cloud/customRoute/saveSubscription.js +++ b/apps/OpenSignServer/cloud/customRoute/saveSubscription.js @@ -3,7 +3,8 @@ export default async function saveSubscription(request, response) { const body = request.body; const Email = request.body.data.subscription.customer.email; const Next_billing_date = request.body.data.subscription.next_billing_at; - const planName = request.body.data.subscription.plan.name; + const planCode = request.body.data.subscription.plan.plan_code + try { const extUserCls = new Parse.Query('contracts_Users'); extUserCls.equalTo('Email', Email); @@ -19,9 +20,10 @@ export default async function saveSubscription(request, response) { if (subscription) { const updateSubscription = new Parse.Object('contracts_Subscriptions'); updateSubscription.id = subscription.id; + updateSubscription.set('SubscriptionId', SubscriptionId); updateSubscription.set('SubscriptionDetails', body); updateSubscription.set('Next_billing_date', new Date(Next_billing_date)); - updateSubscription.set('PlanName', planName); + updateSubscription.set('PlanCode', planCode); await updateSubscription.save(null, { useMasterKey: true }); return response.status(200).json({ status: 'update subscription!' }); } else { @@ -44,7 +46,7 @@ export default async function saveSubscription(request, response) { objectId: extUser.get('TenantId').id, }); createSubscription.set('Next_billing_date', new Date(Next_billing_date)); - createSubscription.set('PlanName', planName); + createSubscription.set('PlanCode', planCode); await createSubscription.save(null, { useMasterKey: true }); return response.status(200).json({ status: 'create subscription!' }); } diff --git a/apps/OpenSignServer/cloud/main.js b/apps/OpenSignServer/cloud/main.js index e41d57319..1833e2d30 100644 --- a/apps/OpenSignServer/cloud/main.js +++ b/apps/OpenSignServer/cloud/main.js @@ -33,6 +33,7 @@ import getInvoices from './parsefunction/getInvoices.js'; import getPayments from './parsefunction/getPayments.js'; import getSubscriptions from './parsefunction/getSubscriptions.js'; import TenantAterFind from './parsefunction/TenantAfterFind.js'; +import saveSubscriptio from './parsefunction/saveSubscription.js'; Parse.Cloud.define('AddUserToRole', addUserToGroups); Parse.Cloud.define('UserGroups', getUserGroups); @@ -69,3 +70,4 @@ Parse.Cloud.afterFind('contracts_Document', DocumentBeforeFind); Parse.Cloud.afterFind('contracts_Template', TemplateAfterFind); Parse.Cloud.afterFind('contracts_Signature', SignatureAfterFind); Parse.Cloud.afterFind('partners_Tenant', TenantAterFind); +Parse.Cloud.define('savesubscription', saveSubscriptio); diff --git a/apps/OpenSignServer/cloud/parsefunction/SubscribeFree.js b/apps/OpenSignServer/cloud/parsefunction/SubscribeFree.js index a51f40ebb..4b0e53956 100644 --- a/apps/OpenSignServer/cloud/parsefunction/SubscribeFree.js +++ b/apps/OpenSignServer/cloud/parsefunction/SubscribeFree.js @@ -14,13 +14,13 @@ export default async function SubscribeFree(request) { }); subscriptionCls.descending('createdAt'); const subcripitions = await subscriptionCls.first({ useMasterKey: true }); - if (subcripitions?.get('PlanName') === 'freeplan') { + if (subcripitions?.get('PlanCode') === 'freeplan') { return { status: 'success', result: 'already subscribed!' }; } else if (subcripitions?.get('Next_billing_date') < new Date()) { try { const updateSubscription = new Parse.Object('contracts_Subscriptions'); updateSubscription.id = subcripitions.id; - updateSubscription.set('PlanName', 'freeplan'); + updateSubscription.set('PlanCode', 'freeplan'); await updateSubscription.save(null, { useMasterKey: true }); return { status: 'success', result: 'subscribed!' }; } catch (err) { @@ -32,7 +32,7 @@ export default async function SubscribeFree(request) { } else { try { const createSubscription = new Parse.Object('contracts_Subscriptions'); - createSubscription.set('PlanName', 'freeplan'); + createSubscription.set('PlanCode', 'freeplan'); createSubscription.set('ExtUserPtr', { __type: 'Pointer', className: 'contracts_Users', diff --git a/apps/OpenSignServer/cloud/parsefunction/ZohoDetails.js b/apps/OpenSignServer/cloud/parsefunction/ZohoDetails.js index bdc6b974f..f8ec7fb17 100644 --- a/apps/OpenSignServer/cloud/parsefunction/ZohoDetails.js +++ b/apps/OpenSignServer/cloud/parsefunction/ZohoDetails.js @@ -30,15 +30,9 @@ export default async function ZohoDetails(request) { headers: { Authorization: 'Zoho-oauthtoken ' + res.data.access_token, 'X-com-zoho-subscriptions-organizationid': process.env.ZOHO_BILLING_ORG_ID, - // 'X-com-zoho-billing-organizationid': process.env.ZOHO_BILLING_ORG_ID, }, }); - // console.log( - // "userData.data.data.subscription.contactpersons ", - // userData.data.data.subscription.contactpersons - // ); - // console.log("userData.data.expiring_time ", userData.data.expiring_time); const first_name = userData.data.data.subscription.contactpersons[0].first_name || ''; const last_name = userData.data.data.subscription.contactpersons[0].last_name || ''; const company_name = @@ -59,6 +53,7 @@ export default async function ZohoDetails(request) { customer_id: userData.data.data.subscription.customer_id, subscription_id: userData.data.data.subscription.subscription_id, jobTitle: jobTitle, + subscription: userData.data, }; return resData; } diff --git a/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js b/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js new file mode 100644 index 000000000..9b1e262f6 --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js @@ -0,0 +1,77 @@ +import axios from 'axios'; +export default async function saveSubscriptio(request) { + const serverUrl = process.env.SERVER_URL; + const appId = process.env.APP_ID; + const subscription = request.params.subscription; + const SubscriptionId = subscription.data.subscription.subscription_id; + const body = subscription; + const Next_billing_date = subscription.data.subscription.next_billing_at; + const planCode = subscription.data.subscription.plan.plan_code; + + try { + const userRes = await axios.get(serverUrl + '/users/me', { + headers: { + 'X-Parse-Application-Id': appId, + 'X-Parse-Session-Token': request.headers['sessiontoken'], + }, + }); + if (userRes.data && userRes.data.objectId) { + const extUserCls = new Parse.Query('contracts_Users'); + extUserCls.equalTo('UserId', { + __type: 'Pointer', + className: '_User', + objectId: userRes.data.objectId, + }); + const extUser = await extUserCls.first({ useMasterKey: true }); + if (extUser) { + const subcriptionCls = new Parse.Query('contracts_Subscriptions'); + subcriptionCls.equalTo('TenantId', { + __type: 'Pointer', + className: 'partners_Tenant', + objectId: extUser.get('TenantId').id, + }); + const subscription = await subcriptionCls.first({ useMasterKey: true }); + if (subscription) { + const updateSubscription = new Parse.Object('contracts_Subscriptions'); + updateSubscription.id = subscription.id; + updateSubscription.set('SubscriptionId', SubscriptionId); + updateSubscription.set('SubscriptionDetails', body); + updateSubscription.set('Next_billing_date', new Date(Next_billing_date)); + updateSubscription.set('PlanCode', planCode); + await updateSubscription.save(null, { useMasterKey: true }); + return { status: 'update subscription!' }; + } else { + const createSubscription = new Parse.Object('contracts_Subscriptions'); + createSubscription.set('SubscriptionId', SubscriptionId); + createSubscription.set('SubscriptionDetails', body); + createSubscription.set('ExtUserPtr', { + __type: 'Pointer', + className: 'contracts_Users', + objectId: extUser.id, + }); + createSubscription.set('CreatedBy', { + __type: 'Pointer', + className: '_User', + objectId: extUser.get('UserId').id, + }); + createSubscription.set('TenantId', { + __type: 'Pointer', + className: 'partners_Tenant', + objectId: extUser.get('TenantId').id, + }); + createSubscription.set('Next_billing_date', new Date(Next_billing_date)); + createSubscription.set('PlanCode', planCode); + await createSubscription.save(null, { useMasterKey: true }); + return { status: 'create subscription!' }; + } + } else { + return { status: 'user not found!' }; + } + } else { + return { status: 'user not found!' }; + } + } catch (err) { + console.log('Err in save subscription', err); + throw new Error(err.message); + } +} diff --git a/apps/OpenSignServer/cloud/parsefunction/usersignup.js b/apps/OpenSignServer/cloud/parsefunction/usersignup.js index 09f0c0227..9eebdc2e7 100644 --- a/apps/OpenSignServer/cloud/parsefunction/usersignup.js +++ b/apps/OpenSignServer/cloud/parsefunction/usersignup.js @@ -1,22 +1,22 @@ -import axios from "axios"; +import axios from 'axios'; const serverUrl = process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; async function saveUser(userDetails) { const userQuery = new Parse.Query(Parse.User); - userQuery.equalTo("username", userDetails.email); + userQuery.equalTo('username', userDetails.email); const userRes = await userQuery.first({ useMasterKey: true }); if (userRes) { const url = `${serverUrl}/loginAs`; const axiosRes = await axios({ - method: "POST", + method: 'POST', url: url, headers: { - "Content-Type": "application/json;charset=utf-8", - "X-Parse-Application-Id": APPID, - "X-Parse-Master-Key": masterKEY, + 'Content-Type': 'application/json;charset=utf-8', + 'X-Parse-Application-Id': APPID, + 'X-Parse-Master-Key': masterKEY, }, params: { userId: userRes.id, @@ -27,39 +27,39 @@ async function saveUser(userDetails) { return { id: login.objectId, sessionToken: login.sessionToken }; } else { const user = new Parse.User(); - user.set("username", userDetails.email); - user.set("password", userDetails.password); - user.set("email", userDetails.email); - user.set("phone", userDetails.phone); - user.set("name", userDetails.name); + user.set('username', userDetails.email); + user.set('password', userDetails.password); + user.set('email', userDetails.email); + user.set('phone', userDetails.phone); + user.set('name', userDetails.name); const res = await user.signUp(); // console.log("res ", res); return { id: res.id, sessionToken: res.getSessionToken() }; } } -export default async function (request) { +export default async function usersignup(request) { const userDetails = request.params.userDetails; - const planDetails = request.params.planDetails; + const subscription = request.params.subscription; const user = await saveUser(userDetails); try { - const extClass = userDetails.role.split("_")[0]; + const extClass = userDetails.role.split('_')[0]; - const extQuery = new Parse.Query(extClass + "_Users"); - extQuery.equalTo("UserId", { - __type: "Pointer", - className: "_User", + const extQuery = new Parse.Query(extClass + '_Users'); + extQuery.equalTo('UserId', { + __type: 'Pointer', + className: '_User', objectId: user.id, }); const extUser = await extQuery.first({ useMasterKey: true }); if (extUser) { - return { message: "User already exist" }; + return { message: 'User already exist' }; } else { const roleurl = `${serverUrl}/functions/AddUserToRole`; const headers = { - "Content-Type": "application/json", - "X-Parse-Application-Id": APPID, + 'Content-Type': 'application/json', + 'X-Parse-Application-Id': APPID, sessionToken: user.sessionToken, //localStorage.getItem("accesstoken"), }; let body = { @@ -69,74 +69,98 @@ export default async function (request) { }; let role = await axios.post(roleurl, body, { headers: headers }); // console.log("role ", role); - const partnerCls = Parse.Object.extend("partners_Tenant"); + const partnerCls = Parse.Object.extend('partners_Tenant'); const partnerQuery = new partnerCls(); - partnerQuery.set("UserId", { - __type: "Pointer", - className: "_User", + partnerQuery.set('UserId', { + __type: 'Pointer', + className: '_User', objectId: user.id, }); - partnerQuery.set("ContactNumber", userDetails.phone); - partnerQuery.set("TenantName", userDetails.name); - partnerQuery.set("EmailAddress", userDetails.email); - partnerQuery.set("IsActive", true); - partnerQuery.set("CreatedBy", { - __type: "Pointer", - className: "_User", + partnerQuery.set('ContactNumber', userDetails.phone); + partnerQuery.set('TenantName', userDetails.name); + partnerQuery.set('EmailAddress', userDetails.email); + partnerQuery.set('IsActive', true); + partnerQuery.set('CreatedBy', { + __type: 'Pointer', + className: '_User', objectId: user.id, }); if (userDetails && userDetails.pincode) { - partnerQuery.set("PinCode", userDetails.pincode); + partnerQuery.set('PinCode', userDetails.pincode); } if (userDetails && userDetails.country) { - partnerQuery.set("Country", userDetails.country); + partnerQuery.set('Country', userDetails.country); } if (userDetails && userDetails.state) { - partnerQuery.set("State", userDetails.state); + partnerQuery.set('State', userDetails.state); } if (userDetails && userDetails.city) { - partnerQuery.set("City", userDetails.city); + partnerQuery.set('City', userDetails.city); } if (userDetails && userDetails.address) { - partnerQuery.set("Address", userDetails.address); + partnerQuery.set('Address', userDetails.address); } const tenantRes = await partnerQuery.save(null, { useMasterKey: true }); // console.log("tenantRes ", tenantRes); - const extCls = Parse.Object.extend(extClass + "_Users"); + const extCls = Parse.Object.extend(extClass + '_Users'); const newObj = new extCls(); - newObj.set("UserId", { - __type: "Pointer", - className: "_User", + newObj.set('UserId', { + __type: 'Pointer', + className: '_User', objectId: user.id, }); - newObj.set("UserRole", userDetails.role); - newObj.set("Email", userDetails.email); - newObj.set("Name", userDetails.name); - newObj.set("Phone", userDetails.phone); - newObj.set("TenantId", { - __type: "Pointer", - className: "partners_Tenant", + newObj.set('UserRole', userDetails.role); + newObj.set('Email', userDetails.email); + newObj.set('Name', userDetails.name); + newObj.set('Phone', userDetails.phone); + newObj.set('TenantId', { + __type: 'Pointer', + className: 'partners_Tenant', objectId: tenantRes.id, }); if (userDetails && userDetails.company) { - newObj.set("Company", userDetails.company); + newObj.set('Company', userDetails.company); } if (userDetails && userDetails.jobTitle) { - newObj.set("JobTitle", userDetails.jobTitle); + newObj.set('JobTitle', userDetails.jobTitle); } - if (planDetails && planDetails.customer_id) { - newObj.set("Next_billing_date", new Date(planDetails.nextBillingDate)); - newObj.set("Plan", planDetails.plan); - newObj.set("Customer_id", planDetails.customer_id); - newObj.set("Subscription_id", planDetails.subscription_id); - } - const extRes = await newObj.save(null, { useMasterKey: true }); - - return { message: "User sign up", sessionToken: user.sessionToken }; + await saveSubscription(extRes.id, user.id, tenantRes.id, subscription); + return { message: 'User sign up', sessionToken: user.sessionToken }; } } catch (err) { - console.log("Err ", err); + console.log('Err ', err); + } +} + +async function saveSubscription(extUserId, UserId, tenantId, subscription) { + const SubscriptionId = subscription?.data?.subscription?.subscription_id || ''; + const Next_billing_date = subscription?.data?.subscription?.next_billing_at || ''; + const planCode = subscription?.data?.subscription?.plan?.plan_code || ''; + try { + const createSubscription = new Parse.Object('contracts_Subscriptions'); + createSubscription.set('SubscriptionId', SubscriptionId); + createSubscription.set('SubscriptionDetails', subscription); + createSubscription.set('ExtUserPtr', { + __type: 'Pointer', + className: 'contracts_Users', + objectId: extUserId, + }); + createSubscription.set('CreatedBy', { + __type: 'Pointer', + className: '_User', + objectId: UserId, + }); + createSubscription.set('TenantId', { + __type: 'Pointer', + className: 'partners_Tenant', + objectId: tenantId, + }); + createSubscription.set('Next_billing_date', new Date(Next_billing_date)); + createSubscription.set('PlanCode', planCode); + await createSubscription.save(null, { useMasterKey: true }); + } catch (err) { + console.log('err in save subscription pgsignup', err); } }