diff --git a/src/api-server/Routes/zoneRoutes.ts b/src/api-server/Routes/zoneRoutes.ts index 79e6354..95ba45b 100644 --- a/src/api-server/Routes/zoneRoutes.ts +++ b/src/api-server/Routes/zoneRoutes.ts @@ -1,5 +1,6 @@ import * as express from "express"; import { ZoneService } from "../controller/lines/zoneService.ts"; +import { zone } from "../controller/lines/zone-Services.ts"; const router = express.Router(); /** @@ -539,4 +540,6 @@ router.get("/A_zone/:zoneId/:organization", ZoneService.ZoneData); */ router.patch("/zone/:zoneId", ZoneService.deleteAZone); //delete Zone router.patch("/zones/lockedPanels", ZoneService.lockedPanel); + +router.get("/findZones/:organization", zone.getZones); export default router; diff --git a/src/api-server/V1/v1Controllers/builderController/v1LineController.ts b/src/api-server/V1/v1Controllers/builderController/v1LineController.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api-server/V1/v1Controllers/builderController/v1assetController.ts b/src/api-server/V1/v1Controllers/builderController/v1assetController.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api-server/V1/v1Controllers/builderController/v1wallController.ts b/src/api-server/V1/v1Controllers/builderController/v1wallController.ts new file mode 100644 index 0000000..201f8b1 --- /dev/null +++ b/src/api-server/V1/v1Controllers/builderController/v1wallController.ts @@ -0,0 +1,69 @@ +import { Request, Response } from "express"; +import { WallItems } from "../../../../shared/services/builder/wallService.ts"; +import { error } from "console"; +import { AuthenticatedRequest } from "../../../../shared/utils/token.ts"; + +export const WallSetup = async ( + req: AuthenticatedRequest, + res: Response +): Promise => { + try { + const { userId, organization } = req.user || {}; + const { + modelUuid, + modelName, + position, + type, + csgposition, + csgscale, + quaternion, + scale, + // versionId + projectId, + } = req.body; + if ( + !modelUuid || + !modelName || + !position || + !type || + !projectId || + !csgscale || + !csgposition || + // !versionId || + !quaternion || + !scale || + !organization + ) { + res.status(400).json({ + message: "All fields are required!", + }); + return; + } + const result = await WallItems.setWallItems({ + projectId, + modelUuid, + // versionId, + modelName, + position, + type, + csgposition, + csgscale, + quaternion, + scale, + organization, + }); + switch (result.state) { + case "Updated successfully": + res.status(201).json(result.data); + break; + case "wall Item created successfully": + res.status(201).json(result.data); + break; + default: + res.status(500).json(error); + break; + } + } catch (error: unknown) { + res.status(500).json({ message: "Unknown error" }); + } +}; diff --git a/src/api-server/V1/v1Controllers/builderController/v1zoneController.ts b/src/api-server/V1/v1Controllers/builderController/v1zoneController.ts new file mode 100644 index 0000000..272938b --- /dev/null +++ b/src/api-server/V1/v1Controllers/builderController/v1zoneController.ts @@ -0,0 +1,115 @@ +import { Request, Response } from "express"; + +import { AuthenticatedRequest } from "../../../../shared/utils/token.ts"; +import { + GetCamers, + SetCamera, +} from "../../../../shared/services/builder/cameraService.ts"; + +export const SetNewCamera = async ( + req: AuthenticatedRequest, + res: Response +): Promise => { + try { + const { organization, role, userId } = req.user || {}; + const { position, target, rotation, projectId, versionId } = req.body; + if ( + !organization || + !role || + !userId || + !position || + !target || + !rotation || + !projectId || + !versionId + ) { + res.status(400).json({ + message: "All fields are required", + }); + return; + } + const data = { + position, + target, + rotation, + projectId, + versionId, + organization, + role, + userId, + }; + const result = await SetCamera(data); + + switch (result.status) { + case "Project not found": + res.status(404).json({ + message: "Project not found", + TrashDatas: [], + }); + break; + + case "Update Success": + res.status(200).json({ + TrashDatas: result.data, + }); + break; + case "Success": + res.status(200).json({ + TrashDatas: result.data, + }); + break; + default: + res.status(500).json({ + message: "Internal server error", + }); + break; + } + } catch (error) { + console.log("error: ", error); + res.status(500).json({ + message: "Unknown error", + }); + } +}; +export const CameraList = async ( + req: AuthenticatedRequest, + res: Response +): Promise => { + try { + const { organization, role, userId } = req.user || {}; + if (!organization || !role || !userId) { + res.status(400).json({ + message: "All fields are required", + }); + return; + } + const result = await GetCamers({ + organization, + role, + userId, + }); + + switch (result.status) { + case "Project not found": + res.status(404).json({ + message: "Project not found", + TrashDatas: [], + }); + break; + case "Success": + res.status(200).json({ + TrashDatas: result.data, + }); + break; + default: + res.status(500).json({ + message: "Internal server error", + }); + break; + } + } catch (error) { + res.status(500).json({ + message: "Unknown error", + }); + } +}; diff --git a/src/api-server/V1/v1Controllers/homeController/v1homeController.ts b/src/api-server/V1/v1Controllers/homeController/v1homeController.ts index 6461f60..ede617d 100644 --- a/src/api-server/V1/v1Controllers/homeController/v1homeController.ts +++ b/src/api-server/V1/v1Controllers/homeController/v1homeController.ts @@ -50,21 +50,20 @@ export const recentDataController = async ( } }; export const searchProjectController = async ( - req: Request, + req: AuthenticatedRequest, res: Response ): Promise => { try { - const { searchName, organization, userId } = req.query as { - organization: string; - searchName: string; - userId: string; - }; - if (!userId || !organization || !searchName) { + const { userId, organization, role } = req.user || {}; + if (!userId || !organization || !role) { res.status(400).json({ message: "All fields are required", }); return; } + const { searchName } = req.query as { + searchName: string; + }; const result = await searchProject({ searchName, organization, @@ -100,21 +99,21 @@ export const searchProjectController = async ( } }; export const searchTrashProjectController = async ( - req: Request, + req: AuthenticatedRequest, res: Response ): Promise => { try { - const { searchName, organization, userId } = req.query as { - organization: string; - searchName: string; - userId: string; - }; - if (!userId || !organization || !searchName) { + const { userId, organization, role } = req.user || {}; + if (!userId || !organization || !role) { res.status(400).json({ message: "All fields are required", }); return; } + const { searchName } = req.query as { + searchName: string; + }; + const result = await searchTrashProject({ searchName, organization, diff --git a/src/api-server/V1/v1Controllers/projectController/v1projectController.ts b/src/api-server/V1/v1Controllers/projectController/v1projectController.ts index 659b186..0cc9c66 100644 --- a/src/api-server/V1/v1Controllers/projectController/v1projectController.ts +++ b/src/api-server/V1/v1Controllers/projectController/v1projectController.ts @@ -14,7 +14,6 @@ export const createProjectController = async ( ): Promise => { try { const { userId, organization } = req.user || {}; - console.log("req.user: ", req.user); const { projectUuid, thumbnail } = req.body; if (!req.user || !req.user.userId || !req.user.organization) { res.status(401).json({ message: "Unauthorized" }); @@ -82,7 +81,7 @@ export const GetProjects = async ( break; case "Success": - res.status(201).json({ + res.status(200).json({ Projects: result?.Datas, }); break; diff --git a/src/api-server/V1/v1Routes/BuilderRoutes/v1-ZoneRoutes.ts b/src/api-server/V1/v1Routes/BuilderRoutes/v1-ZoneRoutes.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api-server/V1/v1Routes/BuilderRoutes/v1-assetRoutes.ts b/src/api-server/V1/v1Routes/BuilderRoutes/v1-assetRoutes.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api-server/V1/v1Routes/BuilderRoutes/v1-cameraRoutes.ts b/src/api-server/V1/v1Routes/BuilderRoutes/v1-cameraRoutes.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api-server/V1/v1Routes/BuilderRoutes/v1-linesRoutes.ts b/src/api-server/V1/v1Routes/BuilderRoutes/v1-linesRoutes.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api-server/V1/v1Routes/BuilderRoutes/v1-wallRoutes.ts b/src/api-server/V1/v1Routes/BuilderRoutes/v1-wallRoutes.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/api-server/V1/v1Routes/v1-homeRoutes.ts b/src/api-server/V1/v1Routes/v1-homeRoutes.ts index 6f32f0f..f3910ff 100644 --- a/src/api-server/V1/v1Routes/v1-homeRoutes.ts +++ b/src/api-server/V1/v1Routes/v1-homeRoutes.ts @@ -1,7 +1,11 @@ import express from "express"; import { tokenValidator } from "../../../shared/utils/token.ts"; import authorizedRoles from "../../../shared/middleware/rbacMiddleware.ts"; -import { recentDataController } from "../../V1/v1Controllers/homeController/v1homeController.ts"; +import { + recentDataController, + searchProjectController, + searchTrashProjectController, +} from "../../V1/v1Controllers/homeController/v1homeController.ts"; const v1homeRoutes = express.Router(); @@ -9,8 +13,20 @@ const v1homeRoutes = express.Router(); v1homeRoutes.get( "/RecentlyViewed", tokenValidator, - authorizedRoles("Admin", "User"), + // authorizedRoles("Admin", "User"), recentDataController ); +v1homeRoutes.get( + "/searchProjects", + tokenValidator, + // authorizedRoles("Admin", "User"), + searchProjectController +); +v1homeRoutes.get( + "/searchTrashProjects", + tokenValidator, + // authorizedRoles("Admin", "User"), + searchTrashProjectController +); export default v1homeRoutes; diff --git a/src/api-server/V1/v1Routes/v1-projectRoutes.ts b/src/api-server/V1/v1Routes/v1-projectRoutes.ts index 2a7cd50..2f34d24 100644 --- a/src/api-server/V1/v1Routes/v1-projectRoutes.ts +++ b/src/api-server/V1/v1Routes/v1-projectRoutes.ts @@ -16,26 +16,26 @@ v1projectRouter.post("/upsertProject", tokenValidator, createProjectController); v1projectRouter.get( "/Projects", tokenValidator, - authorizedRoles("Admin", "User"), + // authorizedRoles("Admin", "User"), GetProjects ); v1projectRouter.patch( "/Project/archive/:projectId", tokenValidator, - authorizedRoles("Admin", "User"), + // authorizedRoles("Admin", "User"), RemoveProject ); v1projectRouter.patch( "/Project/:projectId", tokenValidator, - authorizedRoles("Admin", "User"), + // authorizedRoles("Admin", "User"), updateProjectController ); v1projectRouter.get( "/Project/:projectId", tokenValidator, - authorizedRoles("Admin", "User"), + // authorizedRoles("Admin", "User"), ViewData ); diff --git a/src/api-server/V1/v1Routes/v1-trashRoutes.ts b/src/api-server/V1/v1Routes/v1-trashRoutes.ts index d2603d1..91eff2c 100644 --- a/src/api-server/V1/v1Routes/v1-trashRoutes.ts +++ b/src/api-server/V1/v1Routes/v1-trashRoutes.ts @@ -7,19 +7,18 @@ import { } from "../../V1/v1Controllers/trashController/v1trashController.ts"; const v1TrashRoutes = express.Router(); - //trash v1TrashRoutes.get( - "/TrashItems ", + "/TrashItems", tokenValidator, - authorizedRoles("Admin", "User"), + // authorizedRoles("Admin", "User"), GetTrashList ); v1TrashRoutes.patch( "/Trash/restore", tokenValidator, - authorizedRoles("Admin", "User"), + // authorizedRoles("Admin", "User"), RestoreTrash ); export default v1TrashRoutes; diff --git a/src/api-server/controller/environments/environments-Services.ts b/src/api-server/controller/environments/environments-Services.ts index 49d92d9..d44af0b 100644 --- a/src/api-server/controller/environments/environments-Services.ts +++ b/src/api-server/controller/environments/environments-Services.ts @@ -11,7 +11,7 @@ export class Environment { shadowVisibility, organization, renderDistance, - limitDistance, + limitDistance, } = req.body; const findvalue = await environmentModel(organization).findOne({ diff --git a/src/api-server/controller/lines/zone-Services.ts b/src/api-server/controller/lines/zone-Services.ts new file mode 100644 index 0000000..9e9a4ba --- /dev/null +++ b/src/api-server/controller/lines/zone-Services.ts @@ -0,0 +1,117 @@ +import { Request, Response } from "express"; +import zoneModel from "../../../shared/model/lines/zone-Model.ts"; +export class zone { + static async setZone(req: Request, res: Response) { + try { + const { organization, userId, zoneData } = req.body; + // console.log('req.body: ', req.body); + const zoneId = zoneData.zoneId; + const points = zoneData.points; + const zoneName = zoneData.zoneName; + const layer = zoneData.layer; + const viewPortCenter = zoneData.viewPortCenter; + const viewPortposition = zoneData.viewPortposition; + const findZoneId = await zoneModel(organization).findOne({ + zoneId: zoneId, + }); + if (findZoneId) { + const updateZone = await zoneModel(organization) + .findOneAndUpdate( + { zoneId: zoneId }, + { + points: points, + viewPortposition: viewPortposition, + viewPortCenter: viewPortCenter, + }, + { new: true } + ) + .select("-_id -__v"); + res.status(201).json({ + message: "zone updated", + data: updateZone, + organization: organization, + }); + } else { + const zoneCreate = await zoneModel(organization).create({ + zoneId, + createBy: userId, + zoneName: zoneName, + points, + layer, + viewPortCenter, + viewPortposition, + }); + const createdZone = await zoneModel(organization) + .findById(zoneCreate._id) + .select("-_id -__v") + .lean(); + res.status(201).json({ + message: "zone created", + data: createdZone, + organization: organization, + }); + } + } catch (error) { + console.log("error: ", error); + res.status(500).json({ message: "Zone not found", error }); + } + } + static async deleteZone(req: Request, res: Response) { + try { + const { organization, userId, zoneId } = req.body; + + const findZoneId = await zoneModel(organization).findOne({ + zoneId: zoneId, + }); + if (findZoneId) { + const deleteZone = await zoneModel(organization) + .findOneAndDelete({ zoneId: zoneId, createBy: userId }) + .select("-_id -__v"); + res.status(201).json({ + message: "zone deleted", + data: deleteZone, + organization: organization, + }); + } else { + res.status(500).json({ message: "Invalid zone ID" }); + } + } catch (error) { + console.log("error: ", error); + res.status(500).json({ message: "Zone not found", error }); + } + } + static async getZones(req: Request, res: Response) { + try { + const { organization, userId } = req.params; + + const findZoneId = await zoneModel(organization) + .find() + .select( + "zoneId zoneName layer points viewPortCenter viewPortposition -_id" + ); + + if (!findZoneId) { + res.status(500).json({ message: "Invalid zone" }); + } + res.status(200).json({ data: findZoneId, organization: organization }); + } catch (error) { + console.log("error: ", error); + res.status(500).json({ message: "Zone not found", error }); + } + } + + static async ZoneData(req: Request, res: Response): Promise { + try { + const organization = req.params.organization; + const zoneId = req.params.zoneId; + const findZone = await zoneModel(organization).findOne({ + zoneId: zoneId, + }); + // .select("zoneName"); + console.log("findZone: ", findZone); + if (findZone) return res.status(200).json(findZone); + } catch (error: any) { + return res.status(500).send(error.message); + } + } +} diff --git a/src/shared/model/user-Model.ts b/src/shared/model/user-Model.ts index ab19c2c..0bab1e7 100644 --- a/src/shared/model/user-Model.ts +++ b/src/shared/model/user-Model.ts @@ -1,4 +1,4 @@ -import { Document, Schema } from "mongoose"; +import { Document, Schema } from "mongoose"; import MainModel from "../connect/mongoose.ts"; export interface User extends Document { userName: String; @@ -49,7 +49,8 @@ const signupschema: Schema = new Schema({ }, }); -const userModel = (db:string) => { +const userModel = (db: string) => { return MainModel(db, "Users", signupschema, "Users") + // return MainModel(db, "UserAuth", signupschema, "UserAuth"); }; export default userModel; diff --git a/src/shared/services/builder/assetService.ts b/src/shared/services/builder/assetService.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/services/builder/lineService.ts b/src/shared/services/builder/lineService.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/services/builder/wallService.ts b/src/shared/services/builder/wallService.ts new file mode 100644 index 0000000..a19859f --- /dev/null +++ b/src/shared/services/builder/wallService.ts @@ -0,0 +1,117 @@ +import { Request, Response } from "express"; +import wallItemModel from "../../../shared/model/builder/assets/wallitems-Model.ts"; +interface IWallSetupData { + modelUuid: string; + modelName: string; + type: string; + csgposition: []; + csgscale: []; + position: []; + quaternion: []; + scale: []; + organization: string; + projectId: string; +} +interface IWallItemResult { + data: {}; + state: string; +} +export class WallItems { + static async setWallItems(data: IWallSetupData): Promise { + try { + const { + modelUuid, + modelName, + position, + type, + csgposition, + csgscale, + quaternion, + scale, + projectId, + organization, + } = data; + const findvalue = await wallItemModel(organization).findOne({ + modelUuid: modelUuid, + }); + + if (findvalue) { + const updatevalue = await wallItemModel(organization).findOneAndUpdate( + { modelUuid: modelUuid, projectId: projectId }, + { + modelName, + position, + type, + csgposition, + csgscale, + quaternion, + scale, + }, + { new: true } // Return the updated document + ); + return { + state: "Updated successfully", + data: updatevalue, + }; + // res.status(201).json(updatevalue); + } else { + const newValue = await wallItemModel(organization).create({ + modelUuid, + modelName, + position, + type, + projectId, + csgposition, + csgscale, + quaternion, + scale, + }); + return { + state: "wall Item created successfully", + data: newValue, + }; + // res.status(201).json(newValue); + } + } catch (error: unknown) { + const err = error as Error; + console.error("Error creating wallitems:", error); + return { + state: "Failed to create wallitems", + data: { message: err.message }, + }; + } + } + static async getWallItems(req: Request, res: Response) { + try { + const { organization } = req.params; + + const findValue = await wallItemModel(organization).find(); + if (!findValue) { + res.status(200).json("wallitems not found"); + } else { + res.status(201).json(findValue); + } + } catch (error) { + console.error("Error get wallitems:", error); + res.status(500).json({ error: "Failed to get wallitems" }); + } + } + static async deleteWallItems(req: Request, res: Response) { + try { + const { modelUuid, modelName, organization } = req.body; + + const findValue = await wallItemModel(organization).findOneAndDelete({ + modelUuid: modelUuid, + modelName: modelName, + }); + if (!findValue) { + res.status(200).json("user not found"); + } else { + res.status(201).json(findValue); + } + } catch (error) { + console.error("Error get wallitems:", error); + res.status(500).json({ error: "Failed to get wallitems" }); + } + } +} diff --git a/src/shared/services/builder/zoneService.ts b/src/shared/services/builder/zoneService.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/services/v1Project/v1projectservice.ts b/src/shared/services/v1Project/v1projectservice.ts index c09a2b4..b5c3dce 100644 --- a/src/shared/services/v1Project/v1projectservice.ts +++ b/src/shared/services/v1Project/v1projectservice.ts @@ -103,9 +103,9 @@ export const GetAllProjects = async (data: GetProjectsInterface) => { await existingUser(userId, organization); if (!existingUser) return { status: "User not found" }; let filter = { isArchive: false } as RoleFilter; - if (role === "User") { - filter.createdBy = userId; - } + // if (role === "User") { + // filter.createdBy = userId; + // } const projectDatas = await projectModel(organization) .find(filter) .select("_id projectName createdBy thumbnail createdAt projectUuid"); @@ -121,9 +121,9 @@ export const DeleteProject = async (data: ProjectInterface) => { const ExistingUser = await existingUser(userId, organization); if (!ExistingUser) return { status: "User not found" }; let filter = { _id: projectId, isArchive: false } as RoleFilter; - if (role === "User") { - filter.createdBy = userId; - } + // if (role === "User") { + // filter.createdBy = userId; + // } const existingProject = await projectModel(organization).findOne(filter); if (!existingProject) return { status: "Project not found" }; const updateProject = await projectModel(organization).findOneAndUpdate( @@ -143,9 +143,9 @@ export const updateProject = async (data: updateProjectInput) => { const ExistingUser = await existingUser(userId, organization); if (!ExistingUser) return { status: "User not found" }; let filter = { _id: projectId, isArchive: false } as RoleFilter; - if (role === "User") { - filter.createdBy = userId; - } + // if (role === "User") { + // filter.createdBy = userId; + // } const existingProject = await projectModel(organization).findOne(filter); if (!existingProject) return { status: "Project not found" }; if (projectName !== undefined) projectName; @@ -173,9 +173,9 @@ export const viewProject = async (data: ProjectInterface) => { isArchive: false, }); let filter = { _id: projectId, isArchive: false } as RoleFilter; - if (role === "User") { - filter.createdBy = userId; - } + // if (role === "User") { + // filter.createdBy = userId; + // } const existingProject = await projectModel(organization).findOne(filter); if (!existingProject) return { status: "Project not found" }; const newArr = RecentUserDoc?.recentlyViewed || []; diff --git a/src/shared/services/v1home/v1homeservice.ts b/src/shared/services/v1home/v1homeservice.ts index 9ff155e..fd66908 100644 --- a/src/shared/services/v1home/v1homeservice.ts +++ b/src/shared/services/v1home/v1homeservice.ts @@ -38,9 +38,9 @@ export const RecentlyAdded = async (data: IRecentData) => { select: "_id", }); let filter = { isArchive: false } as RoleFilter; - if (role === "User") { - filter.createdBy = userId; - } + // if (role === "User") { + // filter.createdBy = userId; + // } const populatedProjects = userRecentData.recentlyViewed as IProject[]; const RecentDatas = await Promise.all( populatedProjects.map(async (project) => { diff --git a/src/shared/services/v1trash/v1trashservice.ts b/src/shared/services/v1trash/v1trashservice.ts index 4e68fe7..8212569 100644 --- a/src/shared/services/v1trash/v1trashservice.ts +++ b/src/shared/services/v1trash/v1trashservice.ts @@ -18,9 +18,9 @@ export const TrashDatas = async (data: IOrg) => { try { const { organization, role, userId } = data; let filter = { isArchive: true, isDeleted: false } as RoleFilter; - if (role === "User") { - filter.createdBy = userId; - } + // if (role === "User") { + // filter.createdBy = userId; + // } const TrashLists = await projectModel(organization).find(filter); if (!TrashLists) return { staus: "Trash is Empty" }; const TrashDocs: any[] = []; @@ -57,9 +57,9 @@ export const RestoreTrashData = async (data: IRestore) => { try { const { projectId, organization, role, userId } = data; let filter = { isArchive: true, _id: projectId } as RoleFilter; - if (role === "User") { - filter.createdBy = userId; - } + // if (role === "User") { + // filter.createdBy = userId; + // } const findProject = await projectModel(organization).findOne(filter); if (!findProject) return { status: "Project not found" }; const restoreData = await projectModel(organization).findOneAndUpdate( diff --git a/src/shared/utils/token.ts b/src/shared/utils/token.ts index 552b29b..b80fcfe 100644 --- a/src/shared/utils/token.ts +++ b/src/shared/utils/token.ts @@ -22,7 +22,7 @@ const tokenGenerator = ( organization: string ) => { const token = Jwt.sign( - { Email: Email, role: role, userId, organization: organization }, + { Email: Email, role: role, userId: userId, organization: organization }, jwt_secret, { expiresIn: "3h", @@ -37,7 +37,7 @@ const tokenRefreshGenerator = ( organization: string ) => { const token = Jwt.sign( - { Email: Email, role: role, userId, organization: organization }, + { Email: Email, role: role, userId: userId, organization: organization }, refresh_jwt_secret, { expiresIn: "30d", @@ -95,6 +95,7 @@ const tokenValidator = async ( userId: string; organization: string; }; + console.log("refresh token"); if (!decodedRefresh) { res.status(403).json({ success: false, diff --git a/src/socket-server/socket/socketManager.ts b/src/socket-server/socket/socketManager.ts index 3e090f1..f7b5cd8 100644 --- a/src/socket-server/socket/socketManager.ts +++ b/src/socket-server/socket/socketManager.ts @@ -1,25 +1,72 @@ -import { Server, Socket } from 'socket.io'; -import { EVENTS } from './events.ts'; -import { createCamera } from '../services/camera/camera-Controller.ts'; -import { setEnvironment } from '../services/environments/environments-controller.ts'; -import { deleteFloorItems, setFloorItems } from '../services/assets/flooritem-Controller.ts'; -import { deleteWallItems, setWallItems } from '../services/assets/wallitem-Controller.ts'; -import { deleteLineItems, deleteLinPoiteItems, updateLineItems, createLineItems, deleteLayer } from '../services/lines/line-Controller.ts'; -import { activeUserOffline, activeUsers, } from '../services/users/user-controller.ts'; -import { deleteZone, setZone } from '../services/lines/zone-controller.ts'; -import { addPanel, panelClear, panelDelete, panelLocked } from '../services/visualization/panel-Services.ts'; -import { addWidget, Widgetdelete } from '../services/visualization/widget-Services.ts'; -import { addfloat, deletefloat, duplicatefloat } from '../services/visualization/floatWidget-Service.ts'; -import { addTemplate, addTemplateZone, TemplateZoneDelete } from '../services/visualization/templateServices.ts'; -import { deleteAssetModel, replaceEventDatas, setAssetModel } from '../services/assets/asset-Controller.ts'; -import { add3Dwidget, delete3Dwidget, update3D } from '../services/visualization/3dWidget-Service.ts'; -import { projectDeleteHandleEvent, projectHandleEvent, projecUpdateHandleEvent } from '../controllers/project/projectController.ts'; -import { getUserRole } from '../utils/getUsers.ts'; +import { Server, Socket } from "socket.io"; +import { EVENTS } from "./events.ts"; +import { createCamera } from "../services/camera/camera-Controller.ts"; +import { setEnvironment } from "../services/environments/environments-controller.ts"; +import { + deleteFloorItems, + setFloorItems, +} from "../services/assets/flooritem-Controller.ts"; +import { + deleteWallItems, + setWallItems, +} from "../services/assets/wallitem-Controller.ts"; +import { + deleteLineItems, + deleteLinPoiteItems, + updateLineItems, + createLineItems, + deleteLayer, +} from "../services/lines/line-Controller.ts"; +import { + activeUserOffline, + activeUsers, +} from "../services/users/user-controller.ts"; +import { deleteZone, setZone } from "../services/lines/zone-controller.ts"; +import { + addPanel, + panelClear, + panelDelete, + panelLocked, +} from "../services/visualization/panel-Services.ts"; +import { + addWidget, + Widgetdelete, +} from "../services/visualization/widget-Services.ts"; +import { + addfloat, + deletefloat, + duplicatefloat, +} from "../services/visualization/floatWidget-Service.ts"; +import { + addTemplate, + addTemplateZone, + TemplateZoneDelete, +} from "../services/visualization/templateServices.ts"; +import { + deleteAssetModel, + replaceEventDatas, + setAssetModel, +} from "../services/assets/asset-Controller.ts"; +import { + add3Dwidget, + delete3Dwidget, + update3D, +} from "../services/visualization/3dWidget-Service.ts"; +import { + projectDeleteHandleEvent, + projectHandleEvent, + projecUpdateHandleEvent, +} from "../controllers/project/projectController.ts"; +import { getUserRole } from "../utils/getUsers.ts"; - - - -const cameraHandleEvent = async (event: string, socket: Socket, data: any, namespace: any, notifySender: boolean = false) => { +const cameraHandleEvent = async ( + event: string, + socket: Socket, + data: any, + namespace: any, + notifySender: boolean = false +) => { + console.log("data?.organization: ", data?.organization); if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); return; @@ -27,13 +74,12 @@ const cameraHandleEvent = async (event: string, socket: Socket, data: any, names let result; switch (event) { - case EVENTS.setCamera: { result = await createCamera(data); if (result) { - const responseEvent = EVENTS.cameraUpdateResponse - const organization = result?.organization + const responseEvent = EVENTS.cameraUpdateResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -49,7 +95,7 @@ const cameraHandleEvent = async (event: string, socket: Socket, data: any, names console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } // case EVENTS.deleteWidget: { // const result = await Widgetdelete(data) @@ -77,11 +123,14 @@ const cameraHandleEvent = async (event: string, socket: Socket, data: any, names // } // break // } - - } -} -const EnvironmentHandleEvent = async (event: string, socket: Socket, data: any, io: any) => { +}; +const EnvironmentHandleEvent = async ( + event: string, + socket: Socket, + data: any, + io: any +) => { if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); return; @@ -93,8 +142,8 @@ const EnvironmentHandleEvent = async (event: string, socket: Socket, data: any, result = await setEnvironment(data); if (result) { - const responseEvent = EVENTS.EnvironmentUpdateResponse - const organization = result?.organization + const responseEvent = EVENTS.EnvironmentUpdateResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -110,7 +159,7 @@ const EnvironmentHandleEvent = async (event: string, socket: Socket, data: any, console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } // case EVENTS.deleteWidget: { // const result = await Widgetdelete(data) @@ -142,12 +191,14 @@ const EnvironmentHandleEvent = async (event: string, socket: Socket, data: any, default: return; } - - -} -const floorItemsHandleEvent = async (event: string, socket: Socket, data: any, io: any) => { +}; +const floorItemsHandleEvent = async ( + event: string, + socket: Socket, + data: any, + io: any +) => { switch (event) { - case EVENTS.setFloorItems: { const result = await setFloorItems(data); // console.log('result: ', result); @@ -157,10 +208,8 @@ const floorItemsHandleEvent = async (event: string, socket: Socket, data: any, i message: result.message, data: result.data, socketId: socket.id, - organization: result.organization - + organization: result.organization, }); - } else { // Emit error response socket.emit(EVENTS.floorItemError, { @@ -168,7 +217,7 @@ const floorItemsHandleEvent = async (event: string, socket: Socket, data: any, i message: result.message, error: result.error, socketId: socket.id, - organization: result.organization + organization: result.organization, }); } break; @@ -177,17 +226,13 @@ const floorItemsHandleEvent = async (event: string, socket: Socket, data: any, i const result = await deleteFloorItems(data); // console.log('result: ', result); if (result.success) { - - io.emit(EVENTS.FloorItemsDeleteResponse, { success: true || false, message: result.message, data: result.data, socketId: socket.id, - organization: result.organization - + organization: result.organization, }); - } else { // Emit error response socket.emit(EVENTS.floorItemError, { @@ -195,7 +240,7 @@ const floorItemsHandleEvent = async (event: string, socket: Socket, data: any, i message: result.message, error: result.error, socketId: socket.id, - organization: result.organization + organization: result.organization, }); } break; @@ -204,8 +249,13 @@ const floorItemsHandleEvent = async (event: string, socket: Socket, data: any, i default: // console.error(`Unhandled event type: ${event}`); } -} -const wallItemsHandleEvent = async (event: string, socket: Socket, data: any, io: any) => { +}; +const wallItemsHandleEvent = async ( + event: string, + socket: Socket, + data: any, + io: any +) => { if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); return; @@ -217,8 +267,8 @@ const wallItemsHandleEvent = async (event: string, socket: Socket, data: any, io result = await setWallItems(data); if (result) { - const responseEvent = EVENTS.wallItemsUpdateResponse - const organization = result?.organization + const responseEvent = EVENTS.wallItemsUpdateResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -234,15 +284,15 @@ const wallItemsHandleEvent = async (event: string, socket: Socket, data: any, io console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.deleteWallItems: { - const result = await deleteWallItems(data) + const result = await deleteWallItems(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.wallItemsDeleteResponse + const responseEvent = EVENTS.wallItemsDeleteResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; // console.log('organization: ', organization); // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); @@ -260,15 +310,20 @@ const wallItemsHandleEvent = async (event: string, socket: Socket, data: any, io console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } default: return; } - -} -const lineHandleEvent = async (event: string, socket: Socket, data: any, io: any) => { +}; +const lineHandleEvent = async ( + event: string, + socket: Socket, + data: any, + io: any +) => { + console.log("data?.organization: ", data?.organization); if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); return; @@ -280,8 +335,8 @@ const lineHandleEvent = async (event: string, socket: Socket, data: any, io: any result = await createLineItems(data); if (result) { - const responseEvent = EVENTS.createLineResponse - const organization = result?.organization + const responseEvent = EVENTS.createLineResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -297,15 +352,15 @@ const lineHandleEvent = async (event: string, socket: Socket, data: any, io: any console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.updateLine: { - const result = await updateLineItems(data) + const result = await updateLineItems(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.updateLineResponse + const responseEvent = EVENTS.updateLineResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; // console.log('organization: ', organization); // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); @@ -323,15 +378,15 @@ const lineHandleEvent = async (event: string, socket: Socket, data: any, io: any console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.deleteLine: { - const result = await deleteLineItems(data) + const result = await deleteLineItems(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.deleteLineResponse + const responseEvent = EVENTS.deleteLineResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; // console.log('organization: ', organization); // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); @@ -349,15 +404,15 @@ const lineHandleEvent = async (event: string, socket: Socket, data: any, io: any console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.deletePoint: { - const result = await deleteLinPoiteItems(data) + const result = await deleteLinPoiteItems(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.deletePointResponse + const responseEvent = EVENTS.deletePointResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { @@ -372,15 +427,18 @@ const lineHandleEvent = async (event: string, socket: Socket, data: any, io: any console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } default: return; } - - -} -const userStatus = async (event: string, socket: Socket, data: any, io: any) => { +}; +const userStatus = async ( + event: string, + socket: Socket, + data: any, + io: any +) => { if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); return; @@ -393,8 +451,8 @@ const userStatus = async (event: string, socket: Socket, data: any, io: any) => // console.log('result: ', result); if (result) { - const responseEvent = EVENTS.userConnect - const organization = result?.organization + const responseEvent = EVENTS.userConnect; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -410,15 +468,15 @@ const userStatus = async (event: string, socket: Socket, data: any, io: any) => console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.disconnect: { - const result = await activeUserOffline(data) + const result = await activeUserOffline(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.userDisConnect + const responseEvent = EVENTS.userDisConnect; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -432,15 +490,19 @@ const userStatus = async (event: string, socket: Socket, data: any, io: any) => console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } default: return; } - -} -const zoneHandleEvent = async (event: string, socket: Socket, data: any, io: any) => { +}; +const zoneHandleEvent = async ( + event: string, + socket: Socket, + data: any, + io: any +) => { if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); return; @@ -452,8 +514,8 @@ const zoneHandleEvent = async (event: string, socket: Socket, data: any, io: any result = await setZone(data); if (result) { - const responseEvent = EVENTS.zoneUpdateResponse - const organization = result?.organization + const responseEvent = EVENTS.zoneUpdateResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -469,15 +531,15 @@ const zoneHandleEvent = async (event: string, socket: Socket, data: any, io: any console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.deleteZone: { - const result = await deleteZone(data) + const result = await deleteZone(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.ZoneDeleteResponse + const responseEvent = EVENTS.ZoneDeleteResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -491,15 +553,17 @@ const zoneHandleEvent = async (event: string, socket: Socket, data: any, io: any console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } - - } - - -} -const panelHandleEvent = async (event: string, socket: Socket, data: any, namespace: any, notifySender: boolean = false) => { +}; +const panelHandleEvent = async ( + event: string, + socket: Socket, + data: any, + namespace: any, + notifySender: boolean = false +) => { if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); return; @@ -510,8 +574,8 @@ const panelHandleEvent = async (event: string, socket: Socket, data: any, namesp case EVENTS.addPanel: { result = await addPanel(data); if (result) { - const responseEvent = EVENTS.panelUpdateResponse - const organization = result?.organization + const responseEvent = EVENTS.panelUpdateResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); // console.log('emitTarget: ', emitTarget); @@ -528,12 +592,12 @@ const panelHandleEvent = async (event: string, socket: Socket, data: any, namesp break; } case EVENTS.deletePanel: { - const result = await panelDelete(data) + const result = await panelDelete(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.PanelDeleteResponse + const responseEvent = EVENTS.PanelDeleteResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -547,15 +611,15 @@ const panelHandleEvent = async (event: string, socket: Socket, data: any, namesp console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.clearPanel: { - const result = await panelClear(data) + const result = await panelClear(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.PanelClearResponse + const responseEvent = EVENTS.PanelClearResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -569,15 +633,15 @@ const panelHandleEvent = async (event: string, socket: Socket, data: any, namesp console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.lockedPanel: { - const result = await panelLocked(data) + const result = await panelLocked(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.PanelLockedResponse + const responseEvent = EVENTS.PanelLockedResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -591,16 +655,21 @@ const panelHandleEvent = async (event: string, socket: Socket, data: any, namesp console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } default: return; } - - -} -const widgetHandleEvent = async (event: string, socket: Socket, data: any, namespace: any, notifySender: boolean = false, callback: any) => { +}; +const widgetHandleEvent = async ( + event: string, + socket: Socket, + data: any, + namespace: any, + notifySender: boolean = false, + callback: any +) => { if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); return; @@ -614,9 +683,9 @@ const widgetHandleEvent = async (event: string, socket: Socket, data: any, names if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.widgetUpdateResponse + const responseEvent = EVENTS.widgetUpdateResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -630,15 +699,15 @@ const widgetHandleEvent = async (event: string, socket: Socket, data: any, names console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.deleteWidget: { - const result = await Widgetdelete(data) + const result = await Widgetdelete(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.widgetDeleteResponse + const responseEvent = EVENTS.widgetDeleteResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { @@ -653,15 +722,21 @@ const widgetHandleEvent = async (event: string, socket: Socket, data: any, names console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } default: return; } - -} -const floatHandleEvent = async (event: string, socket: Socket, data: any, namespace: any, notifySender: boolean = false, callback: any) => { +}; +const floatHandleEvent = async ( + event: string, + socket: Socket, + data: any, + namespace: any, + notifySender: boolean = false, + callback: any +) => { // console.log('data: ', data); if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); @@ -676,9 +751,9 @@ const floatHandleEvent = async (event: string, socket: Socket, data: any, namesp if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.floatUpdateResponse + const responseEvent = EVENTS.floatUpdateResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -692,15 +767,15 @@ const floatHandleEvent = async (event: string, socket: Socket, data: any, namesp console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.deleteFloat: { - const result = await deletefloat(data) + const result = await deletefloat(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.floatDeleteResponse + const responseEvent = EVENTS.floatDeleteResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -714,15 +789,15 @@ const floatHandleEvent = async (event: string, socket: Socket, data: any, namesp console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.duplicatefloat: { - const result = await duplicatefloat(data, callback) + const result = await duplicatefloat(data, callback); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.duplicatefloatUpdateResponse + const responseEvent = EVENTS.duplicatefloatUpdateResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -736,14 +811,19 @@ const floatHandleEvent = async (event: string, socket: Socket, data: any, namesp console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } default: return; } - -} -const templateHandleEvent = async (event: string, socket: Socket, data: any, namespace: any, notifySender: boolean = false) => { +}; +const templateHandleEvent = async ( + event: string, + socket: Socket, + data: any, + namespace: any, + notifySender: boolean = false +) => { // console.log('data: ', data); if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); @@ -756,8 +836,8 @@ const templateHandleEvent = async (event: string, socket: Socket, data: any, nam result = await addTemplate(data); if (result) { - const responseEvent = EVENTS.templateUpdateResponse - const organization = result?.organization + const responseEvent = EVENTS.templateUpdateResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -773,15 +853,15 @@ const templateHandleEvent = async (event: string, socket: Socket, data: any, nam console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.addTemplateZone: { - const result = await addTemplateZone(data) + const result = await addTemplateZone(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.addTemplateZoneResponse + const responseEvent = EVENTS.addTemplateZoneResponse; // console.log('responseEvent: ', responseEvent - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -795,15 +875,15 @@ const templateHandleEvent = async (event: string, socket: Socket, data: any, nam console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.deleteTemplate: { - const result = await TemplateZoneDelete(data) + const result = await TemplateZoneDelete(data); if (result) { // console.log('result?.success: ', result.organization); - const responseEvent = EVENTS.TemplateDeleteResponse + const responseEvent = EVENTS.TemplateDeleteResponse; // console.log('responseEvent: ', responseEvent); - const organization = result?.organization + const organization = result?.organization; if (organization) { socket.to(organization).emit(responseEvent, { success: result.success, @@ -817,16 +897,21 @@ const templateHandleEvent = async (event: string, socket: Socket, data: any, nam console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } - default: return; } - -} -const Widget3DHandleEvent = async (event: string, socket: Socket, data: any, namespace: any, notifySender: boolean = false, callback: any) => { +}; +const Widget3DHandleEvent = async ( + event: string, + socket: Socket, + data: any, + namespace: any, + notifySender: boolean = false, + callback: any +) => { // console.log('data: ', data); if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); @@ -839,8 +924,8 @@ const Widget3DHandleEvent = async (event: string, socket: Socket, data: any, nam result = await add3Dwidget(data, callback); if (result) { - const responseEvent = EVENTS.widget3DUpdateResponse - const organization = result?.organization + const responseEvent = EVENTS.widget3DUpdateResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -856,14 +941,14 @@ const Widget3DHandleEvent = async (event: string, socket: Socket, data: any, nam console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.update3dPosition: { result = await update3D(data); if (result) { - const responseEvent = EVENTS.update3dPositionResponse - const organization = result?.organization + const responseEvent = EVENTS.update3dPositionResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -879,14 +964,14 @@ const Widget3DHandleEvent = async (event: string, socket: Socket, data: any, nam console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } case EVENTS.delete3DWidget: { result = await delete3Dwidget(data); if (result) { - const responseEvent = EVENTS.widget3DDeleteResponse - const organization = result?.organization + const responseEvent = EVENTS.widget3DDeleteResponse; + const organization = result?.organization; // const emitTarget = notifySender ? socket.in(organization) : socket.to(organization); // console.log(`👀 Active sockets in room:`, namespace.adapter.rooms.get(organization)); if (organization) { @@ -902,7 +987,7 @@ const Widget3DHandleEvent = async (event: string, socket: Socket, data: any, nam console.warn(`Organization missing in response for event: ${event}`); } } - break + break; } // case EVENTS.deleteWidget: { @@ -935,9 +1020,14 @@ const Widget3DHandleEvent = async (event: string, socket: Socket, data: any, nam default: return; } - -} -const modelAssetHandleEvent = async (event: string, socket: Socket, data: any, namespace: any, notifySender: boolean = false) => { +}; +const modelAssetHandleEvent = async ( + event: string, + socket: Socket, + data: any, + namespace: any, + notifySender: boolean = false +) => { // console.log('data: ', data); if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); @@ -948,15 +1038,33 @@ const modelAssetHandleEvent = async (event: string, socket: Socket, data: any, n switch (event) { case EVENTS.setAssetModel: result = await setAssetModel(data); - if (result) emitEventResponse(socket, result.organization, EVENTS.assetUpdateResponse, result); + if (result) + emitEventResponse( + socket, + result.organization, + EVENTS.assetUpdateResponse, + result + ); break; case EVENTS.deleteAssetModel: result = await deleteAssetModel(data); - if (result) emitEventResponse(socket, result.organization, EVENTS.assetDeleteResponse, result); + if (result) + emitEventResponse( + socket, + result.organization, + EVENTS.assetDeleteResponse, + result + ); break; case EVENTS.assetEventData: result = await replaceEventDatas(data); - if (result) emitEventResponse(socket, result.organization, EVENTS.assetEventDataResponse, result); + if (result) + emitEventResponse( + socket, + result.organization, + EVENTS.assetEventDataResponse, + result + ); break; // case EVENTS.setAssetModel: { // result = await setAssetModel(data); @@ -1028,9 +1136,12 @@ const modelAssetHandleEvent = async (event: string, socket: Socket, data: any, n default: return; } - -} -const simulationHandleEvent = async (event: string, socket: Socket, data: any,) => { +}; +const simulationHandleEvent = async ( + event: string, + socket: Socket, + data: any +) => { // console.log('data: ', data); if (!data?.organization) { console.warn(`Missing organization for event: ${event}`); @@ -1041,18 +1152,27 @@ const simulationHandleEvent = async (event: string, socket: Socket, data: any,) switch (event) { case EVENTS.setAssetModel: result = await addTemplate(data); - if (result) emitEventResponse(socket, result.organization, EVENTS.zoneUpdateResponse, result); + if (result) + emitEventResponse( + socket, + result.organization, + EVENTS.zoneUpdateResponse, + result + ); break; default: console.warn(`❌ Unknown event received: ${event}`); } } catch (error) { console.error(`❌ Error handling event ${event}:`, error); - } - -} -const emitEventResponse = (socket: Socket, organization: string, event: string, result: any) => { +}; +const emitEventResponse = ( + socket: Socket, + organization: string, + event: string, + result: any +) => { if (organization) { socket.to(organization).emit(event, { success: result.success, @@ -1069,7 +1189,7 @@ const emitEventResponse = (socket: Socket, organization: string, event: string, interface UserSocketInfo { socketId: string; userId: string; - role: string; // e.g., "admin" or "user" + role: string; // e.g., "admin" or "user" } const connectedUsersByOrg: { [organization: string]: UserSocketInfo[] } = {}; @@ -1077,32 +1197,30 @@ const connectedUsersByOrg: { [organization: string]: UserSocketInfo[] } = {}; export const initSocketServer = (httpServer: any) => { const io = new Server(httpServer, { cors: { - origin: '*', // Allow CORS for all origins (adjust in production) - methods: ['GET', 'POST'], + origin: "*", // Allow CORS for all origins (adjust in production) + methods: ["GET", "POST"], }, }); - // 🔹 Create different namespaces const namespaces = { - - Builder: io.of('/Builder'), - visualization: io.of('/Visualization'), - project: io.of('/project'), + Builder: io.of("/Builder"), + visualization: io.of("/Visualization"), + project: io.of("/project"), }; // const onlineUsers = new Map>(); const onlineUsers: { [organization: string]: Set } = {}; - - const handleNamespace = (namespaceName: string, namespace: any, ...eventHandlers: Function[]) => { - + const handleNamespace = ( + namespaceName: string, + namespace: any, + ...eventHandlers: Function[] + ) => { namespace.on("connection", async (socket: Socket) => { - - // const organization = socket.handshake.query.organization as string; // const email = socket.handshake.query.email as string; - const { organization, email, userId } = socket.handshake.auth + const { organization, email, userId } = socket.handshake.auth; // console.log(' socket.handshake.auth: ', socket.handshake.auth); if (organization) { @@ -1115,7 +1233,6 @@ export const initSocketServer = (httpServer: any) => { onlineUsers[organization] = new Set(); } onlineUsers[organization].add(socket.id); - } const role = await getUserRole(userId, organization); @@ -1141,23 +1258,22 @@ export const initSocketServer = (httpServer: any) => { // console.warn(`❌ Cannot store user. Missing data:`,); } - - userStatus(EVENTS.connection, socket, socket.handshake.auth, socket); socket.onAny((event: string, data: any, callback: any) => { - eventHandlers.forEach(handler => handler(event, socket, io, data, connectedUsersByOrg, callback)); + eventHandlers.forEach((handler) => + handler(event, socket, io, data, connectedUsersByOrg, callback) + ); }); - // Handle disconnection socket.on("disconnect", () => { onlineUsers[organization]?.delete(socket.id); - if (onlineUsers[organization]?.size === 0) delete onlineUsers[organization]; + if (onlineUsers[organization]?.size === 0) + delete onlineUsers[organization]; userStatus(EVENTS.disconnect, socket, socket.handshake.auth, socket); - connectedUsersByOrg[organization] = connectedUsersByOrg[organization].filter( - (u) => u.socketId !== socket.id - ); - + connectedUsersByOrg[organization] = connectedUsersByOrg[ + organization + ].filter((u) => u.socketId !== socket.id); }); // Handle reconnection (Auto rejoin) @@ -1171,9 +1287,32 @@ export const initSocketServer = (httpServer: any) => { }); }; - - handleNamespace("Builder", namespaces.Builder, userStatus, modelAssetHandleEvent, cameraHandleEvent, EnvironmentHandleEvent, wallItemsHandleEvent, lineHandleEvent, zoneHandleEvent); - handleNamespace("Visualization", namespaces.visualization, panelHandleEvent, widgetHandleEvent, floatHandleEvent, templateHandleEvent, Widget3DHandleEvent); - handleNamespace("project", namespaces.project, projectHandleEvent, projectDeleteHandleEvent, projecUpdateHandleEvent) + handleNamespace( + "Builder", + namespaces.Builder, + userStatus, + modelAssetHandleEvent, + cameraHandleEvent, + EnvironmentHandleEvent, + wallItemsHandleEvent, + lineHandleEvent, + zoneHandleEvent + ); + handleNamespace( + "Visualization", + namespaces.visualization, + panelHandleEvent, + widgetHandleEvent, + floatHandleEvent, + templateHandleEvent, + Widget3DHandleEvent + ); + handleNamespace( + "project", + namespaces.project, + projectHandleEvent, + projectDeleteHandleEvent, + projecUpdateHandleEvent + ); return io; };