93 lines
3.1 KiB
TypeScript
93 lines
3.1 KiB
TypeScript
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 };
|
|
}
|
|
};
|