Files
myDrive/backend/db/utils/fileUtils/index.ts
T

161 lines
4.8 KiB
TypeScript

import mongoose from "../../mongoose";
import {ObjectID} from "mongodb";
import {FileInterface} from "../../../models/file";
import {UserInterface} from "../../../models/user";
import { QueryInterface } from "../../../utils/createQuery";
const conn = mongoose.connection;
class DbUtil {
constructor() {
}
getPublicFile = async(fileID: string) => {
let file = await conn.db.collection("fs.files")
.findOne({"_id": new ObjectID(fileID)}) as FileInterface;
return file;
}
removeOneTimePublicLink = async(fileID: string) => {
const file = await conn.db.collection("fs.files")
.findOneAndUpdate({"_id": new ObjectID(fileID)}, {
"$unset": {"metadata.linkType": "", "metadata.link": ""}}) as FileInterface;
return file;
}
removeLink = async(fileID: string, userID: string) => {
const file = await conn.db.collection("fs.files")
.findOneAndUpdate({"_id": new ObjectID(fileID),
"metadata.owner": userID},
{"$unset": {"metadata.linkType": "", "metadata.link": ""}}) as FileInterface;
return file;
}
makePublic = async(fileID: string, userID: string, token: string) => {
const file = await conn.db.collection("fs.files")
.findOneAndUpdate({"_id": new ObjectID(fileID),
"metadata.owner": userID},
{"$set": {"metadata.linkType": "public", "metadata.link": token}}) as FileInterface
return file;
}
getPublicInfo = async(fileID: string, tempToken: string) => {
const file = await conn.db.collection("fs.files")
.findOne({"_id": new ObjectID(fileID), "metadata.link": tempToken}) as FileInterface;
return file;
}
makeOneTimePublic = async(fileID: string, userID: string, token: string) => {
const file = await conn.db.collection("fs.files")
.findOneAndUpdate({"_id": new ObjectID(fileID),
"metadata.owner": userID},
{"$set": {"metadata.linkType": "one", "metadata.link": token}}) as FileInterface;
return file;
}
getFileInfo = async(fileID: string, userID: string) => {
const file = await conn.db.collection("fs.files")
.findOne({"metadata.owner": userID, "_id": new ObjectID(fileID)}) as FileInterface;
return file;
}
getQuickList = async(userID: string) => {
const fileList = await conn.db.collection("fs.files")
.find({"metadata.owner": userID})
.sort({uploadDate: -1})
.limit(10)
.toArray() as FileInterface[];
return fileList;
}
getList = async(queryObj: QueryInterface, sortBy: string, limit: number) => {
const fileList = await conn.db.collection("fs.files")
.find(queryObj)
.sort(sortBy)
.limit(limit)
.toArray() as FileInterface[];
return fileList;
}
removeTempToken = async(user: UserInterface, tempToken: string) => {
user.tempTokens = user.tempTokens.filter((filterToken) => {
return filterToken.token !== tempToken;
});
return user;
}
getFileSearchList = async(userID: string, searchQuery: RegExp) => {
const fileList = await conn.db.collection("fs.files")
.find({"metadata.owner": userID, "filename": searchQuery})
.limit(10)
.toArray() as FileInterface[];
return fileList;
}
renameFile = async(fileID: string, userID: string, title: string) => {
const file = await conn.db.collection("fs.files")
.findOneAndUpdate({"_id": new ObjectID(fileID),
"metadata.owner": userID}, {"$set": {"filename": title}}) as FileInterface;
return file;
}
moveFile = async(fileID: string, userID: string, parent: string, parentList: string) => {
const file = await conn.db.collection("fs.files")
.findOneAndUpdate({"_id": new ObjectID(fileID),
"metadata.owner": userID}, {"$set": {"metadata.parent": parent, "metadata.parentList": parentList}})
return file;
}
getFileListByParent = async(userID: string, parentListString: string) => {
const fileList = await conn.db.collection("fs.files")
.find({"metadata.owner": userID,
"metadata.parentList": {$regex : `.*${parentListString}.*`}}).toArray() as FileInterface[];
return fileList;
}
getFileListByOwner = async(userID: string) => {
const fileList = await conn.db.collection("fs.files")
.find({"metadata.owner": userID}).toArray() as FileInterface[];
return fileList;
}
removeChunksByID = async(fileID: string) => {
await conn.db.collection("fs.chunks").deleteMany({files_id: fileID});
}
}
export default DbUtil;