import projectModel from "../../V1Models/Project/project-model.ts"; import userModel from "../../model/user-Model.ts"; import UsersDataModel from "../../V1Models/Auth/user.ts"; import { existingUser } from "../helpers/ProjecthelperFn.ts"; interface IRecentData { organization: string; userId: string; role: string; } interface IProject { _id: string; projectName: string; createdBy: string; thumbnail?: string; createdAt: Date; isViewed?: number; } interface searchProjectInterface { searchName: string; userId: string; organization: string; } interface RoleFilter { isArchive: boolean; createdBy?: string; } export const RecentlyAdded = async (data: IRecentData) => { try { const { userId, organization, role } = data; const userExisting = await existingUser(userId, organization); if (!userExisting) return { status: "User not found" }; const userRecentData = await UsersDataModel(organization) .findOne({ userId: userId, isArchive: false }) .populate({ path: "recentlyViewed", model: projectModel(organization), select: "_id", }); let filter = { isArchive: false } as RoleFilter; // if (role === "User") { // filter.createdBy = userId; // } const populatedProjects = userRecentData.recentlyViewed as IProject[]; const RecentDatas = await Promise.all( populatedProjects.map(async (project) => { const projectExisting = await projectModel(organization) .findOne(filter) .select("_id projectName createdBy thumbnail createdAt isViewed"); return projectExisting; }) ); const filteredProjects = RecentDatas.filter(Boolean); return { status: "Success", data: filteredProjects }; } catch (error) { return { status: error }; } }; export const searchProject = async (data: searchProjectInterface) => { try { const { userId, organization, searchName } = data; const userExisting = await existingUser(userId, organization); if (!userExisting) return { status: "User not found" }; const findprojectName = await projectModel(organization).find({ projectName: { $regex: `${searchName}`, $options: "i" }, // 'i' makes it case-insensitive isArchive: false, }); if (!findprojectName || findprojectName.length === 0) return { status: "Project not found" }; return { status: "Success", data: findprojectName }; } catch (error: unknown) { return { status: error }; } }; export const searchTrashProject = async (data: searchProjectInterface) => { try { const { userId, organization, searchName } = data; const userExisting = await existingUser(userId, organization); if (!userExisting) return { status: "User not found" }; const findprojectName = await projectModel(organization).find({ projectName: { $regex: `${searchName}`, $options: "i" }, isArchive: true, isDeleted: false, }); if (!findprojectName || findprojectName.length === 0) return { status: "Project not found" }; return { status: "Success", data: findprojectName }; } catch (error: unknown) { return { status: error }; } };