diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index 3ae07bac37..2ed415c833 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -1,9 +1,11 @@ const randomId = () => Math.floor(1000 + Math.random() * 9000); export default async function createDocumentWithTemplate(request, response) { - const signers = request.body.Signers; - const folderId = request.body.FolderId; + const signers = request.body.signers; + const folderId = request.body.folderId; const templateId = request.params.template_id; - const url = process.env.SERVER_URL; + const url = new URL(process.env.SERVER_URL); + let protocol = url.origin; + try { const reqToken = request.headers['x-api-token']; if (!reqToken) { @@ -40,31 +42,52 @@ export default async function createDocumentWithTemplate(request, response) { if (template?.Description) { object.set('Description', template.Description); } - if (template?.Signers) { - object.set('Signers', template?.Signers); - } - object.set('URL', template.URL); - object.set('CreatedBy', template.CreatedBy); - object.set('ExtUserPtr', template.ExtUserPtr); - if (signers) { - const placeholders = template?.Placeholders?.map(placeholder => { - let matchingSigner = signers.find(y => y.Role === placeholder.Role); - if (matchingSigner) { - return { - ...placeholder, - email: matchingSigner.Email, - signerObjId: '', - signerPtr: {}, - }; + let templateSigner = template?.Signers ? template?.Signers : []; + if (signers && signers.length > 0) { + let parseSigners; + if (base64File) { + parseSigners = signers; } else { - return { - ...placeholder, + parseSigners = JSON.parse(signers); + } + let createContactUrl = protocol + '/v1/createcontact'; + + let contact = []; + for (const obj of parseSigners) { + const body = { + name: obj?.name || '', + email: obj?.email || '', + phone: obj?.phone || '', }; + try { + const res = await axios.post(createContactUrl, body, { + headers: { 'Content-Type': 'application/json', 'x-api-token': reqToken }, + }); + // console.log('res ', res.data); + contact.push({ + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: res.data?.objectId, + }); + } catch (err) { + // console.log('err ', err.response); + if (err?.response?.data?.objectId) { + contact.push({ + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: err.response.data?.objectId, + }); + } + } } - }); - console.log('placeholders ', placeholders); - object.set('Placeholders', placeholders); + object.set('Signers', [...templateSigner, ...contact]); + } else { + object.set('Signers', templateSigner); } + + object.set('URL', template.URL); + object.set('CreatedBy', template.CreatedBy); + object.set('ExtUserPtr', template.ExtUserPtr); if (folderId) { object.set('Folder', folderPtr); } @@ -75,7 +98,10 @@ export default async function createDocumentWithTemplate(request, response) { newACL.setWriteAccess(userPtr.id, true); object.setACL(newACL); const res = await object.save(null, { useMasterKey: true }); - return response.json({ objectId: res.id, url: url }); + return response.json({ + objectId: res.id, + url: protocol + '/load/signmicroapp/placeholdersign/' + res.id, + }); } else { return response.status(400).json({ error: 'Please provide signers properly!' }); } @@ -95,4 +121,4 @@ export default async function createDocumentWithTemplate(request, response) { } return response.status(400).json({ error: 'Something went wrong!' }); } -} +} \ No newline at end of file diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js index c346015207..78c0549ec5 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js @@ -1,16 +1,18 @@ -// import batchQuery from './batchquery.js'; +import axios from 'axios'; // const randomId = () => Math.floor(1000 + Math.random() * 9000); export default async function createDocument(request, response) { - const name = request.body.Title; - const note = request.body.Note; - const description = request.body.Description; - const signers = request.body.Signers; - const folderId = request.body.FolderId; - const base64File = request.body.File; - const url = request?.get('host'); + const name = request.body.title; + const note = request.body.note; + const description = request.body.description; + const signers = request.body.signers; + const folderId = request.body.folderId; + const base64File = request.body.file; const fileData = request.files?.[0] ? request.files[0].buffer : null; // console.log('fileData ', fileData); + const url = new URL(process.env.SERVER_URL); + let protocol = url.origin; + try { const reqToken = request.headers['x-api-token']; if (!reqToken) { @@ -21,7 +23,7 @@ export default async function createDocument(request, response) { const token = await tokenQuery.first({ useMasterKey: true }); if (token !== undefined) { // Valid Token then proceed request - if (signers) { + if (signers && signers.length > 0) { const userPtr = token.get('userId'); let fileUrl; if (request.files?.[0]) { @@ -63,56 +65,44 @@ export default async function createDocument(request, response) { object.set('URL', fileUrl); object.set('CreatedBy', userPtr); object.set('ExtUserPtr', extUserPtr); - if (signers) { + if (signers && signers.length > 0) { let parseSigners; if (base64File) { parseSigners = signers; } else { parseSigners = JSON.parse(signers); } + let createContactUrl = protocol + '/v1/createcontact'; - const contactbook = new Parse.Query('contracts_Contactbook'); - contactbook.equalTo('UserId', userPtr); - contactbook.notEqualTo('IsDeleted', true); - contactbook.containedIn('Email', parseSigners); - const contactbookRes = await contactbook.find({ useMasterKey: true }); - // console.log('contactbookRes ', contactbookRes); - const parseContactbookRes = JSON.parse(JSON.stringify(contactbookRes)); - // console.log('userPtr ', userPtr); - // const newContacts = parseSigners - // .filter(x => !parseContactbookRes.some(y => y.Email === x)) - // .map(email => ({ - // method: 'POST', - // path: '/app/classes/contracts_Contactbook', - // body: { - // Email: email, - // CreatedBy: { __type: 'Pointer', className: '_User', objectId: userPtr.id }, - // UserId: { __type: 'Pointer', className: '_User', objectId: userPtr.id }, - // Role: 'contracts_Guest', - // IsDeleted: false, - // ACL: { - // [userPtr.id]: { read: true, write: true }, - // }, - // }, - // })); - // console.log('newContacts', newContacts); - let contactSigners = parseContactbookRes?.map(x => ({ - __type: 'Pointer', - className: 'contracts_Contactbook', - objectId: x.objectId, - })); - // if (newContacts.length > 0) { - // const batchRes = await batchQuery(newContacts); - // const contacts = batchRes?.map(x => ({ - // __type: 'Pointer', - // className: 'contracts_Contactbook', - // objectId: x.success.objectId, - // })); - // contactSigners = [...contactSigners, ...contacts]; - // } - // console.log('contactsigners', contactSigners); - - object.set('Signers', contactSigners); + let contact = []; + for (const obj of parseSigners) { + const body = { + name: obj?.name || '', + email: obj?.email || '', + phone: obj?.phone || '', + }; + try { + const res = await axios.post(createContactUrl, body, { + headers: { 'Content-Type': 'application/json', 'x-api-token': reqToken }, + }); + // console.log('res ', res.data); + contact.push({ + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: res.data?.objectId, + }); + } catch (err) { + // console.log('err ', err.response); + if (err?.response?.data?.objectId) { + contact.push({ + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: err.response.data?.objectId, + }); + } + } + } + object.set('Signers', contact); } if (folderId) { object.set('Folder', folderPtr); @@ -126,7 +116,7 @@ export default async function createDocument(request, response) { const res = await object.save(null, { useMasterKey: true }); return response.json({ objectId: res.id, - url: 'https://' + url + '/load/signmicroapp/placeholdersign/' + res.id, + url: protocol + '/load/signmicroapp/placeholdersign/' + res.id, }); } else { return response.status(400).json({ error: 'Please provide signers!' }); @@ -138,4 +128,4 @@ export default async function createDocument(request, response) { console.log('err ', err); return response.status(400).json({ error: 'Something went wrong!' }); } -} +} \ No newline at end of file diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js index ecd48381a1..cfc910e0e2 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js @@ -1,13 +1,15 @@ const randomId = () => Math.floor(1000 + Math.random() * 9000); export default async function createTemplate(request, response) { - const name = request.body?.Title; - const note = request.body?.Note; - const description = request.body?.Description; - const signers = request.body?.Signers; - const folderId = request.body?.FolderId; - const url = request?.get('host'); - const base64File = request.body.File; + const name = request.body?.title; + const note = request.body?.note; + const description = request.body?.description; + const signers = request.body?.signers; + const folderId = request.body?.folderId; + const base64File = request.body.file; const fileData = request.files?.[0] ? request.files[0].buffer : null; + const url = new URL(process.env.SERVER_URL); + let protocol = url.origin; + try { const reqToken = request.headers['x-api-token']; if (!reqToken) { @@ -52,30 +54,44 @@ export default async function createTemplate(request, response) { object.set('URL', fileUrl); object.set('CreatedBy', userPtr); object.set('ExtUserPtr', extUserPtr); - if (signers) { + if (signers && signers.length > 0) { let parseSigners; if (base64File) { parseSigners = signers; } else { parseSigners = JSON.parse(signers); } + let createContactUrl = protocol + '/v1/createcontact'; - const contactbook = new Parse.Query('contracts_Contactbook'); - contactbook.containedIn('Email', parseSigners); - contactbook.equalTo('UserId', userPtr); - contactbook.notEqualTo('IsDeleted', true); - const contactbookRes = await contactbook.find({ useMasterKey: true }); - // console.log('contactbookRes ', contactbookRes); - const parseContactbookRes = JSON.parse(JSON.stringify(contactbookRes)); - - object.set( - 'Signers', - parseContactbookRes?.map(x => ({ - __type: 'Pointer', - className: 'contracts_Contactbook', - objectId: x.objectId, - })) - ); + let contact = []; + for (const obj of parseSigners) { + const body = { + name: obj?.name || '', + email: obj?.email || '', + phone: obj?.phone || '', + }; + try { + const res = await axios.post(createContactUrl, body, { + headers: { 'Content-Type': 'application/json', 'x-api-token': reqToken }, + }); + // console.log('res ', res.data); + contact.push({ + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: res.data?.objectId, + }); + } catch (err) { + // console.log('err ', err.response); + if (err?.response?.data?.objectId) { + contact.push({ + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: err.response.data?.objectId, + }); + } + } + } + object.set('Signers', contact); } if (folderId) { object.set('Folder', folderPtr); @@ -89,7 +105,7 @@ export default async function createTemplate(request, response) { const res = await object.save(null, { useMasterKey: true }); return response.json({ objectId: res.id, - url: 'https://' + url + '/load/signmicroapp/template/' + res.id, + url: protocol + '/load/signmicroapp/template/' + res.id, }); } else { return response.status(405).json({ error: 'Invalid API Token!' }); @@ -98,4 +114,4 @@ export default async function createTemplate(request, response) { console.log('err ', err); return response.status(400).json({ error: 'Something went wrong, please try again later!' }); } -} +} \ No newline at end of file diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js index 2f0b76c536..2253afca8a 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js @@ -26,20 +26,20 @@ export default async function updateDocument(request, response) { const document = Parse.Object.extend('contracts_Document'); const updateQuery = new document(); updateQuery.id = request.params.document_id; - if (request?.body?.Name) { - updateQuery.set('Name', request?.body?.Name); + if (request?.body?.name) { + updateQuery.set('Name', request?.body?.name); } - if (request?.body?.Note) { - updateQuery.set('Note', request?.body?.Note); + if (request?.body?.note) { + updateQuery.set('Note', request?.body?.note); } - if (request?.body?.Description) { - updateQuery.set('Name', request?.body?.Description); + if (request?.body?.description) { + updateQuery.set('Name', request?.body?.description); } - if (request?.body?.FolderId) { + if (request?.body?.folderId) { updateQuery.set('Folder', { __type: 'Pointer', className: 'contracts_Document', - objectId: request?.body?.FolderId, + objectId: request?.body?.folderId, }); } const updatedRes = await updateQuery.save(null, { useMasterKey: true }); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js index d3445bcf50..b9cd47949a 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js @@ -26,20 +26,20 @@ export default async function updateTemplate(request, response) { const template = Parse.Object.extend('contracts_Template'); const updateQuery = new template(); updateQuery.id = request.params.template_id; - if (request?.body?.Name) { - updateQuery.set('Name', request?.body?.Name); + if (request?.body?.name) { + updateQuery.set('Name', request?.body?.name); } - if (request?.body?.Note) { - updateQuery.set('Note', request?.body?.Note); + if (request?.body?.note) { + updateQuery.set('Note', request?.body?.note); } - if (request?.body?.Description) { - updateQuery.set('Name', request?.body?.Description); + if (request?.body?.description) { + updateQuery.set('Name', request?.body?.description); } - if (request?.body?.FolderId) { + if (request?.body?.folderId) { updateQuery.set('Folder', { __type: 'Pointer', className: 'contracts_Template', - objectId: request?.body?.FolderId, + objectId: request?.body?.folderId, }); } const updatedRes = await updateQuery.save(null, { useMasterKey: true });