From 62b4a1978838130abfb42e53cea56ffdac418b16 Mon Sep 17 00:00:00 2001 From: David <33458145+davidmcpowell@users.noreply.github.com> Date: Mon, 19 Feb 2024 09:21:08 +0000 Subject: [PATCH] Merge pull request #17069 from overleaf/dp-mongoose-callback-linked-files-handler Promisify LinkedFilesHandler GitOrigin-RevId: 9c996dfd721b0a5dced989c9403ac3a5d9cbfc87 --- .../LinkedFiles/LinkedFilesHandler.js | 166 ++++++------------ 1 file changed, 57 insertions(+), 109 deletions(-) diff --git a/services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.js b/services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.js index 70d8086748..50b8803d38 100644 --- a/services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.js +++ b/services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.js @@ -1,160 +1,108 @@ -/* eslint-disable - n/handle-callback-err, - max-len, - no-unused-vars, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS207: Consider shorter variations of null checks - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ const FileWriter = require('../../infrastructure/FileWriter') const EditorController = require('../Editor/EditorController') const ProjectLocator = require('../Project/ProjectLocator') const { Project } = require('../../models/Project') const ProjectGetter = require('../Project/ProjectGetter') -const _ = require('lodash') const { ProjectNotFoundError, V1ProjectNotFoundError, BadDataError, } = require('./LinkedFilesErrors') -const { promisifyAll } = require('@overleaf/promise-utils') +const { callbackifyAll } = require('@overleaf/promise-utils') const LinkedFilesHandler = { - getFileById(projectId, fileId, callback) { - if (callback == null) { - callback = function () {} - } - ProjectLocator.findElement( + async getFileById(projectId, fileId) { + const { element, path, folder } = await ProjectLocator.promises.findElement( { project_id: projectId, element_id: fileId, type: 'file', - }, - function (err, file, path, parentFolder) { - if (err != null) { - return callback(err) - } - callback(null, file, path, parentFolder) } ) + return { file: element, path, parentFolder: folder } }, - getSourceProject(data, callback) { - if (callback == null) { - callback = function () {} - } + async getSourceProject(data) { const projection = { _id: 1, name: 1 } if (data.v1_source_doc_id != null) { - Project.findOne( + const project = await Project.findOne( { 'overleaf.id': data.v1_source_doc_id }, - projection, - function (err, project) { - if (err != null) { - return callback(err) - } - if (project == null) { - return callback(new V1ProjectNotFoundError()) - } - callback(null, project) - } - ) + projection + ).exec() + + if (project == null) { + throw new V1ProjectNotFoundError() + } + + return project } else if (data.source_project_id != null) { - ProjectGetter.getProject( + const project = await ProjectGetter.promises.getProject( data.source_project_id, - projection, - function (err, project) { - if (err != null) { - return callback(err) - } - if (project == null) { - return callback(new ProjectNotFoundError()) - } - callback(null, project) - } + projection ) + + if (project == null) { + throw new ProjectNotFoundError() + } + + return project } else { - callback(new BadDataError('neither v1 nor v2 id present')) + throw new BadDataError('neither v1 nor v2 id present') } }, - importFromStream( + async importFromStream( projectId, readStream, linkedFileData, name, parentFolderId, - userId, - callback + userId ) { - if (callback == null) { - callback = function () {} - } - callback = _.once(callback) - FileWriter.writeStreamToDisk(projectId, readStream, function (err, fsPath) { - if (err != null) { - return callback(err) - } - EditorController.upsertFile( - projectId, - parentFolderId, - name, - fsPath, - linkedFileData, - 'upload', - userId, - (err, file) => { - if (err != null) { - return callback(err) - } - callback(null, file) - } - ) - }) + const fsPath = await FileWriter.promises.writeStreamToDisk( + projectId, + readStream + ) + + return await EditorController.promises.upsertFile( + projectId, + parentFolderId, + name, + fsPath, + linkedFileData, + 'upload', + userId + ) }, - importContent( + async importContent( projectId, content, linkedFileData, name, parentFolderId, - userId, - callback + userId ) { - if (callback == null) { - callback = function () {} - } - callback = _.once(callback) - FileWriter.writeContentToDisk(projectId, content, function (err, fsPath) { - if (err != null) { - return callback(err) - } - EditorController.upsertFile( - projectId, - parentFolderId, - name, - fsPath, - linkedFileData, - 'upload', - userId, - (err, file) => { - if (err != null) { - return callback(err) - } - callback(null, file) - } - ) - }) + const fsPath = await FileWriter.promises.writeContentToDisk( + projectId, + content + ) + + return await EditorController.promises.upsertFile( + projectId, + parentFolderId, + name, + fsPath, + linkedFileData, + 'upload', + userId + ) }, } module.exports = { - ...LinkedFilesHandler, - promises: promisifyAll(LinkedFilesHandler, { + promises: LinkedFilesHandler, + ...callbackifyAll(LinkedFilesHandler, { multiResult: { getFileById: ['file', 'path', 'parentFolder'] }, }), }