2025-03-29 17:47:16 +05:30
|
|
|
import { Request, Response } from "express";
|
|
|
|
|
import assetModel from "../../../shared/model/builder/assets/asset-Model.ts";
|
|
|
|
|
import actionModel from "../../../shared/model/simulation/actionmodel.ts";
|
|
|
|
|
import triggerModel from "../../../shared/model/simulation/triggersmodel.ts";
|
2025-04-03 19:51:51 +05:30
|
|
|
import pointModel from "../../../shared/model/builder/assets/assetPoint-Model.ts";
|
2025-04-30 17:15:45 +05:30
|
|
|
import EventsDataModel from "../../../shared/model/simulation/eventsDataModel.ts";
|
2025-03-29 17:47:16 +05:30
|
|
|
|
|
|
|
|
export class assetsFloorservice {
|
2025-04-30 17:15:45 +05:30
|
|
|
// static async setFloorassets(req: Request, res: Response): Promise<any> {
|
|
|
|
|
// try {
|
|
|
|
|
// const {
|
|
|
|
|
// modelUuid,
|
|
|
|
|
// modelName,
|
|
|
|
|
// position,
|
|
|
|
|
// modelfileID,
|
|
|
|
|
// rotation,
|
|
|
|
|
// isLocked,
|
|
|
|
|
// isVisible,
|
|
|
|
|
// organization,
|
|
|
|
|
// eventData,
|
|
|
|
|
// } = req.body;
|
|
|
|
|
// console.log("req.body: ", req.body);
|
|
|
|
|
|
|
|
|
|
// const findvalue = await assetModel(organization).findOne({
|
|
|
|
|
// modelUuid,
|
|
|
|
|
// // modelName,
|
|
|
|
|
// isArchive: false,
|
|
|
|
|
// });
|
|
|
|
|
// const checkpointType = await pointModel(organization).findOne({
|
|
|
|
|
// modelfileID: modelfileID,
|
|
|
|
|
// isArchive: false,
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
// if (findvalue) {
|
|
|
|
|
// const updatevalue = await assetModel(organization).findOneAndUpdate(
|
|
|
|
|
// { modelUuid, isArchive: false },
|
|
|
|
|
// {
|
|
|
|
|
// modelName: modelName,
|
|
|
|
|
// position,
|
|
|
|
|
// rotation,
|
|
|
|
|
// isVisible,
|
|
|
|
|
// isLocked,
|
|
|
|
|
// },
|
|
|
|
|
// { new: true }
|
|
|
|
|
// );
|
|
|
|
|
// return res.status(201).json(updatevalue);
|
|
|
|
|
// } else {
|
|
|
|
|
// let assetData: any = {
|
|
|
|
|
// modelUuid,
|
|
|
|
|
// modelName,
|
|
|
|
|
// position,
|
|
|
|
|
// modelfileID,
|
|
|
|
|
// rotation,
|
|
|
|
|
// isLocked,
|
|
|
|
|
// isVisible,
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// console.log("eventData: ", eventData);
|
|
|
|
|
// if (eventData) {
|
|
|
|
|
// if (eventData.type === "Conveyor") {
|
|
|
|
|
// assetData.speed = eventData.speed;
|
|
|
|
|
// } else if (eventData.type === "Vehicle") {
|
|
|
|
|
// assetData.speed = eventData.points.speed;
|
|
|
|
|
// if (!eventData.points) {
|
|
|
|
|
// return res
|
|
|
|
|
// .status(400)
|
|
|
|
|
// .json({ message: "Vehicle points must be a single object" });
|
|
|
|
|
// }
|
|
|
|
|
// // if (eventData.points.rotation) {
|
|
|
|
|
// // return res.status(400).json({
|
|
|
|
|
// // message: "Rotation is not allowed for Vehicle points",
|
|
|
|
|
// // });
|
|
|
|
|
// // }
|
|
|
|
|
|
|
|
|
|
// if (eventData.points.triggers) {
|
|
|
|
|
// return res.status(400).json({
|
|
|
|
|
// message: "triggers is not allowed for Vehicle points",
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// // else if(eventData.type === "ArmBot"){
|
|
|
|
|
// // assetData.speed = eventData.position;
|
|
|
|
|
// // }else if(eventData.type === "StaticMachine"){
|
|
|
|
|
// // assetData.speed = eventData.position;
|
|
|
|
|
// // }
|
|
|
|
|
|
|
|
|
|
// assetData.points = eventData.points;
|
|
|
|
|
// assetData.type = eventData.type;
|
|
|
|
|
// }
|
|
|
|
|
// const assetDoc = await assetModel(organization).create(assetData);
|
|
|
|
|
// await assetDoc.save();
|
|
|
|
|
|
|
|
|
|
// return res.status(201).json({
|
|
|
|
|
// message: "Model stored successfully",
|
|
|
|
|
// modelId: assetDoc._id,
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
// } catch (error) {
|
|
|
|
|
// console.error("Error creating flooritems:", error);
|
|
|
|
|
// res.status(500).json({ message: "Failed to create flooritems" });
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// static async getFloorItems(req: Request, res: Response): Promise<any> {
|
|
|
|
|
// try {
|
|
|
|
|
// const { organization } = req.params;
|
|
|
|
|
// const findValues = await assetModel(organization)
|
|
|
|
|
// .find({ isArchive: false })
|
|
|
|
|
// .select("-_id -isArchive");
|
|
|
|
|
|
|
|
|
|
// if (!findValues || findValues.length === 0) {
|
|
|
|
|
// return res.status(200).json({ message: "floorItems not found" });
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// const response = findValues.map((item) => {
|
|
|
|
|
// // console.log("item: ", item);
|
|
|
|
|
// // console.log("item: ", item.type);
|
|
|
|
|
// // console.log('findValues: ', findValues);
|
|
|
|
|
// // console.log("item.points: ", item.points);
|
|
|
|
|
// const responseItem: any = {
|
|
|
|
|
// modelUuid: item.modelUuid,
|
|
|
|
|
// modelName: item.modelName,
|
|
|
|
|
// position: item.position,
|
|
|
|
|
// rotation: item.rotation,
|
|
|
|
|
// modelfileID: item.modelfileID,
|
|
|
|
|
// isLocked: item.isLocked,
|
|
|
|
|
// isVisible: item.isVisible,
|
|
|
|
|
// };
|
|
|
|
|
// if (item.type === "Conveyor" && item.points.length > 0) {
|
|
|
|
|
// responseItem.eventData = {
|
|
|
|
|
// speed: item.speed,
|
|
|
|
|
// points: item.points,
|
|
|
|
|
// type: item.type,
|
|
|
|
|
// };
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// if (item.type === "Vehicle" && item.points) {
|
|
|
|
|
// responseItem.eventData = {
|
|
|
|
|
// type: item.type,
|
|
|
|
|
// points: item.points,
|
|
|
|
|
// };
|
|
|
|
|
// }
|
|
|
|
|
// if (item.type === "ArmBot" && item.points) {
|
|
|
|
|
// responseItem.eventData = {
|
|
|
|
|
// type: item.type,
|
|
|
|
|
// points: item.points,
|
|
|
|
|
// };
|
|
|
|
|
// }
|
|
|
|
|
// if (item.type === "StaticMachine" && item.points) {
|
|
|
|
|
// responseItem.eventData = {
|
|
|
|
|
// type: item.type,
|
|
|
|
|
// points: item.points,
|
|
|
|
|
// };
|
|
|
|
|
// }
|
|
|
|
|
// return responseItem;
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
// return res.status(200).json(response);
|
|
|
|
|
// } catch (error) {
|
|
|
|
|
// res.status(500).json({ error: "Failed to get flooritems" });
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// static async deleteFloorItems(req: Request, res: Response): Promise<any> {
|
|
|
|
|
// try {
|
|
|
|
|
// const { modelUuid, modelName, organization } = req.body;
|
|
|
|
|
|
|
|
|
|
// const findValue = await assetModel(organization).findOneAndDelete({
|
|
|
|
|
// modelUuid: modelUuid,
|
|
|
|
|
// modelName: modelName,
|
|
|
|
|
// isArchive: false,
|
|
|
|
|
// });
|
|
|
|
|
// if (!findValue) {
|
|
|
|
|
// res.status(200).json("user not found");
|
|
|
|
|
// } else {
|
|
|
|
|
// res.status(201).json(findValue);
|
|
|
|
|
// }
|
|
|
|
|
// } catch (error) {
|
|
|
|
|
// res.status(500).json({ error: "Failed to get flooritems" });
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
static async updateAssetPositionRotation(
|
|
|
|
|
req: Request,
|
|
|
|
|
res: Response
|
|
|
|
|
): Promise<any> {
|
|
|
|
|
try {
|
|
|
|
|
const {
|
|
|
|
|
modelUuid,
|
|
|
|
|
modelName,
|
|
|
|
|
position,
|
|
|
|
|
modelfileID,
|
|
|
|
|
rotation,
|
|
|
|
|
isLocked,
|
|
|
|
|
isVisible,
|
|
|
|
|
organization,
|
|
|
|
|
// eventData, // Optional
|
|
|
|
|
} = req.body;
|
|
|
|
|
|
|
|
|
|
const existingAsset = await assetModel(organization).findOne({
|
|
|
|
|
modelUuid: modelUuid,
|
|
|
|
|
isArchive: false,
|
|
|
|
|
});
|
|
|
|
|
if (!existingAsset) return res.send("Asset not found");
|
|
|
|
|
const updateAsset = await assetModel(organization).updateMany(
|
|
|
|
|
{ modelUuid: modelUuid, modelName: modelName, isArchive: false },
|
|
|
|
|
{
|
|
|
|
|
position: position,
|
|
|
|
|
rotation: rotation,
|
|
|
|
|
isVisible: isVisible,
|
|
|
|
|
isLocked: isLocked,
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
if (updateAsset)
|
|
|
|
|
return res.status(200).json({ message: "Asset updated successfully" });
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
return res.send(error.message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
static async replaceEventDatas(req: Request, res: Response): Promise<any> {
|
|
|
|
|
const { organization, modelUuid, eventData } = req.body;
|
|
|
|
|
try {
|
|
|
|
|
const existingModel = await assetModel(organization).findOne({
|
|
|
|
|
modelUuid: modelUuid,
|
|
|
|
|
isArchive: false,
|
|
|
|
|
});
|
|
|
|
|
if (!existingModel)
|
|
|
|
|
return res.json({ message: "Model not for this UUID" });
|
|
|
|
|
else {
|
|
|
|
|
let speed;
|
|
|
|
|
if (existingModel.type === "Conveyor") {
|
|
|
|
|
speed = eventData?.speed;
|
|
|
|
|
}
|
|
|
|
|
const updatedModel = await assetModel(organization).findOneAndUpdate(
|
|
|
|
|
{ modelUuid, isArchive: false },
|
|
|
|
|
{
|
|
|
|
|
points: eventData?.points,
|
|
|
|
|
type: eventData?.type || existingModel?.type,
|
|
|
|
|
},
|
|
|
|
|
{ new: true }
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (updatedModel)
|
|
|
|
|
return res.status(200).json({ message: "Data updated successfully" });
|
|
|
|
|
}
|
|
|
|
|
} catch (error: any) {
|
|
|
|
|
return res.status(500).send(error.message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//update setfoolrassets//getFloorItems//deleteFloorItems.........
|
2025-03-31 18:30:14 +05:30
|
|
|
static async setFloorassets(req: Request, res: Response): Promise<any> {
|
2025-03-29 17:47:16 +05:30
|
|
|
try {
|
|
|
|
|
const {
|
2025-04-30 17:15:45 +05:30
|
|
|
modelUuid,
|
|
|
|
|
modelName,
|
2025-04-01 13:55:43 +05:30
|
|
|
position,
|
2025-03-29 17:47:16 +05:30
|
|
|
modelfileID,
|
2025-04-01 13:55:43 +05:30
|
|
|
rotation,
|
2025-03-29 17:47:16 +05:30
|
|
|
isLocked,
|
|
|
|
|
isVisible,
|
|
|
|
|
organization,
|
2025-04-03 19:51:51 +05:30
|
|
|
eventData,
|
2025-03-29 17:47:16 +05:30
|
|
|
} = req.body;
|
2025-04-09 18:22:12 +05:30
|
|
|
console.log("req.body: ", req.body);
|
2025-03-29 17:47:16 +05:30
|
|
|
|
|
|
|
|
const findvalue = await assetModel(organization).findOne({
|
2025-04-30 17:15:45 +05:30
|
|
|
modelUuid,
|
|
|
|
|
// modelName,
|
2025-04-02 09:55:23 +05:30
|
|
|
isArchive: false,
|
2025-03-29 17:47:16 +05:30
|
|
|
});
|
2025-04-03 19:51:51 +05:30
|
|
|
const checkpointType = await pointModel(organization).findOne({
|
|
|
|
|
modelfileID: modelfileID,
|
|
|
|
|
isArchive: false,
|
|
|
|
|
});
|
2025-03-29 17:47:16 +05:30
|
|
|
|
|
|
|
|
if (findvalue) {
|
|
|
|
|
const updatevalue = await assetModel(organization).findOneAndUpdate(
|
2025-04-30 17:15:45 +05:30
|
|
|
{ modelUuid, isArchive: false },
|
2025-03-29 17:47:16 +05:30
|
|
|
{
|
2025-04-30 17:15:45 +05:30
|
|
|
modelName: modelName,
|
2025-04-01 13:55:43 +05:30
|
|
|
position,
|
|
|
|
|
rotation,
|
2025-03-31 18:30:14 +05:30
|
|
|
isVisible,
|
|
|
|
|
isLocked,
|
2025-03-29 17:47:16 +05:30
|
|
|
},
|
|
|
|
|
{ new: true }
|
|
|
|
|
);
|
2025-03-31 18:30:14 +05:30
|
|
|
return res.status(201).json(updatevalue);
|
2025-03-29 17:47:16 +05:30
|
|
|
} else {
|
2025-03-31 18:30:14 +05:30
|
|
|
let assetData: any = {
|
2025-04-30 17:15:45 +05:30
|
|
|
modelUuid,
|
|
|
|
|
modelName,
|
2025-04-01 13:55:43 +05:30
|
|
|
position,
|
2025-03-31 18:30:14 +05:30
|
|
|
modelfileID,
|
2025-04-01 13:55:43 +05:30
|
|
|
rotation,
|
2025-03-31 18:30:14 +05:30
|
|
|
isLocked,
|
|
|
|
|
isVisible,
|
2025-04-30 17:15:45 +05:30
|
|
|
eventData
|
2025-03-31 18:30:14 +05:30
|
|
|
};
|
2025-03-29 17:47:16 +05:30
|
|
|
|
2025-04-03 19:51:51 +05:30
|
|
|
console.log("eventData: ", eventData);
|
2025-03-31 18:30:14 +05:30
|
|
|
if (eventData) {
|
2025-04-03 19:51:51 +05:30
|
|
|
if (eventData.type === "Conveyor") {
|
2025-04-04 16:50:39 +05:30
|
|
|
assetData.speed = eventData.speed;
|
2025-04-03 19:51:51 +05:30
|
|
|
} else if (eventData.type === "Vehicle") {
|
2025-04-04 16:50:39 +05:30
|
|
|
assetData.speed = eventData.points.speed;
|
2025-04-03 19:51:51 +05:30
|
|
|
if (!eventData.points) {
|
|
|
|
|
return res
|
|
|
|
|
.status(400)
|
|
|
|
|
.json({ message: "Vehicle points must be a single object" });
|
|
|
|
|
}
|
2025-04-09 18:22:12 +05:30
|
|
|
// if (eventData.points.rotation) {
|
|
|
|
|
// return res.status(400).json({
|
|
|
|
|
// message: "Rotation is not allowed for Vehicle points",
|
|
|
|
|
// });
|
|
|
|
|
// }
|
2025-04-04 16:50:39 +05:30
|
|
|
|
|
|
|
|
if (eventData.points.triggers) {
|
|
|
|
|
return res.status(400).json({
|
|
|
|
|
message: "triggers is not allowed for Vehicle points",
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-04-09 18:22:12 +05:30
|
|
|
}
|
2025-04-08 17:17:36 +05:30
|
|
|
// else if(eventData.type === "ArmBot"){
|
|
|
|
|
// assetData.speed = eventData.position;
|
|
|
|
|
// }else if(eventData.type === "StaticMachine"){
|
|
|
|
|
// assetData.speed = eventData.position;
|
|
|
|
|
// }
|
2025-03-29 17:47:16 +05:30
|
|
|
|
2025-04-03 19:51:51 +05:30
|
|
|
assetData.points = eventData.points;
|
2025-03-31 18:30:14 +05:30
|
|
|
assetData.type = eventData.type;
|
2025-03-29 17:47:16 +05:30
|
|
|
}
|
2025-03-31 18:30:14 +05:30
|
|
|
const assetDoc = await assetModel(organization).create(assetData);
|
2025-03-29 17:47:16 +05:30
|
|
|
await assetDoc.save();
|
2025-03-31 18:30:14 +05:30
|
|
|
|
|
|
|
|
return res.status(201).json({
|
2025-03-29 17:47:16 +05:30
|
|
|
message: "Model stored successfully",
|
|
|
|
|
modelId: assetDoc._id,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("Error creating flooritems:", error);
|
|
|
|
|
res.status(500).json({ message: "Failed to create flooritems" });
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-31 18:30:14 +05:30
|
|
|
static async getFloorItems(req: Request, res: Response): Promise<any> {
|
2025-03-29 17:47:16 +05:30
|
|
|
try {
|
|
|
|
|
const { organization } = req.params;
|
2025-03-31 18:30:14 +05:30
|
|
|
const findValues = await assetModel(organization)
|
2025-04-02 09:55:23 +05:30
|
|
|
.find({ isArchive: false })
|
2025-04-03 19:51:51 +05:30
|
|
|
.select("-_id -isArchive");
|
2025-03-31 18:30:14 +05:30
|
|
|
|
2025-04-03 19:51:51 +05:30
|
|
|
if (!findValues || findValues.length === 0) {
|
|
|
|
|
return res.status(200).json({ message: "floorItems not found" });
|
2025-03-29 17:47:16 +05:30
|
|
|
}
|
2025-04-03 19:51:51 +05:30
|
|
|
|
|
|
|
|
const response = findValues.map((item) => {
|
2025-04-04 18:32:19 +05:30
|
|
|
// console.log("item: ", item);
|
|
|
|
|
// console.log("item: ", item.type);
|
2025-04-04 16:50:39 +05:30
|
|
|
// console.log('findValues: ', findValues);
|
|
|
|
|
// console.log("item.points: ", item.points);
|
2025-04-03 19:51:51 +05:30
|
|
|
const responseItem: any = {
|
2025-04-30 17:15:45 +05:30
|
|
|
modelUuid: item.modelUuid,
|
|
|
|
|
modelName: item.modelName,
|
2025-04-03 19:51:51 +05:30
|
|
|
position: item.position,
|
|
|
|
|
rotation: item.rotation,
|
|
|
|
|
modelfileID: item.modelfileID,
|
|
|
|
|
isLocked: item.isLocked,
|
|
|
|
|
isVisible: item.isVisible,
|
2025-04-30 17:15:45 +05:30
|
|
|
eventData: item.eventData,
|
2025-04-03 19:51:51 +05:30
|
|
|
};
|
2025-04-30 17:15:45 +05:30
|
|
|
// if (item.type === "Conveyor" && item.points.length > 0) {
|
|
|
|
|
// responseItem.eventData = {
|
|
|
|
|
// speed: item.speed,
|
|
|
|
|
// points: item.points,
|
|
|
|
|
// type: item.type,
|
|
|
|
|
// };
|
|
|
|
|
// }
|
2025-04-03 19:51:51 +05:30
|
|
|
|
2025-04-30 17:15:45 +05:30
|
|
|
// if (item.type === "Vehicle" && item.points) {
|
|
|
|
|
// responseItem.eventData = {
|
|
|
|
|
// type: item.type,
|
|
|
|
|
// points: item.points,
|
|
|
|
|
// };
|
|
|
|
|
// }
|
|
|
|
|
// if (item.type === "ArmBot" && item.points) {
|
|
|
|
|
// responseItem.eventData = {
|
|
|
|
|
// type: item.type,
|
|
|
|
|
// points: item.points,
|
|
|
|
|
// };
|
|
|
|
|
// }
|
|
|
|
|
// if (item.type === "StaticMachine" && item.points) {
|
|
|
|
|
// responseItem.eventData = {
|
|
|
|
|
// type: item.type,
|
|
|
|
|
// points: item.points,
|
|
|
|
|
// };
|
|
|
|
|
// }
|
2025-04-03 19:51:51 +05:30
|
|
|
return responseItem;
|
|
|
|
|
});
|
|
|
|
|
|
2025-04-30 17:15:45 +05:30
|
|
|
// console.log('response: ', response);
|
2025-04-03 19:51:51 +05:30
|
|
|
return res.status(200).json(response);
|
2025-03-29 17:47:16 +05:30
|
|
|
} catch (error) {
|
|
|
|
|
res.status(500).json({ error: "Failed to get flooritems" });
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-04-02 09:55:23 +05:30
|
|
|
static async deleteFloorItems(req: Request, res: Response): Promise<any> {
|
2025-03-29 17:47:16 +05:30
|
|
|
try {
|
2025-04-30 17:15:45 +05:30
|
|
|
const { modelUuid, modelName, organization } = req.body;
|
|
|
|
|
console.log('req.body:', req.body);
|
|
|
|
|
|
|
|
|
|
const asset = await assetModel(organization).findOne({
|
|
|
|
|
modelUuid,
|
|
|
|
|
modelName,
|
2025-04-02 09:55:23 +05:30
|
|
|
isArchive: false,
|
2025-03-29 17:47:16 +05:30
|
|
|
});
|
2025-04-30 17:15:45 +05:30
|
|
|
|
|
|
|
|
if (!asset) {
|
|
|
|
|
return res.status(404).json({ message: "Model not found" });
|
2025-03-29 17:47:16 +05:30
|
|
|
}
|
2025-04-30 17:15:45 +05:30
|
|
|
|
|
|
|
|
const archivedAsset = await assetModel(organization).findOneAndUpdate(
|
|
|
|
|
{ modelUuid, modelName },
|
|
|
|
|
{ $set: { isArchive: true } },
|
|
|
|
|
{ new: true }
|
2025-04-02 09:55:23 +05:30
|
|
|
);
|
2025-04-30 17:15:45 +05:30
|
|
|
|
|
|
|
|
if (!archivedAsset) {
|
|
|
|
|
return res.status(500).json({ message: "Failed to archive asset" });
|
2025-04-03 19:51:51 +05:30
|
|
|
}
|
2025-04-30 17:15:45 +05:30
|
|
|
|
|
|
|
|
const updatedEvents = await EventsDataModel(organization).updateMany(
|
|
|
|
|
{ modelUuid },
|
|
|
|
|
{ $set: { isArchive: true } }
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
console.log("Archived asset:", archivedAsset);
|
|
|
|
|
console.log("Updated events:", updatedEvents.modifiedCount);
|
|
|
|
|
|
|
|
|
|
return res.status(200).json({ message: "delete Asset successfully" });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("Error deleting floor items:", error);
|
|
|
|
|
return res.status(500).json({ error: "Failed to delete floor items" });
|
2025-04-03 19:51:51 +05:30
|
|
|
}
|
|
|
|
|
}
|
2025-03-29 17:47:16 +05:30
|
|
|
}
|