From 4866447f334bedca8485e98da312c93b0a6e6f65 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Tue, 12 Dec 2023 19:37:59 +0530 Subject: [PATCH] add api for template, createDocument --- .../cloud/customRoute/v1/apiV1.js | 21 +++++++ .../customRoute/v1/routes/createDocument.js | 55 ++++++++++++++++++ .../customRoute/v1/routes/createTemplate.js | 54 +++++++++++++++++ .../customRoute/v1/routes/deleteTemplate.js | 42 ++++++++++++++ .../customRoute/v1/routes/getTemplate.js | 31 ++++++++++ .../customRoute/v1/routes/getTemplateList.js | 58 +++++++++++++++++++ 6 files changed, 261 insertions(+) create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/deleteTemplate.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js diff --git a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js index 44adcae7a..794337cca 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js @@ -9,6 +9,11 @@ import getDocument from './routes/getDocument.js'; import getContact from './routes/getContact.js'; import deleteContact from './routes/deleteContact.js'; import getContactList from './routes/getContactList.js'; +import createDocument from './routes/createDocument.js'; +import createTemplate from './routes/createTemplate.js'; +import getTemplate from './routes/getTemplate.js'; +import deletedTemplate from './routes/deleteTemplate.js'; +import getTemplatetList from './routes/getTemplateList.js'; dotenv.config(); app.use(cors()); @@ -32,3 +37,19 @@ app.delete('/contact/:contact_id', deleteContact); // get list of contacts app.get('/contactlist', getContactList); + +// create Document +app.post('/createdocument', createDocument); + +// create Template +app.post('/createtemplate', createTemplate); + +// get template on the basis of id +app.get('/template/:template_id', getTemplate); + +// get template on the basis of id +app.delete('/template/:template_id', deletedTemplate); + +// get all types of documents on the basis of doctype +app.get('/templatelist', getTemplatetList); + diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js new file mode 100644 index 000000000..f1e499751 --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js @@ -0,0 +1,55 @@ +export default async function createDocument(request, response) { + const name = request.body.name; + const note = request.body.note; + const description = request.body.description; + const signers = request.body.signer; + const folderId = request.body.folderId; + const file = request.body.file; + + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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 contractsUser = new Parse.Query('contracts_Users'); + contractsUser.equalTo('UserId', userId); + const extUser = await contractsUser.first({ useMasterKey: true }); + const extUserPtr = { __type: 'Pointer', className: 'contracts_Users', objectId: extUser.id }; + + const folderPtr = { __type: 'Pointer', className: 'contracts_Document', objectId: folderId }; + + const object = new Parse.Object('contracts_Document'); + object.set('Name', name); + if (note) { + object.set('Note', note); + } + if (description) { + object.set('Description', description); + } + object.set('URL', file); + object.set('CreatedBy', userId); + object.set('ExtUserPtr', extUserPtr); + if (signers) { + object.set('Signers', signers); + } + if (folderId) { + object.set('Folder', folderPtr); + } + const res = await object.save(null, { useMasterKey: true }); + return response.json({ code: 200, result: res }); + } else { + return response.json({ code: 404, message: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err ', err); + return response.json(err); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js new file mode 100644 index 000000000..3852cdadd --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js @@ -0,0 +1,54 @@ +export default async function createTemplate(request, response) { + const name = request.body.name; + const note = request.body.note; + const description = request.body.description; + const signers = request.body.signer; + const folderId = request.body.folderId; + const file = request.body.file; + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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 contractsUser = new Parse.Query('contracts_Users'); + contractsUser.equalTo('UserId', userId); + const extUser = await contractsUser.first({ useMasterKey: true }); + const extUserPtr = { __type: 'Pointer', className: 'contracts_Users', objectId: extUser.id }; + + const folderPtr = { __type: 'Pointer', className: 'contracts_Template', objectId: folderId }; + + const object = new Parse.Object('contracts_Template'); + object.set('Name', name); + if (note) { + object.set('Note', note); + } + if (description) { + object.set('Description', description); + } + object.set('URL', file); + object.set('CreatedBy', userId); + object.set('ExtUserPtr', extUserPtr); + if (signers) { + object.set('Signers', signers); + } + if (folderId) { + object.set('Folder', folderPtr); + } + const res = await object.save(null, { useMasterKey: true }); + return response.json({ code: 200, result: res }); + } else { + return response.json({ code: 404, message: '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 new file mode 100644 index 000000000..5c029019e --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteTemplate.js @@ -0,0 +1,42 @@ +export default async function deletedTemplate(request, response) { + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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 template = new Parse.Query('contracts_Template'); + template.equalTo('objectId', request.params.template_id); + template.equalTo('CreatedBy', userId); + const res = await template.first({ useMasterKey: true }); + if (res) { + const isDeleted = res.get('IsArchive'); + if (isDeleted && isDeleted) { + return response.json({ code: 404, message: 'Record not found!' }); + } else { + const template = Parse.Object.extend('contracts_Template'); + const deleteQuery = new template(); + deleteQuery.id = request.params.template_id; + deleteQuery.set('IsArchive', true); + const deleteRes = await deleteQuery.save(null, { useMasterKey: true }); + if (deleteRes) { + return response.json({ code: 200, result: 'Record delete successfully!' }); + } + } + } else { + return response.json({ code: 404, message: 'Record not found!' }); + } + } else { + return response.json({ code: 404, message: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err ', err); + return response.json(err); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js new file mode 100644 index 000000000..c7faafcb1 --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplate.js @@ -0,0 +1,31 @@ +export default async function getTemplate(request, response) { + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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_Template'); + Document.equalTo('objectId', request.params.template_id); + Document.equalTo('CreatedBy', userId); + const res = await Document.first({ useMasterKey: true }); + if (res) { + return response.json({ code: 200, result: res }); + } else { + return response.json({ code: 404, message: 'Document not found!' }); + } + } else { + return response.json({ code: 404, message: '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/getTemplateList.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js new file mode 100644 index 000000000..b94b4b65d --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js @@ -0,0 +1,58 @@ +import axios from 'axios'; +import reportJson from '../../../parsefunction/reportsJson.js'; +import dotenv from 'dotenv'; +dotenv.config(); + +export default async function getTemplatetList(request, response) { + const reqToken = request.headers['x-api-token']; + const appId = process.env.APP_ID; + const serverUrl = process.env.SERVER_URL; + if (!reqToken) { + return response.json({ message: '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 userId = token.get('Id'); + const limit = request.body.limit ? request.body.limit : 200; + const skip = request.body.skip ? request.body.skip : 0; + + const clsName = 'contracts_Template'; + const params = { + Type: { $ne: 'Folder' }, + CreatedBy: { + __type: 'Pointer', + className: '_User', + objectId: userId, + }, + IsArchive: { $ne: true }, + }; + const keys = [ + 'Name', + 'Note', + 'Description', + 'Folder.Name', + 'URL', + 'ExtUserPtr.Name', + 'Signers.Name', + ]; + const orderBy = '-updatedAt'; + const strParams = JSON.stringify(params); + const strKeys = keys.join(); + const headers = { + 'Content-Type': 'application/json', + 'X-Parse-Application-Id': appId, + 'X-Parse-Master-Key': process.env.MASTER_KEY, + }; + 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) { + return response.json({ code: 200, result: res.data.results }); + } else { + return response.json({ code: 200, result: [] }); + } + } + return response.json({ code: 404, message: 'Invalid API Token!' }); +}