Skip to content

Commit 1a4b465

Browse files
authored
Merge pull request #352 from OpenSignLabs/api-v1-beta
2 parents d097f9a + 9fc69ba commit 1a4b465

File tree

5 files changed

+154
-122
lines changed

5 files changed

+154
-122
lines changed

apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
const randomId = () => Math.floor(1000 + Math.random() * 9000);
22
export default async function createDocumentWithTemplate(request, response) {
3-
const signers = request.body.Signers;
4-
const folderId = request.body.FolderId;
3+
const signers = request.body.signers;
4+
const folderId = request.body.folderId;
55
const templateId = request.params.template_id;
6-
const url = process.env.SERVER_URL;
6+
const url = new URL(process.env.SERVER_URL);
7+
let protocol = url.origin;
8+
79
try {
810
const reqToken = request.headers['x-api-token'];
911
if (!reqToken) {
@@ -40,31 +42,52 @@ export default async function createDocumentWithTemplate(request, response) {
4042
if (template?.Description) {
4143
object.set('Description', template.Description);
4244
}
43-
if (template?.Signers) {
44-
object.set('Signers', template?.Signers);
45-
}
46-
object.set('URL', template.URL);
47-
object.set('CreatedBy', template.CreatedBy);
48-
object.set('ExtUserPtr', template.ExtUserPtr);
49-
if (signers) {
50-
const placeholders = template?.Placeholders?.map(placeholder => {
51-
let matchingSigner = signers.find(y => y.Role === placeholder.Role);
52-
if (matchingSigner) {
53-
return {
54-
...placeholder,
55-
email: matchingSigner.Email,
56-
signerObjId: '',
57-
signerPtr: {},
58-
};
45+
let templateSigner = template?.Signers ? template?.Signers : [];
46+
if (signers && signers.length > 0) {
47+
let parseSigners;
48+
if (base64File) {
49+
parseSigners = signers;
5950
} else {
60-
return {
61-
...placeholder,
51+
parseSigners = JSON.parse(signers);
52+
}
53+
let createContactUrl = protocol + '/v1/createcontact';
54+
55+
let contact = [];
56+
for (const obj of parseSigners) {
57+
const body = {
58+
name: obj?.name || '',
59+
email: obj?.email || '',
60+
phone: obj?.phone || '',
6261
};
62+
try {
63+
const res = await axios.post(createContactUrl, body, {
64+
headers: { 'Content-Type': 'application/json', 'x-api-token': reqToken },
65+
});
66+
// console.log('res ', res.data);
67+
contact.push({
68+
__type: 'Pointer',
69+
className: 'contracts_Contactbook',
70+
objectId: res.data?.objectId,
71+
});
72+
} catch (err) {
73+
// console.log('err ', err.response);
74+
if (err?.response?.data?.objectId) {
75+
contact.push({
76+
__type: 'Pointer',
77+
className: 'contracts_Contactbook',
78+
objectId: err.response.data?.objectId,
79+
});
80+
}
81+
}
6382
}
64-
});
65-
console.log('placeholders ', placeholders);
66-
object.set('Placeholders', placeholders);
83+
object.set('Signers', [...templateSigner, ...contact]);
84+
} else {
85+
object.set('Signers', templateSigner);
6786
}
87+
88+
object.set('URL', template.URL);
89+
object.set('CreatedBy', template.CreatedBy);
90+
object.set('ExtUserPtr', template.ExtUserPtr);
6891
if (folderId) {
6992
object.set('Folder', folderPtr);
7093
}
@@ -75,7 +98,10 @@ export default async function createDocumentWithTemplate(request, response) {
7598
newACL.setWriteAccess(userPtr.id, true);
7699
object.setACL(newACL);
77100
const res = await object.save(null, { useMasterKey: true });
78-
return response.json({ objectId: res.id, url: url });
101+
return response.json({
102+
objectId: res.id,
103+
url: protocol + '/load/signmicroapp/placeholdersign/' + res.id,
104+
});
79105
} else {
80106
return response.status(400).json({ error: 'Please provide signers properly!' });
81107
}
@@ -95,4 +121,4 @@ export default async function createDocumentWithTemplate(request, response) {
95121
}
96122
return response.status(400).json({ error: 'Something went wrong!' });
97123
}
98-
}
124+
}
Lines changed: 44 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
// import batchQuery from './batchquery.js';
1+
import axios from 'axios';
22

33
// const randomId = () => Math.floor(1000 + Math.random() * 9000);
44
export default async function createDocument(request, response) {
5-
const name = request.body.Title;
6-
const note = request.body.Note;
7-
const description = request.body.Description;
8-
const signers = request.body.Signers;
9-
const folderId = request.body.FolderId;
10-
const base64File = request.body.File;
11-
const url = request?.get('host');
5+
const name = request.body.title;
6+
const note = request.body.note;
7+
const description = request.body.description;
8+
const signers = request.body.signers;
9+
const folderId = request.body.folderId;
10+
const base64File = request.body.file;
1211
const fileData = request.files?.[0] ? request.files[0].buffer : null;
1312
// console.log('fileData ', fileData);
13+
const url = new URL(process.env.SERVER_URL);
14+
let protocol = url.origin;
15+
1416
try {
1517
const reqToken = request.headers['x-api-token'];
1618
if (!reqToken) {
@@ -21,7 +23,7 @@ export default async function createDocument(request, response) {
2123
const token = await tokenQuery.first({ useMasterKey: true });
2224
if (token !== undefined) {
2325
// Valid Token then proceed request
24-
if (signers) {
26+
if (signers && signers.length > 0) {
2527
const userPtr = token.get('userId');
2628
let fileUrl;
2729
if (request.files?.[0]) {
@@ -63,56 +65,44 @@ export default async function createDocument(request, response) {
6365
object.set('URL', fileUrl);
6466
object.set('CreatedBy', userPtr);
6567
object.set('ExtUserPtr', extUserPtr);
66-
if (signers) {
68+
if (signers && signers.length > 0) {
6769
let parseSigners;
6870
if (base64File) {
6971
parseSigners = signers;
7072
} else {
7173
parseSigners = JSON.parse(signers);
7274
}
75+
let createContactUrl = protocol + '/v1/createcontact';
7376

74-
const contactbook = new Parse.Query('contracts_Contactbook');
75-
contactbook.equalTo('UserId', userPtr);
76-
contactbook.notEqualTo('IsDeleted', true);
77-
contactbook.containedIn('Email', parseSigners);
78-
const contactbookRes = await contactbook.find({ useMasterKey: true });
79-
// console.log('contactbookRes ', contactbookRes);
80-
const parseContactbookRes = JSON.parse(JSON.stringify(contactbookRes));
81-
// console.log('userPtr ', userPtr);
82-
// const newContacts = parseSigners
83-
// .filter(x => !parseContactbookRes.some(y => y.Email === x))
84-
// .map(email => ({
85-
// method: 'POST',
86-
// path: '/app/classes/contracts_Contactbook',
87-
// body: {
88-
// Email: email,
89-
// CreatedBy: { __type: 'Pointer', className: '_User', objectId: userPtr.id },
90-
// UserId: { __type: 'Pointer', className: '_User', objectId: userPtr.id },
91-
// Role: 'contracts_Guest',
92-
// IsDeleted: false,
93-
// ACL: {
94-
// [userPtr.id]: { read: true, write: true },
95-
// },
96-
// },
97-
// }));
98-
// console.log('newContacts', newContacts);
99-
let contactSigners = parseContactbookRes?.map(x => ({
100-
__type: 'Pointer',
101-
className: 'contracts_Contactbook',
102-
objectId: x.objectId,
103-
}));
104-
// if (newContacts.length > 0) {
105-
// const batchRes = await batchQuery(newContacts);
106-
// const contacts = batchRes?.map(x => ({
107-
// __type: 'Pointer',
108-
// className: 'contracts_Contactbook',
109-
// objectId: x.success.objectId,
110-
// }));
111-
// contactSigners = [...contactSigners, ...contacts];
112-
// }
113-
// console.log('contactsigners', contactSigners);
114-
115-
object.set('Signers', contactSigners);
77+
let contact = [];
78+
for (const obj of parseSigners) {
79+
const body = {
80+
name: obj?.name || '',
81+
email: obj?.email || '',
82+
phone: obj?.phone || '',
83+
};
84+
try {
85+
const res = await axios.post(createContactUrl, body, {
86+
headers: { 'Content-Type': 'application/json', 'x-api-token': reqToken },
87+
});
88+
// console.log('res ', res.data);
89+
contact.push({
90+
__type: 'Pointer',
91+
className: 'contracts_Contactbook',
92+
objectId: res.data?.objectId,
93+
});
94+
} catch (err) {
95+
// console.log('err ', err.response);
96+
if (err?.response?.data?.objectId) {
97+
contact.push({
98+
__type: 'Pointer',
99+
className: 'contracts_Contactbook',
100+
objectId: err.response.data?.objectId,
101+
});
102+
}
103+
}
104+
}
105+
object.set('Signers', contact);
116106
}
117107
if (folderId) {
118108
object.set('Folder', folderPtr);
@@ -126,7 +116,7 @@ export default async function createDocument(request, response) {
126116
const res = await object.save(null, { useMasterKey: true });
127117
return response.json({
128118
objectId: res.id,
129-
url: 'https://' + url + '/load/signmicroapp/placeholdersign/' + res.id,
119+
url: protocol + '/load/signmicroapp/placeholdersign/' + res.id,
130120
});
131121
} else {
132122
return response.status(400).json({ error: 'Please provide signers!' });
@@ -138,4 +128,4 @@ export default async function createDocument(request, response) {
138128
console.log('err ', err);
139129
return response.status(400).json({ error: 'Something went wrong!' });
140130
}
141-
}
131+
}

apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
const randomId = () => Math.floor(1000 + Math.random() * 9000);
22
export default async function createTemplate(request, response) {
3-
const name = request.body?.Title;
4-
const note = request.body?.Note;
5-
const description = request.body?.Description;
6-
const signers = request.body?.Signers;
7-
const folderId = request.body?.FolderId;
8-
const url = request?.get('host');
9-
const base64File = request.body.File;
3+
const name = request.body?.title;
4+
const note = request.body?.note;
5+
const description = request.body?.description;
6+
const signers = request.body?.signers;
7+
const folderId = request.body?.folderId;
8+
const base64File = request.body.file;
109
const fileData = request.files?.[0] ? request.files[0].buffer : null;
10+
const url = new URL(process.env.SERVER_URL);
11+
let protocol = url.origin;
12+
1113
try {
1214
const reqToken = request.headers['x-api-token'];
1315
if (!reqToken) {
@@ -52,30 +54,44 @@ export default async function createTemplate(request, response) {
5254
object.set('URL', fileUrl);
5355
object.set('CreatedBy', userPtr);
5456
object.set('ExtUserPtr', extUserPtr);
55-
if (signers) {
57+
if (signers && signers.length > 0) {
5658
let parseSigners;
5759
if (base64File) {
5860
parseSigners = signers;
5961
} else {
6062
parseSigners = JSON.parse(signers);
6163
}
64+
let createContactUrl = protocol + '/v1/createcontact';
6265

63-
const contactbook = new Parse.Query('contracts_Contactbook');
64-
contactbook.containedIn('Email', parseSigners);
65-
contactbook.equalTo('UserId', userPtr);
66-
contactbook.notEqualTo('IsDeleted', true);
67-
const contactbookRes = await contactbook.find({ useMasterKey: true });
68-
// console.log('contactbookRes ', contactbookRes);
69-
const parseContactbookRes = JSON.parse(JSON.stringify(contactbookRes));
70-
71-
object.set(
72-
'Signers',
73-
parseContactbookRes?.map(x => ({
74-
__type: 'Pointer',
75-
className: 'contracts_Contactbook',
76-
objectId: x.objectId,
77-
}))
78-
);
66+
let contact = [];
67+
for (const obj of parseSigners) {
68+
const body = {
69+
name: obj?.name || '',
70+
email: obj?.email || '',
71+
phone: obj?.phone || '',
72+
};
73+
try {
74+
const res = await axios.post(createContactUrl, body, {
75+
headers: { 'Content-Type': 'application/json', 'x-api-token': reqToken },
76+
});
77+
// console.log('res ', res.data);
78+
contact.push({
79+
__type: 'Pointer',
80+
className: 'contracts_Contactbook',
81+
objectId: res.data?.objectId,
82+
});
83+
} catch (err) {
84+
// console.log('err ', err.response);
85+
if (err?.response?.data?.objectId) {
86+
contact.push({
87+
__type: 'Pointer',
88+
className: 'contracts_Contactbook',
89+
objectId: err.response.data?.objectId,
90+
});
91+
}
92+
}
93+
}
94+
object.set('Signers', contact);
7995
}
8096
if (folderId) {
8197
object.set('Folder', folderPtr);
@@ -89,7 +105,7 @@ export default async function createTemplate(request, response) {
89105
const res = await object.save(null, { useMasterKey: true });
90106
return response.json({
91107
objectId: res.id,
92-
url: 'https://' + url + '/load/signmicroapp/template/' + res.id,
108+
url: protocol + '/load/signmicroapp/template/' + res.id,
93109
});
94110
} else {
95111
return response.status(405).json({ error: 'Invalid API Token!' });
@@ -98,4 +114,4 @@ export default async function createTemplate(request, response) {
98114
console.log('err ', err);
99115
return response.status(400).json({ error: 'Something went wrong, please try again later!' });
100116
}
101-
}
117+
}

apps/OpenSignServer/cloud/customRoute/v1/routes/updateDocument.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,20 @@ export default async function updateDocument(request, response) {
2626
const document = Parse.Object.extend('contracts_Document');
2727
const updateQuery = new document();
2828
updateQuery.id = request.params.document_id;
29-
if (request?.body?.Name) {
30-
updateQuery.set('Name', request?.body?.Name);
29+
if (request?.body?.name) {
30+
updateQuery.set('Name', request?.body?.name);
3131
}
32-
if (request?.body?.Note) {
33-
updateQuery.set('Note', request?.body?.Note);
32+
if (request?.body?.note) {
33+
updateQuery.set('Note', request?.body?.note);
3434
}
35-
if (request?.body?.Description) {
36-
updateQuery.set('Name', request?.body?.Description);
35+
if (request?.body?.description) {
36+
updateQuery.set('Name', request?.body?.description);
3737
}
38-
if (request?.body?.FolderId) {
38+
if (request?.body?.folderId) {
3939
updateQuery.set('Folder', {
4040
__type: 'Pointer',
4141
className: 'contracts_Document',
42-
objectId: request?.body?.FolderId,
42+
objectId: request?.body?.folderId,
4343
});
4444
}
4545
const updatedRes = await updateQuery.save(null, { useMasterKey: true });

0 commit comments

Comments
 (0)