237 lines
5.1 KiB
TypeScript
237 lines
5.1 KiB
TypeScript
import Folder, { FolderInterface } from "../../models/folder-model";
|
|
import { ObjectId } from "mongodb";
|
|
|
|
class DbUtil {
|
|
constructor() {}
|
|
|
|
getFolderSearchList = async (
|
|
userID: string,
|
|
searchQuery: RegExp,
|
|
trashMode: boolean
|
|
) => {
|
|
let query: any = {
|
|
owner: userID,
|
|
name: searchQuery,
|
|
trashed: trashMode ? true : null,
|
|
};
|
|
|
|
const folderList = await Folder.find(query).limit(10);
|
|
|
|
return folderList;
|
|
};
|
|
|
|
getFolderInfo = async (folderID: string, userID: string) => {
|
|
const folder = await Folder.findOne({
|
|
owner: userID,
|
|
_id: new ObjectId(folderID),
|
|
});
|
|
|
|
return folder;
|
|
};
|
|
|
|
getFolderListByParent = async (
|
|
userID: string,
|
|
parent: string,
|
|
sortBy: string,
|
|
s3Enabled: boolean,
|
|
type: string,
|
|
storageType: string,
|
|
itemType: string,
|
|
trashMode: boolean
|
|
) => {
|
|
let query: any = { owner: userID, parent: parent };
|
|
|
|
if (!s3Enabled) {
|
|
query = { ...query, personalFolder: null };
|
|
}
|
|
|
|
if (type) {
|
|
if (type === "mongo") {
|
|
query = { ...query, personalFolder: null };
|
|
} else if (type === "s3") {
|
|
query = { ...query, personalFolder: true };
|
|
}
|
|
}
|
|
|
|
if (itemType) {
|
|
if (itemType === "personal") query = { ...query, personalFolder: true };
|
|
if (itemType === "nonpersonal")
|
|
query = { ...query, personalFolder: null };
|
|
}
|
|
|
|
if (trashMode) {
|
|
query = { ...query, trashed: true };
|
|
} else {
|
|
query = { ...query, trashed: null };
|
|
}
|
|
|
|
const folderList = await Folder.find(query).sort(sortBy);
|
|
|
|
return folderList;
|
|
};
|
|
|
|
getFolderListBySearch = async (
|
|
userID: string,
|
|
searchQuery: string,
|
|
sortBy: string,
|
|
type: string,
|
|
parent: string,
|
|
storageType: string,
|
|
folderSearch: boolean,
|
|
itemType: string,
|
|
s3Enabled: boolean,
|
|
trashMode: boolean
|
|
) => {
|
|
let query: any = { name: searchQuery, owner: userID };
|
|
|
|
if (type) {
|
|
if (type === "mongo") {
|
|
query = { ...query, personalFolder: null };
|
|
} else {
|
|
query = { ...query, personalFolder: true };
|
|
}
|
|
}
|
|
|
|
if (storageType === "s3") {
|
|
query = { ...query, personalFolder: true };
|
|
}
|
|
|
|
if (parent && (parent !== "/" || folderSearch)) {
|
|
query = { ...query, parent };
|
|
}
|
|
|
|
if (!s3Enabled) {
|
|
query = { ...query, personalFolder: null };
|
|
}
|
|
|
|
if (itemType) {
|
|
if (itemType === "personal") query = { ...query, personalFolder: true };
|
|
if (itemType === "nonpersonal")
|
|
query = { ...query, personalFolder: null };
|
|
}
|
|
|
|
if (trashMode) {
|
|
query = { ...query, trashed: true };
|
|
} else {
|
|
query = { ...query, trashed: null };
|
|
}
|
|
|
|
const folderList = await Folder.find(query).sort(sortBy);
|
|
|
|
return folderList;
|
|
};
|
|
|
|
moveFolder = async (
|
|
folderID: string,
|
|
userID: string,
|
|
parent: string,
|
|
parentList: string[]
|
|
) => {
|
|
const folder = (await Folder.findOneAndUpdate(
|
|
{ _id: new ObjectId(folderID), owner: userID },
|
|
{ $set: { parent: parent, parentList: parentList }, new: true }
|
|
)) as FolderInterface;
|
|
|
|
return folder;
|
|
};
|
|
|
|
renameFolder = async (folderID: string, userID: string, title: string) => {
|
|
const folder = await Folder.findOneAndUpdate(
|
|
{ _id: new ObjectId(folderID), owner: userID },
|
|
{ $set: { name: title } }
|
|
);
|
|
|
|
return folder;
|
|
};
|
|
|
|
findAllFoldersByParent = async (parentID: string, userID: string) => {
|
|
const folderList = await Folder.find({
|
|
parentList: parentID,
|
|
owner: userID,
|
|
});
|
|
|
|
return folderList;
|
|
};
|
|
|
|
trashFoldersByParent = async (parentList: string[], userID: string) => {
|
|
const result = await Folder.updateMany(
|
|
{
|
|
owner: userID,
|
|
parentList: { $all: parentList },
|
|
},
|
|
{
|
|
$set: {
|
|
trashed: true,
|
|
},
|
|
}
|
|
);
|
|
return result;
|
|
};
|
|
|
|
restoreFoldersByParent = async (parentList: string[], userID: string) => {
|
|
const result = await Folder.updateMany(
|
|
{
|
|
owner: userID,
|
|
parentList: { $all: parentList },
|
|
},
|
|
{
|
|
$set: {
|
|
trashed: null,
|
|
},
|
|
}
|
|
);
|
|
return result;
|
|
};
|
|
|
|
getMoveFolderList = async (
|
|
userID: string,
|
|
parent = "/",
|
|
search?: string,
|
|
folderID?: string,
|
|
currentParent?: string
|
|
) => {
|
|
let query: any = {
|
|
owner: userID,
|
|
};
|
|
|
|
const idQuery = [];
|
|
|
|
// if (currentParent && currentParent !== "/") {
|
|
// idQuery.push(currentParent);
|
|
// }
|
|
|
|
if (folderID) {
|
|
query.parentList = { $ne: folderID };
|
|
idQuery.push(folderID);
|
|
}
|
|
|
|
query._id = { $nin: idQuery };
|
|
|
|
if (!search || search === "") {
|
|
query.parent = parent;
|
|
}
|
|
|
|
if (search && search !== "") {
|
|
query.name = new RegExp(search, "i");
|
|
}
|
|
|
|
const result = await Folder.find(query).sort({ createdAt: -1 });
|
|
|
|
return result;
|
|
};
|
|
|
|
getFolderListByIncludedParent = async (userID: string, parent: string) => {
|
|
const folderList = await Folder.find({
|
|
owner: userID,
|
|
parentList: {
|
|
$in: parent,
|
|
},
|
|
trashed: null,
|
|
});
|
|
|
|
return folderList;
|
|
};
|
|
}
|
|
|
|
export default DbUtil;
|