From 9500b2d6787e61c5f49369d97d3405d7bf32744a Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Mon, 15 Jan 2024 20:22:07 +0530 Subject: [PATCH] update apis response and add delete document api --- .../cloud/customRoute/v1/apiV1.js | 11 +- .../customRoute/v1/routes/createContact.js | 15 ++- .../customRoute/v1/routes/createDocument.js | 5 +- .../customRoute/v1/routes/createTemplate.js | 7 +- .../customRoute/v1/routes/deleteContact.js | 5 +- .../customRoute/v1/routes/deleteDocument.js | 45 +++++++ .../customRoute/v1/routes/deleteTemplate.js | 5 +- .../cloud/customRoute/v1/routes/getContact.js | 7 +- .../customRoute/v1/routes/getContactList.js | 11 +- .../customRoute/v1/routes/getDocument.js | 16 ++- .../customRoute/v1/routes/getDocumentList.js | 25 ++-- .../customRoute/v1/routes/getTemplate.js | 26 +++- .../customRoute/v1/routes/getTemplateList.js | 26 ++-- .../cloud/customRoute/v1/routes/getUser.js | 17 ++- .../customRoute/v1/routes/updateDocument.js | 117 +++++++++--------- .../customRoute/v1/routes/updateTemplate.js | 4 +- 16 files changed, 224 insertions(+), 118 deletions(-) create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/deleteDocument.js diff --git a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js index 3b3b2cfe5..ba6340f9b 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js @@ -18,6 +18,8 @@ import updateTemplate from './routes/updateTemplate.js'; import createContact from './routes/createContact.js'; import multer from 'multer'; import fs from 'node:fs'; +import updateDocument from './routes/updateDocument.js'; +import deleteDocument from './routes/deleteDocument.js'; dotenv.config(); const storage = multer.memoryStorage(); @@ -45,12 +47,15 @@ app.get('/contactlist', getContactList); // create Document app.post('/createdocument', createDocument); -// get template on the basis of id -app.put('/template/:document_id', updateTemplate); - // get Document on the basis of id app.get('/document/:document_id', getDocument); +// get document on the basis of id +app.put('/document/:document_id', updateDocument); + +// get document on the basis of id +app.delete('/document/:document_id', deleteDocument); + // get all types of documents on the basis of doctype app.get('/documentlist/:doctype', getDocumentList); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createContact.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createContact.js index a6187afc9..b335f4889 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createContact.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createContact.js @@ -110,10 +110,17 @@ export default async function createContact(request, response) { contactQuery.setACL(acl); const contactRes = await contactQuery.save(); - return response.json({ - message: 'Contact created sucessfully!', - result: { objectId: contactRes.id }, - }); + if (contactRes) { + const parseRes = JSON.parse(JSON.stringify(contactRes)); + return response.json({ + objectId: parseRes.objectId, + Name: parseRes.Name, + Email: parseRes.Email, + Phone: parseRes.Phone, + createdAt: parseRes.createdAt, + updateAt: parseRes.updateAt, + }); + } // const parseData = JSON.parse(JSON.stringify(res)); } } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js index e36f3ac0f..af2deae8b 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js @@ -45,10 +45,7 @@ export default async function createDocument(request, response) { object.set('Folder', folderPtr); } const res = await object.save(null, { useMasterKey: true }); - return response.json({ - message: 'Document created successfully!', - result: { objectId: res.id, url: url }, - }); + return response.json({ objectId: res.id, url: url }); } else { return response.status(405).json({ error: 'Invalid API Token!' }); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js index eae3cb92c..381e85489 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js @@ -9,7 +9,7 @@ export default async function createTemplate(request, response) { try { const reqToken = request.headers['x-api-token']; if (!reqToken) { - return response.status(400).json({ error: 'Please Provide API Token' }); + return response.status(400).json({ error: 'Please Provide API Token' }); } const tokenQuery = new Parse.Query('appToken'); tokenQuery.equalTo('token', reqToken); @@ -44,10 +44,7 @@ export default async function createTemplate(request, response) { object.set('Folder', folderPtr); } const res = await object.save(null, { useMasterKey: true }); - return response.json({ - message: 'Template created successfully!', - result: { id: res.id, url: url }, - }); + return response.json({ objectId: res.id, url: url }); } else { return response.status(405).json({ error: 'Invalid API Token!' }); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteContact.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteContact.js index e40c25114..e0997f160 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteContact.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteContact.js @@ -26,7 +26,10 @@ export default async function deleteContact(request, response) { deleteQuery.set('IsDeleted', true); const deleteRes = await deleteQuery.save(null, { useMasterKey: true }); if (deleteRes) { - return response.json({ message: 'Contact deleted successfully!' }); + return response.json({ + objectId: request.params.contact_id, + deletedAt: deleteRes.get('updatedAt'), + }); } } } else { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteDocument.js new file mode 100644 index 000000000..d3faa0c9d --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteDocument.js @@ -0,0 +1,45 @@ +export default async function deleteDocument(request, response) { + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.status(400).json({ error: 'Please Provide API Token' }); + } + const tokenQuery = new Parse.Query('appToken'); + tokenQuery.equalTo('token', reqToken); + const token = await tokenQuery.first({ useMasterKey: true }); + if (token !== undefined) { + // Valid Token then proceed request + const id = token.get('Id'); + const userId = { __type: 'Pointer', className: '_User', objectId: id }; + const Document = new Parse.Query('contracts_Document'); + Document.equalTo('objectId', request.params.document_id); + Document.equalTo('CreatedBy', userId); + const res = await Document.first({ useMasterKey: true }); + if (res) { + const isArchive = res.get('IsArchive'); + if (isArchive && isArchive) { + return response.status(404).json({ error: 'Document not found!' }); + } else { + const Document = Parse.Object.extend('contracts_Document'); + const deleteQuery = new Document(); + deleteQuery.id = request.params.document_id; + deleteQuery.set('IsArchive', true); + const deleteRes = await deleteQuery.save(null, { useMasterKey: true }); + if (deleteRes) { + return response.json({ + objectId: request.params.document_id, + deletedAt: deleteRes.get('updatedAt'), + }); + } + } + } else { + return response.status(404).json({ error: 'Document not found!' }); + } + } else { + return response.status(405).json({ error: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err ', err); + return response.json(err); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteTemplate.js index 953f8c6e1..f8e1c5ade 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteTemplate.js @@ -26,7 +26,10 @@ export default async function deletedTemplate(request, response) { deleteQuery.set('IsArchive', true); const deleteRes = await deleteQuery.save(null, { useMasterKey: true }); if (deleteRes) { - return response.json({ message: 'Template deleted successfully!' }); + return response.json({ + objectId: request.params.template_id, + deletedAt: deleteRes.get('updatedAt'), + }); } } } else { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getContact.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getContact.js index d57d8dae2..e0438036a 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getContact.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getContact.js @@ -21,7 +21,12 @@ export default async function getContact(request, response) { if (res) { const parseRes = JSON.parse(JSON.stringify(res)); return response.json({ - result: { objectId: parseRes.objectId, Name: parseRes.Name, Email: parseRes.Email }, + objectId: parseRes.objectId, + Name: parseRes.Name, + Email: parseRes.Email, + Phone: parseRes.Phone, + createdAt: parseRes.createdAt, + updatedAt: parseRes.updatedAt, }); } else { return response.status(404).json({ error: 'Contact not found!' }); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getContactList.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getContactList.js index 707092da3..93a28b757 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getContactList.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getContactList.js @@ -20,7 +20,16 @@ export default async function getContactList(request, response) { Contactbook.skip(skip); const res = await Contactbook.find({ useMasterKey: true }); if (res && res.length > 0) { - return response.json({ result: res }); + const parseRes = JSON.parse(JSON.stringify(res)); + const contactlist = parseRes.map(x => ({ + objectId: x.objectId, + Name: x.Name, + Email: x.Email, + Phone: x.Phone, + createdAt: x.createdAt, + updatedAt: x.updatedAt, + })); + return response.json({ result: contactlist }); } else { return response.json({ result: [] }); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js index 533454ef3..0417dd354 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js @@ -15,9 +15,23 @@ export default async function getDocument(request, response) { Document.equalTo('objectId', request.params.document_id); Document.equalTo('CreatedBy', userId); Document.notEqualTo('IsArchive', true); + Document.include('Signers'); + Document.include('Folder'); + Document.include('ExtUserPtr'); const res = await Document.first({ useMasterKey: true }); if (res) { - return response.json({ result: res }); + const document = JSON.parse(JSON.stringify(res)); + return response.json({ + objectId: document.objectId, + Title: document.Name, + Note: document.Note || '', + Folder: document?.Folder?.Name || 'OpenSign™ Drive', + File: document?.SignedUrl || document.URL, + Owner: document?.ExtUserPtr?.Name, + Signers: document?.Signers?.map(y => y?.Name) || '', + createdAt: document.createdAt, + updatedAt: document.updatedAt, + }); } else { return response.status(404).json({ error: 'Document not found!' }); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js index 1ae887158..3ef4d338c 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js @@ -56,19 +56,18 @@ export default async function getDocumentList(request, response) { }; const url = `${serverUrl}/classes/${clsName}?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skip}&limit=${limit}&include=AuditTrail.UserPtr`; const res = await axios.get(url, { headers: headers }); - if (res.data && res.data.results) { - const updateRes = - res.data.results.length > 0 - ? res.data.results.map(x => ({ - objectId: x.objectId, - Title: x.Name, - Note: x.Note || '', - Folder: x?.Folder?.Name || 'OpenSign™ Drive', - File: x?.SignedUrl || x.URL, - Owner: x?.ExtUserPtr?.Name, - Signers: x?.Signers?.map(y => y?.Name) || '', - })) - : []; + if (res.data && res.data.results.length > 0) { + const updateRes = res.data.results.map(x => ({ + objectId: x.objectId, + title: x.Name, + note: x.Note || '', + folder: x?.Folder?.Name || 'OpenSign™ Drive', + file: x?.SignedUrl || x.URL, + owner: x?.ExtUserPtr?.Name, + signers: x?.Signers?.map(y => y?.Name) || '', + created_at: x.createdAt, + updated_at: x.updatedAt, + })); return response.json({ result: updateRes }); } else { return response.json({ result: [] }); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js index 9e7457d82..8a7b4ec79 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js @@ -11,13 +11,27 @@ export default async function getTemplate(request, response) { // Valid Token then proceed request const id = token.get('Id'); const userId = { __type: 'Pointer', className: '_User', objectId: id }; - const Document = new Parse.Query('contracts_Template'); - Document.equalTo('objectId', request.params.template_id); - Document.equalTo('CreatedBy', userId); - Document.notEqualTo('IsArchive', true); - const res = await Document.first({ useMasterKey: true }); + const Template = new Parse.Query('contracts_Template'); + Template.equalTo('objectId', request.params.template_id); + Template.equalTo('CreatedBy', userId); + Template.notEqualTo('IsArchive', true); + Template.include('Signers'); + Template.include('Folder'); + Template.include('ExtUserPtr'); + const res = await Template.first({ useMasterKey: true }); if (res) { - return response.json({ result: res }); + const template = JSON.parse(JSON.stringify(res)); + return response.json({ + objectId: template.objectId, + Title: template.Name, + Note: template.Note || '', + Folder: template?.Folder?.Name || 'OpenSign™ Drive', + File: template?.SignedUrl || x.URL, + Owner: template?.ExtUserPtr?.Name, + Signers: template?.Signers?.map(y => y?.Name) || '', + createdAt: template.createdAt, + updatedAt: template.updatedAt, + }); } else { return response.status(404).json({ error: 'Template not found!' }); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js index 2cbc319d9..d8e046853 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js @@ -48,19 +48,19 @@ export default async function getTemplatetList(request, response) { }; const url = `${serverUrl}/classes/${clsName}?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skip}&limit=${limit}&include=AuditTrail.UserPtr`; const res = await axios.get(url, { headers: headers }); - if (res.data && res.data.results) { - const updateRes = - res.data.results.length > 0 - ? res.data.results.map(x => ({ - objectId: x.objectId, - Title: x.Name, - Note: x.Note || '', - Folder: x?.Folder?.Name || 'OpenSign™ Drive', - File: x?.SignedUrl || x.URL, - Owner: x?.ExtUserPtr?.Name, - Signers: x?.Signers?.map(y => y?.Name) || '', - })) - : []; + if (res.data && res.data.results.length > 0) { + const updateRes = res.data.results.map(x => ({ + objectId: x.objectId, + Title: x.Name, + Note: x.Note || '', + Folder: x?.Folder?.Name || 'OpenSign™ Drive', + File: x?.SignedUrl || x.URL, + Owner: x?.ExtUserPtr?.Name, + Signers: x?.Signers?.map(y => y?.Name) || '', + createdAt: x.createdAt, + updatedAt: x.updatedAt, + })); + return response.json({ result: updateRes }); } else { return response.json({ result: [] }); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getUser.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getUser.js index 725a31109..20015f0b9 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getUser.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getUser.js @@ -15,10 +15,19 @@ export default async function getUser(request, response) { const query = new Parse.Query('contracts_Users'); query.equalTo('UserId', { __type: 'Pointer', className: '_User', objectId: userId }); query.exclude('IsContactEntry,TourStatus,UserRole,TenantId,UserId,CreatedBy,Plan'); - let user = await query.first({ useMasterKey: true }); - const result = user; - if (result) { - return response.json({ result: result }); + const user = await query.first({ useMasterKey: true }); + if (user) { + const parseRes = JSON.parse(JSON.stringify(user)); + return response.json({ + objectId: parseRes.objectId, + Name: parseRes.Name, + Email: parseRes.Email, + Phone: parseRes.Phone, + JobTitle: parseRes.JobTitle, + Company: parseRes.Company, + createdAt: parseRes.createdAt, + updateAt: parseRes.updateAt, + }); } else { return response.status(404).json({ error: 'User not found!' }); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js index cd475be77..c4dcf6279 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js @@ -1,68 +1,67 @@ export default async function updateDocument(request, response) { - try { - const reqToken = request.headers['x-api-token']; - if (!reqToken) { - return response.status(400).json({ error: 'Please Provide API Token' }); - } - const tokenQuery = new Parse.Query('appToken'); - tokenQuery.equalTo('token', reqToken); - const token = await tokenQuery.first({ useMasterKey: true }); - if (token !== undefined) { - // Valid Token then proceed request - const id = token.get('Id'); - const allowedKeys = ['Name', 'Note', 'Description']; - const objectKeys = Object.keys(request.body); - const isValid = objectKeys.every(key => allowedKeys.includes(key)) && objectKeys.length > 0; - if (isValid) { - const userId = { __type: 'Pointer', className: '_User', objectId: id }; - const document = new Parse.Query('contracts_Document'); - document.equalTo('objectId', request.params.document_id); - document.equalTo('CreatedBy', userId); - const res = await document.first({ useMasterKey: true }); - if (res) { - const isArchive = res.get('IsArchive'); - if (isArchive && isArchive) { - return response.status(404).json({ message: 'Document not found!' }); - } else { - 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?.Note) { - updateQuery.set('Note', request?.body?.Note); - } - if (request?.body?.Description) { - updateQuery.set('Name', request?.body?.Description); - } - if (request?.body?.FolderId) { - updateQuery.set('Folder', { - __type: 'Pointer', - className: 'contracts_Document', - objectId: request?.body?.FolderId, - }); - } - const updatedRes = await updateQuery.save(null, { useMasterKey: true }); - if (updatedRes) { - return response.json({ - message: 'Document updated successfully!', - result: { objectId: updatedRes.id }, - }); - } - } + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.status(400).json({ error: 'Please Provide API Token' }); + } + const tokenQuery = new Parse.Query('appToken'); + tokenQuery.equalTo('token', reqToken); + const token = await tokenQuery.first({ useMasterKey: true }); + if (token !== undefined) { + // Valid Token then proceed request + const id = token.get('Id'); + const allowedKeys = ['Name', 'Note', 'Description']; + const objectKeys = Object.keys(request.body); + const isValid = objectKeys.every(key => allowedKeys.includes(key)) && objectKeys.length > 0; + if (isValid) { + const userId = { __type: 'Pointer', className: '_User', objectId: id }; + const document = new Parse.Query('contracts_Document'); + document.equalTo('objectId', request.params.document_id); + document.equalTo('CreatedBy', userId); + const res = await document.first({ useMasterKey: true }); + if (res) { + const isArchive = res.get('IsArchive'); + if (isArchive && isArchive) { + return response.status(404).json({ message: 'Document not found!' }); } else { - return response.status(404).json({ error: 'Document not found!' }); + 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?.Note) { + updateQuery.set('Note', request?.body?.Note); + } + if (request?.body?.Description) { + updateQuery.set('Name', request?.body?.Description); + } + if (request?.body?.FolderId) { + updateQuery.set('Folder', { + __type: 'Pointer', + className: 'contracts_Document', + objectId: request?.body?.FolderId, + }); + } + const updatedRes = await updateQuery.save(null, { useMasterKey: true }); + if (updatedRes) { + return response.json({ + objectId: updatedRes.id, + updatedAt: updatedRes.get('updatedAt'), + }); + } } } else { - return response.status(400).json({ error: 'Please provide valid field names!' }); + return response.status(404).json({ error: 'Document not found!' }); } } else { - return response.status(405).json({ error: 'Invalid API Token!' }); + return response.status(400).json({ error: 'Please provide valid field names!' }); } - } catch (err) { - console.log('err ', err); - return response.json(err); + } else { + return response.status(405).json({ error: 'Invalid API Token!' }); } + } catch (err) { + console.log('err ', err); + return response.json(err); } - \ No newline at end of file +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js index bc654bcbc..072e07e12 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/updateTemplate.js @@ -46,8 +46,8 @@ export default async function updateTemplate(request, response) { const updatedRes = await updateQuery.save(null, { useMasterKey: true }); if (updatedRes) { return response.json({ - message: 'Template updated successfully!', - result: { objectId: updatedRes.id }, + objectId: updatedRes.id, + updatedAt: updatedRes.get('updatedAt'), }); } }