Files
poshmanager/server/controllers/runPlanController.js
2026-06-25 16:51:56 -05:00

47 lines
1.6 KiB
JavaScript

import { camelJob } from '../models/mappers.js';
import { createRunPlan, deleteRunPlan, listRunPlans, loadVisibleRunPlan, updateRunPlan } from '../models/runPlanModel.js';
import { executeRunPlan } from '../services/powershellRunner.js';
import { analyzeRunPlanCompatibility } from '../services/powershellCompatibilityService.js';
export function index(req, res) {
res.json(listRunPlans(req.user.id));
}
export function create(req, res) {
res.status(201).json(createRunPlan(req.body, req.user.id));
}
export function show(req, res) {
const runplan = loadVisibleRunPlan(req.params.id, req.user.id);
if (!runplan) return res.status(404).json({ error: 'RunPlan not found' });
res.json(runplan);
}
export function update(req, res) {
const runplan = updateRunPlan(req.params.id, req.body, req.user.id);
if (!runplan) return res.status(404).json({ error: 'RunPlan not found' });
res.json(runplan);
}
export function destroy(req, res) {
deleteRunPlan(req.params.id, req.user.id);
res.status(204).end();
}
export function execute(req, res) {
// Execution remains an API concern; Vue only requests a RunPlan launch.
const runplan = loadVisibleRunPlan(req.params.id, req.user.id);
if (!runplan) return res.status(404).json({ error: 'RunPlan not found' });
try {
res.status(202).json(camelJob(executeRunPlan(req.params.id, req.user.id)));
} catch (error) {
res.status(400).json({ error: error.message });
}
}
export function compatibility(req, res) {
const result = analyzeRunPlanCompatibility(req.params.id, req.user.id);
if (!result) return res.status(404).json({ error: 'RunPlan not found' });
res.json(result);
}