164 lines
5.1 KiB
TypeScript
164 lines
5.1 KiB
TypeScript
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";
|
|
|
|
const fields = 'id, name, size, modifiedTime, hasThumbnail, parents, mimeType, thumbnailLink, webViewLink, shared';
|
|
|
|
class GoogleDbUtil {
|
|
|
|
constructor() {
|
|
|
|
}
|
|
|
|
getList = async(query: googleQueryType, user: UserInterface) => {
|
|
|
|
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});
|
|
|
|
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; |