Files
Dwinzo-Backend-V0.0/src/socket-server/services/visualization/widget-Services.ts

172 lines
6.2 KiB
TypeScript

import panelSchema from "../../../shared/model/vizualization/panelmodel.ts";
import widgetSchema from "../../../shared/model/vizualization/widgemodel.ts";
import zoneSchema from "../../../shared/model/builder/lines/zone-Model.ts";
export const addWidget = async (data: any) => {
const { organization, panel, zoneId, widget, } = data
try {
const existingZone = await zoneSchema(organization).findOne({
zoneId: zoneId,
isArchive: false,
});
if (!existingZone)
return { success: false, message: "Zone not found", organization: organization }
const existingPanel = await panelSchema(organization).findOne({
panelName: widget.panel,
zoneId: zoneId,
isArchive: false,
})
if (!existingPanel)
return { success: false, message: "panelName not found", organization: organization }
if (existingPanel.panelName === widget.panel) {
const existingWidget = await widgetSchema(organization).findOne({
panelID: existingPanel._id,
widgetID: widget.id,
isArchive: false,
// widgetOrder: widget.widgetOrder,
});
if (existingWidget) {
const updateWidget = await widgetSchema(
organization
).findOneAndUpdate(
{
panelID: existingPanel._id,
widgetID: widget.id,
isArchive: false,
},
{
$set: {
panelID: existingPanel._id,
widgetID: widget.id,
Data: {
measurements: widget.Data.measurements,
duration: widget.Data.duration,
},
isArchive: false,
},
},
{ upsert: true, new: true } // Upsert: create if not exists, new: return updated document
);
return { success: true, message: "Widget updated successfully", data: updateWidget, organization: organization }
}
const newWidget = await widgetSchema(organization).create({
widgetID: widget.id,
elementType: widget.type,
// widgetOrder: widgetOrder,
widgetName: widget.title,
panelID: existingPanel._id,
widgetside: widget.panel,
zoneId: zoneId
// Data: {
// measurements: widget.Data.measurements || {},
// duration: widget.Data.duration || "1hr",
// },
});
if (newWidget) {
existingPanel.widgets.push(newWidget._id);
await existingPanel.save();
const widgetData = {
type: newWidget.elementType,
id: newWidget.widgetID,
panel: newWidget.widgetside,
title: newWidget.widgetName,
}
const finaldata = { widgetData: widgetData, zoneId: existingZone.zoneId, zoneName: existingZone.zoneName }
return { success: true, message: "Widget created successfully", data: finaldata, organization: organization }
}
}
return { success: false, message: "Type mismatch", organization: organization }
} catch (error: any) {
return { success: false, message: 'widge not found', error, organization: organization }
}
}
export const Widgetdelete = async (data: any) => {
const { widgetID, zoneId, organization } = data
try {
const existingZone = await zoneSchema(organization).findOne({
zoneId: zoneId,
isArchive: false,
});
if (!existingZone)
return { success: false, message: "Zone not found", organization: organization }
const findWidget = await widgetSchema(organization).findOne({
widgetID: widgetID,
isArchive: false,
});
if (!findWidget)
return { success: false, message: "Widget not found", organization: organization }
const widgetData = await widgetSchema(organization).updateOne(
{ _id: findWidget._id, isArchive: false },
{ $set: { isArchive: true } }
);
if (widgetData) {
// Find all widgets in the same panel and sort them by widgetOrder
const widgets = await widgetSchema(organization).find({
panelID: findWidget.panelID,
isArchive: false,
});
// console.log('widgets: ', widgets);
// .sort({ widgetOrder: 1 });
// Reassign widgetOrder values
// for (let i = 0; i < widgets.length; i++) {
// widgets[i].widgetOrder = (i + 1).toString(); // Convert to string
// await widgets[i].save();
// }
const panelData = await panelSchema(organization).findOne({
_id: findWidget.panelID,
isArchive: false,
});
if (panelData.widgets.includes(findWidget._id)) {
const index1 = panelData.widgets.indexOf(findWidget._id);
panelData.widgets.splice(index1, 1);
}
const panelDeletedata = await panelData.save();
// console.log('Widget deleted successfully: ',panelDeletedata);
// if (panelData?.widgets.includes(findWidget._id)) {
// panelData.widgets = panelData.widgets.filter(
// (id: any) => id.toString() !== findWidget._id.toString()
// );
// await panelData.save();
// }
// Fetch active widgets after deletion
const activeWidgets = await widgetSchema(organization).find({
zoneId: zoneId,
isArchive: false,
});
// console.log('activeWidgets: ', activeWidgets);
// // Format data
const formattedWidgets = activeWidgets.map((widget) => ({
id: widget.widgetID,
type: widget.elementType, // Ensure this field exists
title: widget.widgetName,
panel: widget.widgetside,
data: {
duration: "1h",
measurements: {}, // Add actual data if available
},
}));
const widgetData1 = {
widgetDeleteDatas: formattedWidgets, zoneId: zoneId, zoneName: existingZone.zoneName
}
// console.log("formattedWidgets",widgetData1);
return { success: true, message: "Widget deleted successfully", data: widgetData1, organization: organization }
}
} catch (error: any) {
return { success: false, message: error?.message || "An unknown error occurred.", error, organization: organization }
}
}