From 0e7db2af8db9173245fffdce1c88cf6d68ea2440 Mon Sep 17 00:00:00 2001 From: Nivetharamesh Date: Fri, 16 May 2025 12:25:00 +0530 Subject: [PATCH] RecentlyViewed API, view API, home page file added --- src/api-server/Routes/homepageRoutes.ts | 7 +++ src/api-server/app.ts | 14 +++--- .../controller/home/recentsControllers.ts | 46 +++++++++++++++++++ .../controller/project/projectController.ts | 2 + src/shared/model/project/project-model.ts | 2 + .../services/home/recentDatasService.ts | 34 ++++++++++++++ .../services/project/project-Services.ts | 20 ++++++-- 7 files changed, 115 insertions(+), 10 deletions(-) create mode 100644 src/api-server/Routes/homepageRoutes.ts create mode 100644 src/api-server/controller/home/recentsControllers.ts create mode 100644 src/shared/services/home/recentDatasService.ts diff --git a/src/api-server/Routes/homepageRoutes.ts b/src/api-server/Routes/homepageRoutes.ts new file mode 100644 index 0000000..f84e818 --- /dev/null +++ b/src/api-server/Routes/homepageRoutes.ts @@ -0,0 +1,7 @@ +import * as express from "express"; +import { recentDataController } from "../controller/home/recentsControllers.ts"; + +const homePageRouter = express.Router(); + +homePageRouter.get("/RecentlyViewed/:userId/:organization", recentDataController); +export default homePageRouter; diff --git a/src/api-server/app.ts b/src/api-server/app.ts index aa446f2..c4cf874 100644 --- a/src/api-server/app.ts +++ b/src/api-server/app.ts @@ -21,11 +21,12 @@ import widget3dRoutes from "./Routes/widget3dRoutes.ts"; import productRouter from "./Routes/productRoutes.ts"; import projectRouter from "./Routes/projectRoutes.ts"; import trashRouter from "./Routes/trashRoutes.ts"; +import homePageRouter from "./Routes/homepageRoutes.ts"; // import productFlowRoutes from "./Routes/productFlowRouts.ts"; const app = express(); app.use(cors()); -// const allowedOriginsDev = [ +// const allowedOriginsDev = [ // "http://localhost:3000", // "http://192.168.0.183:8200", // "http://192.168.0.101:8200", @@ -45,11 +46,11 @@ app.use(cors()); // ) { // return callback(null, true); // } - + // if (typeof allowedOrigin === "string" && origin === allowedOrigin) { // return callback(null, true); // } - + // return callback(new Error("Not allowed by CORS")); // }, // credentials: true @@ -57,7 +58,7 @@ app.use(cors()); app.use(express.json({ limit: "50mb" })); app.use( - express.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 }) + express.urlencoded({ limit: "50mb", extended: true, parameterLimit: 50000 }) ); dotenv.config(); app.get("/", (req, res) => { @@ -87,6 +88,7 @@ app.use("/api/v2", templateRoutes); app.use("/api/v2", widget3dRoutes); app.use("/api/v2", productRouter); // app.use("/api/v2", productFlowRoutes); -app.use("/api/v1",projectRouter) -app.use("/api/v1",trashRouter) +app.use("/api/v1", projectRouter); +app.use("/api/v1", trashRouter); +app.use("/api/v1", homePageRouter); export default app; diff --git a/src/api-server/controller/home/recentsControllers.ts b/src/api-server/controller/home/recentsControllers.ts new file mode 100644 index 0000000..34b43b3 --- /dev/null +++ b/src/api-server/controller/home/recentsControllers.ts @@ -0,0 +1,46 @@ +import { Request, Response } from "express"; +import { RecentlyAdded } from "../../../shared/services/home/recentDatasService.ts"; + +export const recentDataController = async ( + req: Request, + res: Response +): Promise => { + try { + const { userId, organization } = req.params; + if (!userId || !organization) { + res.status(400).json({ + message: "All fields are required", + }); + return; + } + const result = await RecentlyAdded({ userId, organization }); + + switch (result.status) { + case "User not found": + res.status(404).json({ + message: "User not found", + }); + break; + case "Datas were empty": + res.status(200).json({ + RecentlyViewed: [], + }); + break; + case "Success": + res.status(200).json({ + RecentlyViewed: result.data, + }); + break; + default: + res.status(500).json({ + message: "Internal server error", + }); + break; + } + } catch (error) { + res.status(500).json({ + message: "Unknown error", + }); + return; + } +}; diff --git a/src/api-server/controller/project/projectController.ts b/src/api-server/controller/project/projectController.ts index a061d11..aa21ba9 100644 --- a/src/api-server/controller/project/projectController.ts +++ b/src/api-server/controller/project/projectController.ts @@ -186,6 +186,7 @@ export const updateProjectController = async ( }; export const ViewData = async (req: Request, res: Response): Promise => { try { + console.log("req.query: ", req.query); const { projectId, organization, userId } = req.query as { organization: string; projectId: string; @@ -202,6 +203,7 @@ export const ViewData = async (req: Request, res: Response): Promise => { organization, userId, }); + console.log("result: ", result); switch (result?.status) { case "Project not found": res.status(404).json({ diff --git a/src/shared/model/project/project-model.ts b/src/shared/model/project/project-model.ts index 09a8fd2..e3bf659 100644 --- a/src/shared/model/project/project-model.ts +++ b/src/shared/model/project/project-model.ts @@ -11,6 +11,7 @@ export interface Project extends Document { thumbnail: string; sharedUsers: []; DeletedAt: Date; + isViewed: number; total_versions: string; Present_version: string; } @@ -24,6 +25,7 @@ const projectSchema: Schema = new Schema( sharedUsers: [{ type: Schema.Types.ObjectId, ref: "user" }], DeletedAt: { type: Date, default: null }, isDeleted: { type: Boolean, default: false }, + isViewed: { type: Number }, total_versions: { type: String }, Present_version: { type: String }, }, diff --git a/src/shared/services/home/recentDatasService.ts b/src/shared/services/home/recentDatasService.ts new file mode 100644 index 0000000..b8a12d8 --- /dev/null +++ b/src/shared/services/home/recentDatasService.ts @@ -0,0 +1,34 @@ +import projectModel from "../../model/project/project-model.ts"; +import userModel from "../../model/user-Model.ts"; +import { existingUser } from "../helpers/ProjecthelperFn.ts"; + +interface IRecentData { + organization: string; + userId: string; +} +export const RecentlyAdded = async (data: IRecentData) => { + try { + const { userId, organization } = data; + const userExisting = await existingUser(userId, organization); + if (!userExisting) return { status: "User not found" }; + const userRecentData = await userModel(organization) + .findOne({ _id: userId }) + .populate({ + path: "recentlyViewed", + model: projectModel(organization), + select: "_id projectName createdBy thumbnail createdAt isViewed", + }); + let RecentDatas = []; + userRecentData.recentlyViewed.map(async (project: object) => { + console.log("project: ", typeof project); + const projectExisting = await projectModel(organization).findOne({ + _id: project, + isArchive: false, + }); + }); + if (!userRecentData) return { status: "Datas were empty" }; + return { status: "Success", data: userRecentData.recentlyViewed }; + } catch (error) { + return { status: error }; + } +}; diff --git a/src/shared/services/project/project-Services.ts b/src/shared/services/project/project-Services.ts index 85b7495..7a23cad 100644 --- a/src/shared/services/project/project-Services.ts +++ b/src/shared/services/project/project-Services.ts @@ -179,11 +179,23 @@ export const viewProject = async (data: ProjectInterface) => { newArr.pop(); } } - await userExisting.updateOne( - { _id: userId, isArchive: false }, - { recentlyViewed: newArr } + await userModel(organization).updateOne( + { _id: userId }, + { recentlyViewed: newArr }, + { new: true } ); - return { data: existingProject }; + const projectData = await projectModel(organization) + .findOneAndUpdate( + { + _id: projectId, + createdBy: userId, + isArchive: false, + }, + { isViewed: Date.now() }, + { new: true } + ) + .select("_id projectName createdBy thumbnail createdAt"); + return { status: "Success", data: projectData }; } catch (error: unknown) { return { status: error }; }