cleaned up google folder route and added db util

This commit is contained in:
kyle hoell
2020-11-25 16:09:23 -05:00
parent 6129439eab
commit bbd0b78aa8
3 changed files with 140 additions and 91 deletions
+101
View File
@@ -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;
+17 -17
View File
@@ -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);
}
}
+22 -74
View File
@@ -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
})
}
}