feat(search-bar) = added in cloudpage

This commit is contained in:
2025-09-30 22:21:30 +05:30
parent d2d3d1bbb1
commit 31ed528d84
7 changed files with 638 additions and 22 deletions

View File

@@ -513,7 +513,14 @@ router.get(
if (!q) return sendError(res, 400, "Missing search query parameter 'q'");
try {
const { data, total } = await storage.searchFolders(q, limit, offset);
const parentId = null;
const { data, total } = await storage.searchFolders(
q,
limit,
offset,
parentId
);
return res.json({ error: false, data, totalCount: total });
} catch (err) {
return sendError(res, 500, "Folder search failed");

View File

@@ -95,7 +95,8 @@ export interface IStorage {
searchFolders(
q: string,
limit: number,
offset: number
offset: number,
parentId?: number | null
): Promise<{ data: CloudFolder[]; total: number }>;
searchFiles(
q: string,
@@ -400,16 +401,34 @@ export const cloudStorageStorage: IStorage = {
},
// --- SEARCH ---
async searchFolders(q: string, limit = 20, offset = 0) {
async searchFolders(
q: string,
limit = 20,
offset = 0,
parentId?: number | null
) {
// Build where clause
const where: any = {
name: { contains: q, mode: "insensitive" },
};
// If parentId is explicitly provided:
// - parentId === null -> top-level folders (parent IS NULL)
// - parentId === number -> children of that folder
// If parentId is undefined -> search across all folders (no parent filter)
if (parentId !== undefined) {
where.parentId = parentId;
}
const [folders, total] = await Promise.all([
db.cloudFolder.findMany({
where: { name: { contains: q, mode: "insensitive" } },
where,
orderBy: { name: "asc" },
skip: offset,
take: limit,
}),
db.cloudFolder.count({
where: { name: { contains: q, mode: "insensitive" } },
where,
}),
]);
return { data: folders as unknown as CloudFolder[], total };