const got = require('got'); module.exports = Self => { Self.remoteMethodCtx('checkFile', { description: 'Check if exist docuware file', accessType: 'READ', accepts: [ { arg: 'id', type: 'number', description: 'The id', http: {source: 'path'} }, { arg: 'fileCabinet', type: 'string', required: true, description: 'The fileCabinet name' }, { arg: 'dialog', type: 'string', required: true, description: 'The dialog name' } ], returns: { type: 'boolean', root: true }, http: { path: `/:id/checkFile`, verb: 'POST' } }); Self.checkFile = async function(ctx, id, fileCabinet, dialog) { const myUserId = ctx.req.accessToken.userId; if (!myUserId) return false; const models = Self.app.models; const docuwareConfig = await models.DocuwareConfig.findOne(); const docuwareInfo = await models.Docuware.findOne({ where: { code: fileCabinet, dialogName: dialog } }); const docuwareUrl = docuwareConfig.url; const cookie = docuwareConfig.token; const fileCabinetName = docuwareInfo.fileCabinetName; const find = docuwareInfo.find; const options = { 'headers': { 'Accept': 'application/json', 'Content-Type': 'application/json', 'Cookie': cookie } }; const searchFilter = { condition: [ { DBName: find, Value: [id] } ] }; try { // get fileCabinetId const fileCabinetResponse = await got.get(`${docuwareUrl}/FileCabinets`, options); const fileCabinetJson = JSON.parse(fileCabinetResponse.body).FileCabinet; const fileCabinetId = fileCabinetJson.find(dialogs => dialogs.Name === fileCabinetName).Id; // get dialog const dialogResponse = await got.get(`${docuwareUrl}/FileCabinets/${fileCabinetId}/dialogs`, options); const dialogJson = JSON.parse(dialogResponse.body).Dialog; const dialogId = dialogJson.find(dialogs => dialogs.DisplayName === 'find').Id; // get docuwareID Object.assign(options, {'body': JSON.stringify(searchFilter)}); const response = await got.post( `${docuwareUrl}/FileCabinets/${fileCabinetId}/Query/DialogExpression?dialogId=${dialogId}`, options); JSON.parse(response.body).Items[0].Id; return true; } catch (error) { return false; } }; };