const smtp = require('vn-print/core/smtp');
const config = require('vn-print/core/config');
module.exports = Self => {
Self.remoteMethodCtx('sendToSupport', {
description: 'Send mail to support',
accessType: 'WRITE',
accepts: [
{
arg: 'reason',
type: 'string',
description: 'The reason'
},
{
arg: 'additionalData',
type: 'object',
required: true,
description: 'The additional data'
}
],
returns: {
type: 'object',
root: true
},
http: {
path: `/send-to-support`,
verb: 'POST'
}
});
Self.sendToSupport = async(ctx, reason, additionalData) => {
const userId = ctx.req.accessToken.userId;
const emailUser =
await Self.app.models.EmailUser.findById(userId, {fields: ['email']});
const tableStyle = 'width:100%; border-collapse: collapse; text-align: left;';
const thStyle = 'padding: 8px; border: 1px solid #ddd; background-color: #f4f4f4;';
const tdStyle = 'padding: 8px; border: 1px solid #ddd;';
const tdBoldStyle = 'padding: 8px; border: 1px solid #ddd; font-weight: bold;';
const subTdStyle = 'padding: 6px; border: 1px solid #ddd;';
const subTdBoldStyle = 'padding: 6px; border: 1px solid #ddd; font-weight: bold;';
let html = `
Motivo: ${reason}
Usuario: ${userId} ${emailUser.email}
Additional Data:
Clave | Valor |
`;
for (const [key, val] of Object.entries(additionalData)) {
if (key !== 'config') {
html += `
${key} |
${parse(val)} |
`;
} else {
html += `
${key} |
`;
for (const [confKey, confVal] of Object.entries(val)) {
html += `
${confKey} |
${parse(confVal)} |
`;
}
html += ` |
`;
}
}
html += `
`;
const {message, path, name} = additionalData;
const err = name && message ? `${name}: ${message}` : name || message || '';
await smtp.send({
to: `${config.app.reportEmail}, ${emailUser.email}`,
subject: `[Support-Salix] ${path.split('?')[0]} ${err}`,
html
});
};
function parse(value) {
try {
try {
value = JSON.parse(value);
} catch {}
return JSON.stringify(value, null, ' ').split('\n').join('
');
} catch {
return value;
}
}
};