mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-09-02 13:38:44 +02:00
update apis response and add delete document api
This commit is contained in:
@@ -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'),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user