Add dynamic group rule management API endpoints and UI components.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 705f2157-ef97-4fbd-89e4-8c7f2ecaea90
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7ed01c5f-a82d-405a-b728-b2e3d127c60c/4e0af531-eaa1-4a7b-a243-4f9e551aef27.jpg
This commit is contained in:
alphaeusmote
2025-04-10 03:43:08 +00:00
parent a18a385f3d
commit 60d1030b0e
4 changed files with 806 additions and 0 deletions
+209
View File
@@ -5293,6 +5293,215 @@ export async function registerRoutes(app: Express): Promise<Server> {
}
});
// Dynamic Group Rules routes
app.get("/api/dynamic-group-rules", requirePermission(PERMISSIONS.VIEW_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const rules = await storage.listDynamicGroupRules();
res.json(rules);
} catch (error) {
console.error('Error fetching dynamic group rules:', error);
res.status(500).json({ error: 'Failed to fetch dynamic group rules' });
}
});
app.get("/api/dynamic-group-rules/:id", requirePermission(PERMISSIONS.VIEW_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const id = Number(req.params.id);
const rule = await storage.getDynamicGroupRule(id);
if (!rule) {
return res.status(404).json({ error: 'Dynamic group rule not found' });
}
res.json(rule);
} catch (error) {
console.error('Error fetching dynamic group rule:', error);
res.status(500).json({ error: 'Failed to fetch dynamic group rule' });
}
});
app.post("/api/dynamic-group-rules", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const rule = await storage.createDynamicGroupRule(req.body);
res.status(201).json(rule);
} catch (error) {
console.error('Error creating dynamic group rule:', error);
res.status(500).json({ error: 'Failed to create dynamic group rule' });
}
});
app.put("/api/dynamic-group-rules/:id", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const id = Number(req.params.id);
const updatedRule = await storage.updateDynamicGroupRule(id, req.body);
if (!updatedRule) {
return res.status(404).json({ error: 'Dynamic group rule not found' });
}
res.json(updatedRule);
} catch (error) {
console.error('Error updating dynamic group rule:', error);
res.status(500).json({ error: 'Failed to update dynamic group rule' });
}
});
app.delete("/api/dynamic-group-rules/:id", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const id = Number(req.params.id);
const deleted = await storage.deleteDynamicGroupRule(id);
if (!deleted) {
return res.status(404).json({ error: 'Dynamic group rule not found' });
}
res.status(204).send();
} catch (error) {
console.error('Error deleting dynamic group rule:', error);
res.status(500).json({ error: 'Failed to delete dynamic group rule' });
}
});
// Dynamic Group Conditions routes
app.get("/api/dynamic-group-rules/:ruleId/conditions", requirePermission(PERMISSIONS.VIEW_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const ruleId = Number(req.params.ruleId);
const conditions = await storage.getConditionsByRuleId(ruleId);
res.json(conditions);
} catch (error) {
console.error('Error fetching conditions for dynamic group rule:', error);
res.status(500).json({ error: 'Failed to fetch conditions' });
}
});
app.post("/api/dynamic-group-rules/:ruleId/conditions", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const ruleId = Number(req.params.ruleId);
const conditionData = { ...req.body, ruleId };
const condition = await storage.createDynamicGroupCondition(conditionData);
res.status(201).json(condition);
} catch (error) {
console.error('Error creating condition for dynamic group rule:', error);
res.status(500).json({ error: 'Failed to create condition' });
}
});
// Dynamic Group Rule Connections routes
app.get("/api/dynamic-group-rules/:ruleId/connections", requirePermission(PERMISSIONS.VIEW_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const ruleId = Number(req.params.ruleId);
const connections = await storage.getRuleConnectionsByRuleId(ruleId);
res.json(connections);
} catch (error) {
console.error('Error fetching connections for dynamic group rule:', error);
res.status(500).json({ error: 'Failed to fetch connections' });
}
});
app.post("/api/dynamic-group-rules/:ruleId/connections", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const ruleId = Number(req.params.ruleId);
const connectionData = { ...req.body, ruleId };
const connection = await storage.createDynamicGroupRuleConnection(connectionData);
res.status(201).json(connection);
} catch (error) {
console.error('Error creating connection for dynamic group rule:', error);
res.status(500).json({ error: 'Failed to create connection' });
}
});
// Schedule Rules routes
app.get("/api/schedule-rules", requirePermission(PERMISSIONS.VIEW_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const scheduleRules = await storage.getAllScheduleRules();
res.json(scheduleRules);
} catch (error) {
console.error('Error fetching schedule rules:', error);
res.status(500).json({ error: 'Failed to fetch schedule rules' });
}
});
app.get("/api/schedule-rules/:id", requirePermission(PERMISSIONS.VIEW_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const id = Number(req.params.id);
const scheduleRule = await storage.getScheduleRule(id);
if (!scheduleRule) {
return res.status(404).json({ error: 'Schedule rule not found' });
}
res.json(scheduleRule);
} catch (error) {
console.error('Error fetching schedule rule:', error);
res.status(500).json({ error: 'Failed to fetch schedule rule' });
}
});
app.get("/api/dynamic-group-rules/:ruleId/schedules", requirePermission(PERMISSIONS.VIEW_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const ruleId = Number(req.params.ruleId);
const schedules = await storage.getScheduleRulesByRuleId(ruleId);
res.json(schedules);
} catch (error) {
console.error('Error fetching schedules for dynamic group rule:', error);
res.status(500).json({ error: 'Failed to fetch schedules' });
}
});
app.post("/api/schedule-rules", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const scheduleRule = await storage.createScheduleRule(req.body);
res.status(201).json(scheduleRule);
} catch (error) {
console.error('Error creating schedule rule:', error);
res.status(500).json({ error: 'Failed to create schedule rule' });
}
});
app.post("/api/dynamic-group-rules/:ruleId/schedules", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const ruleId = Number(req.params.ruleId);
const scheduleData = { ...req.body, ruleId };
const schedule = await storage.createScheduleRule(scheduleData);
res.status(201).json(schedule);
} catch (error) {
console.error('Error creating schedule for dynamic group rule:', error);
res.status(500).json({ error: 'Failed to create schedule' });
}
});
app.put("/api/schedule-rules/:id", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const id = Number(req.params.id);
const updatedRule = await storage.updateScheduleRule(id, req.body);
if (!updatedRule) {
return res.status(404).json({ error: 'Schedule rule not found' });
}
res.json(updatedRule);
} catch (error) {
console.error('Error updating schedule rule:', error);
res.status(500).json({ error: 'Failed to update schedule rule' });
}
});
app.delete("/api/schedule-rules/:id", requirePermission(PERMISSIONS.MANAGE_DYNAMIC_GROUPS, { allowApiToken: true }), async (req, res) => {
try {
const id = Number(req.params.id);
const deleted = await storage.deleteScheduleRule(id);
if (!deleted) {
return res.status(404).json({ error: 'Schedule rule not found' });
}
res.status(204).send();
} catch (error) {
console.error('Error deleting schedule rule:', error);
res.status(500).json({ error: 'Failed to delete schedule rule' });
}
});
const httpServer = createServer(app);
return httpServer;