feat: Enhance path and task management APIs; add detailed responses and optional filters

This commit is contained in:
MayaTheShy
2026-02-20 01:29:03 -05:00
parent 3c0f72acf1
commit d7433b8bcc

View File

@@ -421,19 +421,66 @@ app.post('/api/turtle/:id/command', (req, res) => {
app.post('/api/paths', (req, res) => {
try {
const { turtleId, pathName, pathData } = req.body;
db.savePath(turtleId, pathName, pathData);
res.json({ success: true, message: 'Path saved' });
const pathId = db.savePath(turtleId, pathName, pathData || []);
res.json({ success: true, pathId, message: 'Path saved' });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Get all paths for a turtle
app.get('/api/paths/:turtleId', (req, res) => {
// Get all paths (optionally filtered by turtleId)
app.get('/api/paths', (req, res) => {
try {
const paths = db.getPaths();
res.json(paths.map(p => ({
pathId: p.id,
turtleId: p.turtle_id,
name: p.path_name,
pathData: p.path_data,
waypointCount: Array.isArray(p.path_data) ? p.path_data.length : 0,
createdAt: p.created_at,
updatedAt: p.updated_at
})));
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Get paths for a specific turtle
app.get('/api/paths/turtle/:turtleId', (req, res) => {
try {
const turtleId = parseInt(req.params.turtleId);
const paths = db.getPaths(turtleId);
res.json({ paths });
res.json(paths.map(p => ({
pathId: p.id,
turtleId: p.turtle_id,
name: p.path_name,
pathData: p.path_data,
waypointCount: Array.isArray(p.path_data) ? p.path_data.length : 0,
createdAt: p.created_at,
updatedAt: p.updated_at
})));
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Get a specific path with full details
app.get('/api/paths/:pathId', (req, res) => {
try {
const pathId = parseInt(req.params.pathId);
const path = db.getPath(pathId);
if (!path) {
return res.status(404).json({ error: 'Path not found' });
}
res.json({
pathId: path.id,
turtleId: path.turtle_id,
name: path.path_name,
waypoints: path.path_data,
createdAt: path.created_at,
updatedAt: path.updated_at
});
} catch (error) {
res.status(500).json({ error: error.message });
}
@@ -455,8 +502,9 @@ app.delete('/api/paths/:pathId', (req, res) => {
// Create a new task
app.post('/api/tasks', (req, res) => {
try {
const { taskType, taskData, priority } = req.body;
const taskId = db.createTask(taskType, taskData, priority || 0);
const { taskType, priority, assignedTurtleId, parameters } = req.body;
const taskData = parameters || {};
const taskId = db.createTask(taskType, taskData, priority || 0, assignedTurtleId || null);
broadcastToClients({
type: 'task_created',
@@ -471,11 +519,23 @@ app.post('/api/tasks', (req, res) => {
}
});
// Get all tasks
// Get all tasks (with optional status filter)
app.get('/api/tasks', (req, res) => {
try {
const tasks = db.getAllTasks();
res.json({ tasks });
const status = req.query.status || null;
const rawTasks = db.getAllTasks(status);
const tasks = rawTasks.map(t => ({
taskId: t.id,
taskType: t.task_type,
priority: t.priority,
status: t.status,
assignedTurtleId: t.assigned_turtle_id,
parameters: t.task_data,
result: t.task_data?.result || null,
createdAt: t.created_at,
updatedAt: t.updated_at
}));
res.json(tasks);
} catch (error) {
res.status(500).json({ error: error.message });
}
@@ -491,6 +551,42 @@ app.get('/api/tasks/next', (req, res) => {
}
});
// Update task status
app.put('/api/tasks/:taskId', (req, res) => {
try {
const taskId = parseInt(req.params.taskId);
const { status, result } = req.body;
db.updateTaskStatus(taskId, status, result);
broadcastToClients({
type: 'task_updated',
taskId,
status
});
res.json({ success: true });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Delete a task
app.delete('/api/tasks/:taskId', (req, res) => {
try {
const taskId = parseInt(req.params.taskId);
db.deleteTask(taskId);
broadcastToClients({
type: 'task_deleted',
taskId
});
res.json({ success: true });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Assign task to turtle
app.post('/api/tasks/:taskId/assign', (req, res) => {
try {