cleaned up google file service putting it on a db util

This commit is contained in:
kyle hoell
2020-11-25 15:21:29 -05:00
parent cadc7b9548
commit 6129439eab
4 changed files with 170 additions and 133 deletions
+130
View File
@@ -29,6 +29,136 @@ class GoogleDbUtil {
return files
}
getFileInfo = async(id: string, user: UserInterface) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const file = await drive.files.get({fileId: id, fields: fields});
return file;
}
getQuickList = async(user: UserInterface) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
let query = 'mimeType != "application/vnd.google-apps.folder" and trashed=false';
const files = await drive.files.list({pageSize: 10, fields: `nextPageToken, files(${fields})`, q: query});
return files;
}
getSuggestedList = async(searchQuery: string, user: UserInterface) => {
const driveQuery = `name contains "${searchQuery}" and mimeType != "application/vnd.google-apps.folder" and trashed=false`
const driveQueryFolder = `name contains "${searchQuery}" and mimeType = "application/vnd.google-apps.folder" and trashed=false`
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const files = await drive.files.list({pageSize: 10, fields: `nextPageToken, files(${fields})`, q: driveQuery});
const folders = await drive.files.list({pageSize: 10, fields: `nextPageToken, files(${fields})`, q: driveQueryFolder});
return {
files,
folders
}
}
renameFile = async(fileID: string, title: string, user: UserInterface) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
await drive.files.update({fileId: fileID, requestBody: {name:title}})
}
removeFile = async(fileID: string, user: UserInterface) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
await drive.files.delete({fileId:fileID});
}
getDownloadFileMetadata = async(fileID: string, user: UserInterface) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const fileMetadata = await drive.files.get({fileId: fileID, fields: "*"});
return {fileMetadata, drive};
}
moveFile = 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: "*"
})
const previousParent = previousFile.data.parents![0];
await drive.files.update({
fileId: fileID,
addParents: parentID,
removeParents: previousParent,
fields: fields
})
}
makeFilePublic = async(fileID: string, user: UserInterface) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
await drive.permissions.create({
requestBody: {
type: "anyone",
role: "reader"
},
fileId: fileID,
fields: "*"
})
const fileDetails = await drive.files.get({
fileId: fileID,
fields: fields
})
const publicURL = fileDetails.data.webViewLink!;
return publicURL;
}
removePublicLink = async(fileID: string, user: UserInterface) => {
const {fileMetadata, drive} = await this.getDownloadFileMetadata(fileID, user);
await drive.permissions.get({
fileId: fileID,
permissionId: fileMetadata.data.permissionIds![0]
})
await drive.permissions.delete({
fileId: fileID,
permissionId: fileMetadata.data.permissionIds![0]
})
}
}
export default GoogleDbUtil;
+20 -133
View File
@@ -15,6 +15,7 @@ import axios from "axios";
import awaitUploadGoogle from "../ChunkService/utils/awaitUploadGoogle";
import {googleQueryType} from "../../utils/createQueryGoogle";
import GoogleDbUtils from "../../db/utils/googleFileUtils";
import sortGoogleMongoQuickFiles from "../../utils/sortGoogleMongoQuickFiles";
const googleDbUtils = new GoogleDbUtils();
@@ -48,19 +49,8 @@ class GoogleFileService {
}
getMongoGoogleList = async(user: UserInterface, query: googleQueryType) => {
const oauth2Client = await getGoogleAuth(user);
const limit = query.limit;
let parent = query.parent === "/" ? "root" : query.parent;
const {queryBuilder, orderBy} = createQueryGoogle(query, parent)
const previosPageToken = query.pageToken;
const drive = google.drive({version:"v3", auth: oauth2Client});
const files = await drive.files.list({pageSize: limit, fields: `nextPageToken, files(${fields})`, q: queryBuilder, orderBy, pageToken: previosPageToken});
const files = await googleDbUtils.getList(query, user);
const nextPageToken = files.data.nextPageToken;
@@ -77,11 +67,7 @@ class GoogleFileService {
getFileInfo = 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 file = await googleDbUtils.getFileInfo(id, user);
const userID = user._id;
const convertedFile = convertDriveToMongo(file.data, userID);
@@ -91,47 +77,24 @@ class GoogleFileService {
getGoogleMongoQuickList = async(user: UserInterface) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
let query = 'mimeType != "application/vnd.google-apps.folder" and trashed=false';
const files = await drive.files.list({pageSize: 10, fields: `nextPageToken, files(${fields})`, q: query});
const files = await googleDbUtils.getQuickList(user);
const userID = user._id
const convertedFiles = convertDriveListToMongoList(files.data.files, userID);
const quickList = await fileService.getQuickList(user);
let combinedData = [...convertedFiles, ...quickList]
combinedData = combinedData.sort((a, b) => {
const convertedDateA = new Date(a.uploadDate).getTime();
const convertedDateB = new Date(b.uploadDate).getTime();
return convertedDateB - convertedDateA;
})
const sortedGoogleMongoQuickList = sortGoogleMongoQuickFiles(convertedFiles, quickList);
if (combinedData.length >= 10) {
combinedData = combinedData.slice(0, 10);
}
return combinedData;
return sortedGoogleMongoQuickList;
}
getGoogleMongoSuggestedList = async(user: UserInterface, searchQuery: string) => {
const driveQuery = `name contains "${searchQuery}" and mimeType != "application/vnd.google-apps.folder" and trashed=false`
const driveQueryFolder = `name contains "${searchQuery}" and mimeType = "application/vnd.google-apps.folder" and trashed=false`
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const files = await drive.files.list({pageSize: 10, fields: `nextPageToken, files(${fields})`, q: driveQuery});
const folders = await drive.files.list({pageSize: 10, fields: `nextPageToken, files(${fields})`, q: driveQueryFolder});
const {files, folders} = await googleDbUtils.getSuggestedList(searchQuery, user);
const userID = user._id;
const convertedFiles = convertDriveListToMongoList(files.data.files, userID);
const convertedFolders = convertDriveFoldersToMongoFolders(folders.data.files, userID);
@@ -145,28 +108,17 @@ class GoogleFileService {
renameFile = async(user: UserInterface, fileID: 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 googleDbUtils.renameFile(fileID, title, user);
}
removeFile = async(user: UserInterface, fileID: string) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
await drive.files.delete({fileId:fileID});
await googleDbUtils.removeFile(fileID, user);
}
downloadFile = async(user: UserInterface, fileID: string, res: Response) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const fileMetadata = await drive.files.get({fileId: fileID, fields: "*"})
const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user);
res.set('Content-Type', 'binary/octet-stream');
res.set('Content-Disposition', 'attachment; filename="' + fileMetadata.data.name! + '"');
@@ -195,10 +147,7 @@ class GoogleFileService {
downloadDoc = async(user: UserInterface, fileID: string, res: Response) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const fileMetadata = await drive.files.get({fileId: fileID, fields: "*"})
const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user);
res.set('Content-Type', 'binary/octet-stream');
res.set('Content-Disposition', 'attachment; filename="' + fileMetadata.data.name! + ".pdf" + '"');
@@ -223,10 +172,7 @@ class GoogleFileService {
getThumbnail = async(user: UserInterface, fileID: string, res: Response) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const fileMetadata = await drive.files.get({fileId: fileID, fields: "*"})
const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user);
res.set('Content-Type', 'binary/octet-stream');
res.set('Content-Disposition', 'attachment; filename="' + fileMetadata.data.name! + '"');
@@ -254,10 +200,7 @@ class GoogleFileService {
getFullThumbnail = async(user: UserInterface, fileID: string, res: Response) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const fileMetadata = await drive.files.get({fileId: fileID, fields: "*"})
const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user);
res.set('Content-Type', 'binary/octet-stream');
res.set('Content-Disposition', 'attachment; filename="' + fileMetadata.data.name! + '"');
@@ -289,10 +232,7 @@ class GoogleFileService {
const currentUUID = uuid.v4();
tempStorage[tempUUID] = currentUUID;
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const fileMetadata = await drive.files.get({fileId: fileID, fields: "*"})
const {fileMetadata, drive} = await googleDbUtils.getDownloadFileMetadata(fileID, user);
const fileSize = +fileMetadata.data.size!
@@ -406,72 +346,19 @@ class GoogleFileService {
moveFile = async(user: UserInterface, fileID: string, parentID: string) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const previousFile = await drive.files.get({
fileId: fileID,
fields: "*"
})
const previousParent = previousFile.data.parents![0];
await drive.files.update({
fileId: fileID,
addParents: parentID,
removeParents: previousParent,
fields: fields
})
await googleDbUtils.moveFile(fileID, parentID, user);
}
makeFilePublic = async(user: UserInterface, fileID: string) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const publicFile = await drive.permissions.create({
requestBody: {
type: "anyone",
role: "reader"
},
fileId: fileID,
fields: "*"
})
const fileDetails = await drive.files.get({
fileId: fileID,
fields: fields
})
const publicURL = fileDetails.data.webViewLink!;
const publicURL = await googleDbUtils.makeFilePublic(fileID, user);
return publicURL;
}
removePublicLink = async(user: UserInterface, fileID: string) => {
const oauth2Client = await getGoogleAuth(user);
const drive = google.drive({version:"v3", auth: oauth2Client});
const fileMetadata = await drive.files.get({
fileId: fileID,
fields: "*",
})
const permissions = await drive.permissions.get({
fileId: fileID,
permissionId: fileMetadata.data.permissionIds![0]
})
console.log(permissions.data)
await drive.permissions.delete({
fileId: fileID,
permissionId: fileMetadata.data.permissionIds![0]
})
await googleDbUtils.removePublicLink(fileID, user);
}
}
+1
View File
@@ -1,4 +1,5 @@
import videoChecker from "./videoChecker";
import {FileInterface} from "../models/file";
const convertDriveToMongo = (driveObj: any, ownerID: string, pageToken?: string | undefined | null) => {
@@ -0,0 +1,19 @@
const sortGoogleMongoQuickFiles = (convertedFiles: any[], quickList: any[]) => {
let combinedData = [...convertedFiles, ...quickList]
combinedData = combinedData.sort((a, b) => {
const convertedDateA = new Date(a.uploadDate).getTime();
const convertedDateB = new Date(b.uploadDate).getTime();
return convertedDateB - convertedDateA;
})
if (combinedData.length >= 10) {
combinedData = combinedData.slice(0, 10);
}
return combinedData;
}
export default sortGoogleMongoQuickFiles;