Files
myDrive/backend/utils/createQuery.ts
T

65 lines
1.6 KiB
TypeScript

import s3 from "../db/connections/s3";
import { ObjectId } from "mongodb";
import { FileListQueryType } from "../types/file-types";
export interface QueryInterface {
"metadata.owner": ObjectId | string;
"metadata.parent"?: string;
filename?:
| string
| RegExp
| {
$lt?: string;
$gt?: string;
};
uploadDate?: {
$lt?: Date;
$gt?: Date;
};
"metadata.personalFile"?: boolean | null;
"metadata.trashed"?: boolean | null;
"metadata.hasThumbnail"?: boolean | null;
}
const createQuery = ({
userID,
search,
parent,
startAtDate,
startAtName,
trashMode,
mediaMode,
sortBy,
}: FileListQueryType) => {
let query: QueryInterface = { "metadata.owner": userID };
if (search && search !== "") {
query = { ...query, filename: new RegExp(search, "i") };
} else {
query = { ...query, "metadata.parent": parent };
}
if (sortBy === "date_desc" && startAtDate) {
query = { ...query, uploadDate: { $lt: new Date(startAtDate) } };
} else if (sortBy === "date_asc" && startAtDate) {
query = { ...query, uploadDate: { $gt: new Date(startAtDate) } };
} else if (sortBy === "alp_desc" && startAtName) {
query = { ...query, filename: { $lt: startAtName } };
} else if (sortBy === "alp_asc" && startAtName) {
query = { ...query, filename: { $gt: startAtName } };
}
if (trashMode) {
query = { ...query, "metadata.trashed": true };
} else {
query = { ...query, "metadata.trashed": null };
}
if (mediaMode) {
query = { ...query, "metadata.hasThumbnail": true };
}
return query;
};
export default createQuery;