update apis response and add delete document api

This commit is contained in:
prafull-opensignlabs
2024-01-15 20:22:07 +05:30
parent e52c7c97cf
commit 9500b2d678
16 changed files with 224 additions and 118 deletions
@@ -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);
@@ -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));
}
}
@@ -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!' });
}
@@ -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!' });
}
@@ -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 {
@@ -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);
}
}
@@ -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 {
@@ -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!' });
@@ -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: [] });
}
@@ -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!' });
}
@@ -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: [] });
@@ -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!' });
}
@@ -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: [] });
@@ -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!' });
}
@@ -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);
}
}
@@ -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'),
});
}
}