diff --git a/backend/db/utils/googleFolderUtils/index.ts b/backend/db/utils/googleFolderUtils/index.ts new file mode 100644 index 0000000..8d47b10 --- /dev/null +++ b/backend/db/utils/googleFolderUtils/index.ts @@ -0,0 +1,101 @@ +import {UserInterface} from "../../../models/user"; +import env from "../../../enviroment/env"; +import { google } from "googleapis"; +import getGoogleAuth from "../../../db/googleAuth"; +import createQueryGoogle, {googleQueryType} from "../../../utils/createQueryGoogle"; +import createQueryGoogleFolder from "../../../utils/createQueryGoogleFolder"; + +const fields = 'id, name, createdTime, parents, mimeType' + +class GoogleFolderUtils { + + constructor() { + + } + + getList = async(query: googleQueryType, user: UserInterface) => { + + const oauth2Client = await getGoogleAuth(user); + const drive = google.drive({version:"v3", auth: oauth2Client}); + + const limit = query.limit; + + let parent = query.parent === "/" ? "root" : query.parent; + + const {orderBy, queryBuilder} = createQueryGoogleFolder(query, parent); + + const folders = await drive.files.list({pageSize: limit, fields: `files(${fields})`, q: queryBuilder, orderBy}); + + return folders; + } + + getInfo = async(id: string, user: UserInterface) => { + + const oauth2Client = await getGoogleAuth(user); + + const drive = google.drive({version:"v3", auth: oauth2Client}); + const folder = await drive.files.get({fileId: id, fields: fields}); + + return folder; + } + + renameFolder = async(folderID: string, title: string, user: UserInterface) => { + + const oauth2Client = await getGoogleAuth(user); + const drive = google.drive({version:"v3", auth: oauth2Client}); + + await drive.files.update({fileId: folderID, requestBody: {name:title}}); + } + + removeFolder = async(folderID: string, user: UserInterface) => { + + const oauth2Client = await getGoogleAuth(user); + const drive = google.drive({version:"v3", auth: oauth2Client}); + + await drive.files.delete({fileId:folderID}); + } + + uploadFolder = async(name: string, parent: string, user: UserInterface) => { + + parent = parent === "/" ? "root" : parent; + + const oauth2Client = await getGoogleAuth(user); + const drive = google.drive({version:"v3", auth: oauth2Client}); + + const folderMetadata = { + name, + mimeType: 'application/vnd.google-apps.folder', + parents: [parent] + } + + const createdFolder = await drive.files.create({ + requestBody: folderMetadata, + fields: fields + }) + + return createdFolder; + } + + moveFolder = async(fileID: string, parentID: string, user: UserInterface) => { + + const oauth2Client = await getGoogleAuth(user); + + const drive = google.drive({version:"v3", auth: oauth2Client}); + + const previousFile = await drive.files.get({ + fileId: fileID, + fields: fields + }) + + const previousParent = previousFile.data.parents![0]; + + await drive.files.update({ + fileId: fileID, + addParents: parentID, + removeParents: previousParent, + fields: fields + }) + } +} + +export default GoogleFolderUtils; \ No newline at end of file diff --git a/backend/services/GoogleFileService/index.ts b/backend/services/GoogleFileService/index.ts index 3beee04..daa46dd 100644 --- a/backend/services/GoogleFileService/index.ts +++ b/backend/services/GoogleFileService/index.ts @@ -14,10 +14,10 @@ import getBusboyData from "../ChunkService/utils/getBusboyData"; import axios from "axios"; import awaitUploadGoogle from "../ChunkService/utils/awaitUploadGoogle"; import {googleQueryType} from "../../utils/createQueryGoogle"; -import GoogleDbUtils from "../../db/utils/googleFileUtils"; +import GoogleDbFileUtils from "../../db/utils/googleFileUtils"; import sortGoogleMongoQuickFiles from "../../utils/sortGoogleMongoQuickFiles"; -const googleDbUtils = new GoogleDbUtils(); +const googleDbFileUtils = new GoogleDbFileUtils(); interface RequestType extends Request { user?: UserInterface, @@ -37,7 +37,7 @@ class GoogleFileService { getList = async(user: UserInterface, query: googleQueryType) => { - const files = await googleDbUtils.getList(query, user); + const files = await googleDbFileUtils.getList(query, user); const nextPageToken = files.data.nextPageToken; @@ -50,7 +50,7 @@ class GoogleFileService { getMongoGoogleList = async(user: UserInterface, query: googleQueryType) => { - const files = await googleDbUtils.getList(query, user); + const files = await googleDbFileUtils.getList(query, user); const nextPageToken = files.data.nextPageToken; @@ -67,7 +67,7 @@ class GoogleFileService { getFileInfo = async(user: UserInterface, id: string) => { - const file = await googleDbUtils.getFileInfo(id, user); + const file = await googleDbFileUtils.getFileInfo(id, user); const userID = user._id; const convertedFile = convertDriveToMongo(file.data, userID); @@ -77,7 +77,7 @@ class GoogleFileService { getGoogleMongoQuickList = async(user: UserInterface) => { - const files = await googleDbUtils.getQuickList(user); + const files = await googleDbFileUtils.getQuickList(user); const userID = user._id const convertedFiles = convertDriveListToMongoList(files.data.files, userID); @@ -91,7 +91,7 @@ class GoogleFileService { getGoogleMongoSuggestedList = async(user: UserInterface, searchQuery: string) => { - const {files, folders} = await googleDbUtils.getSuggestedList(searchQuery, user); + const {files, folders} = await googleDbFileUtils.getSuggestedList(searchQuery, user); const userID = user._id; @@ -108,17 +108,17 @@ class GoogleFileService { renameFile = async(user: UserInterface, fileID: string, title: string) => { - await googleDbUtils.renameFile(fileID, title, user); + await googleDbFileUtils.renameFile(fileID, title, user); } removeFile = async(user: UserInterface, fileID: string) => { - await googleDbUtils.removeFile(fileID, user); + await googleDbFileUtils.removeFile(fileID, user); } downloadFile = async(user: UserInterface, fileID: string, res: Response) => { - const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user); + const {fileMetadata, drive} = await googleDbFileUtils.getDownloadFileMetadata(fileID, user); res.set('Content-Type', 'binary/octet-stream'); res.set('Content-Disposition', 'attachment; filename="' + fileMetadata.data.name! + '"'); @@ -147,7 +147,7 @@ class GoogleFileService { downloadDoc = async(user: UserInterface, fileID: string, res: Response) => { - const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user); + const {fileMetadata, drive} = await googleDbFileUtils.getDownloadFileMetadata(fileID, user); res.set('Content-Type', 'binary/octet-stream'); res.set('Content-Disposition', 'attachment; filename="' + fileMetadata.data.name! + ".pdf" + '"'); @@ -172,7 +172,7 @@ class GoogleFileService { getThumbnail = async(user: UserInterface, fileID: string, res: Response) => { - const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user); + const {fileMetadata, drive} = await googleDbFileUtils.getDownloadFileMetadata(fileID, user); res.set('Content-Type', 'binary/octet-stream'); res.set('Content-Disposition', 'attachment; filename="' + fileMetadata.data.name! + '"'); @@ -200,7 +200,7 @@ class GoogleFileService { getFullThumbnail = async(user: UserInterface, fileID: string, res: Response) => { - const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user); + const {fileMetadata, drive} = await googleDbFileUtils.getDownloadFileMetadata(fileID, user); res.set('Content-Type', 'binary/octet-stream'); res.set('Content-Disposition', 'attachment; filename="' + fileMetadata.data.name! + '"'); @@ -232,7 +232,7 @@ class GoogleFileService { const currentUUID = uuid.v4(); tempStorage[tempUUID] = currentUUID; - const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user); + const {fileMetadata, drive} = await googleDbFileUtils.getDownloadFileMetadata(fileID, user); const fileSize = +fileMetadata.data.size! @@ -346,19 +346,19 @@ class GoogleFileService { moveFile = async(user: UserInterface, fileID: string, parentID: string) => { - await googleDbUtils.moveFile(fileID, parentID, user); + await googleDbFileUtils.moveFile(fileID, parentID, user); } makeFilePublic = async(user: UserInterface, fileID: string) => { - const publicURL = await googleDbUtils.makeFilePublic(fileID, user); + const publicURL = await googleDbFileUtils.makeFilePublic(fileID, user); return publicURL; } removePublicLink = async(user: UserInterface, fileID: string) => { - await googleDbUtils.removePublicLink(fileID, user); + await googleDbFileUtils.removePublicLink(fileID, user); } } diff --git a/backend/services/GoogleFolderService/index.ts b/backend/services/GoogleFolderService/index.ts index 8046ca1..32fec4d 100644 --- a/backend/services/GoogleFolderService/index.ts +++ b/backend/services/GoogleFolderService/index.ts @@ -6,6 +6,10 @@ import createQueryGoogleFolder from "../../utils/createQueryGoogleFolder"; import FolderService from "../FolderService"; import sortGoogleMongoFolderList from "../../utils/sortGoogleMongoFolderList"; import convertDriveFolderToMongoFolder from "../../utils/convertDriveFolderToMongoFolder"; +import createQueryGoogle, {googleQueryType} from "../../utils/createQueryGoogle"; +import GoogleDbFolderUtils from "../../db/utils/googleFolderUtils"; + +const googleDbFolderUtils = new GoogleDbFolderUtils(); const folderService = new FolderService(); @@ -17,62 +21,41 @@ class GoogleFolderService { } - getList = async(user: UserInterface, query: any) => { + getList = async(user: UserInterface, query: googleQueryType) => { - const oauth2Client = await getGoogleAuth(user); - - const limit: any = query.limit as any; - - let parent = query.parent === "/" ? "root" : query.parent; - - const {orderBy, queryBuilder} = createQueryGoogleFolder(query, parent); - - const drive = google.drive({version:"v3", auth: oauth2Client}); - const files = await drive.files.list({pageSize: limit, fields: `files(${fields})`, q: queryBuilder, orderBy}); + const folders = await googleDbFolderUtils.getList(query, user); const userID = user._id; - const convertedFiles = convertDriveFoldersToMongoFolders(files.data.files, userID); + const convertedFolders = convertDriveFoldersToMongoFolders(folders.data.files, userID); - return convertedFiles; + return convertedFolders; } getGoogleMongoList = async(user: UserInterface, query: any) => { - const oauth2Client = await getGoogleAuth(user); - - const limit: any = query.limit as any; - - let parent = query.parent === "/" ? "root" : query.parent; - - const {orderBy, queryBuilder} = createQueryGoogleFolder(query, parent) - - const drive = google.drive({version:"v3", auth: oauth2Client}); - const files = await drive.files.list({pageSize: limit, fields: `files(${fields})`, q: queryBuilder, orderBy}); + const googleFolderList = await googleDbFolderUtils.getList(query, user); const userID = user._id; - const convertedFiles = convertDriveFoldersToMongoFolders(files.data.files, userID); + const convertedFolders = convertDriveFoldersToMongoFolders(googleFolderList.data.files, userID); const folderList = await folderService.getFolderList(user, query); - const mongoGoogleList = sortGoogleMongoFolderList([...convertedFiles, ...folderList], query); + const mongoGoogleList = sortGoogleMongoFolderList([...convertedFolders, ...folderList], query); return mongoGoogleList; } getInfo = async(user: UserInterface, id: string) => { - const oauth2Client = await getGoogleAuth(user); - - const drive = google.drive({version:"v3", auth: oauth2Client}); - const file = await drive.files.get({fileId: id, fields: fields}); + const folder = await googleDbFolderUtils.getInfo(id, user); const userID = user._id; - const convertedFile = convertDriveFolderToMongoFolder(file.data, userID); + const convertedFolder = convertDriveFolderToMongoFolder(folder.data, userID); - return convertedFile; + return convertedFolder; } getSubFolderList = async(user: UserInterface, id: string) => { @@ -173,40 +156,20 @@ class GoogleFolderService { return folderList; } - renameFolder = async(user: UserInterface, fileID: string, title: string) => { + renameFolder = async(user: UserInterface, folderID: string, title: string) => { - const oauth2Client = await getGoogleAuth(user); - const drive = google.drive({version:"v3", auth: oauth2Client}); - - await drive.files.update({fileId: fileID, requestBody: {name:title}}) + await googleDbFolderUtils.renameFolder(folderID, title, user); } - removeFolder = async(user: UserInterface, fileID: string) => { + removeFolder = async(user: UserInterface, folderID: string) => { - const oauth2Client = await getGoogleAuth(user); - const drive = google.drive({version:"v3", auth: oauth2Client}); - - await drive.files.delete({fileId:fileID}); + await googleDbFolderUtils.removeFolder(folderID, user); } - upload = async(user: UserInterface, name: string, parent: string, ) => { + upload = async(user: UserInterface, name: string, parent: string) => { + + const createdFolder = await googleDbFolderUtils.uploadFolder(name, parent, user); - parent = parent === "/" ? "root" : parent; - - const oauth2Client = await getGoogleAuth(user); - const drive = google.drive({version:"v3", auth: oauth2Client}); - - const folderMetadata = { - name, - mimeType: 'application/vnd.google-apps.folder', - parents: [parent] - } - - const createdFolder = await drive.files.create({ - requestBody: folderMetadata, - fields: fields - }) - const userID = user._id; const convertedFolder = convertDriveFolderToMongoFolder(createdFolder.data, userID) @@ -216,23 +179,8 @@ class GoogleFolderService { moveFolder = async(user: UserInterface, fileID: string, parentID: string) => { - const oauth2Client = await getGoogleAuth(user); + await googleDbFolderUtils.moveFolder(fileID, parentID, user); - const drive = google.drive({version:"v3", auth: oauth2Client}); - - const previousFile = await drive.files.get({ - fileId: fileID, - fields: fields - }) - - const previousParent = previousFile.data.parents![0]; - - await drive.files.update({ - fileId: fileID, - addParents: parentID, - removeParents: previousParent, - fields: fields - }) } }