refactor: add color parameter to saveMiningArea and updateMiningArea functions; implement write-file and refresh-inventory endpoints for Turtle
This commit is contained in:
@@ -1073,7 +1073,7 @@ function formatMiningArea(area) {
|
|||||||
// Save a mining area
|
// Save a mining area
|
||||||
app.post('/api/mining-areas', (req, res) => {
|
app.post('/api/mining-areas', (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { turtleId, turtleID, bounds, startX, startY, startZ, endX, endY, endZ, areaName, status } = req.body;
|
const { turtleId, turtleID, bounds, startX, startY, startZ, endX, endY, endZ, areaName, status, color } = req.body;
|
||||||
const tid = turtleId || turtleID;
|
const tid = turtleId || turtleID;
|
||||||
|
|
||||||
// Support both {turtleId, bounds} and flat {startX,startY,...} formats
|
// Support both {turtleId, bounds} and flat {startX,startY,...} formats
|
||||||
@@ -1086,7 +1086,7 @@ app.post('/api/mining-areas', (req, res) => {
|
|||||||
maxZ: Math.max(Number(startZ), Number(endZ))
|
maxZ: Math.max(Number(startZ), Number(endZ))
|
||||||
};
|
};
|
||||||
|
|
||||||
db.saveMiningArea(tid, areaBounds, areaName || null, status || 'planned');
|
db.saveMiningArea(tid, areaBounds, areaName || null, status || 'planned', color || '#4a8c2a');
|
||||||
|
|
||||||
const areas = db.getMiningAreas();
|
const areas = db.getMiningAreas();
|
||||||
broadcastToClients({
|
broadcastToClients({
|
||||||
@@ -1110,12 +1110,21 @@ app.get('/api/mining-areas', (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Update mining area status
|
// Update mining area
|
||||||
app.put('/api/mining-areas/:areaId', (req, res) => {
|
app.put('/api/mining-areas/:areaId', (req, res) => {
|
||||||
try {
|
try {
|
||||||
const areaId = parseInt(req.params.areaId);
|
const areaId = parseInt(req.params.areaId);
|
||||||
const { status } = req.body;
|
const { status, name, color } = req.body;
|
||||||
db.updateMiningAreaStatus(areaId, status);
|
|
||||||
|
// Build updates object with only provided fields
|
||||||
|
const updates = {};
|
||||||
|
if (status !== undefined) updates.status = status;
|
||||||
|
if (name !== undefined) updates.name = name;
|
||||||
|
if (color !== undefined) updates.color = color;
|
||||||
|
|
||||||
|
if (Object.keys(updates).length > 0) {
|
||||||
|
db.updateMiningArea(areaId, updates);
|
||||||
|
}
|
||||||
|
|
||||||
const areas = db.getMiningAreas();
|
const areas = db.getMiningAreas();
|
||||||
broadcastToClients({
|
broadcastToClients({
|
||||||
@@ -1790,6 +1799,36 @@ app.post('/api/turtle/:id/gps', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Write a file to turtle filesystem
|
||||||
|
app.post('/api/turtle/:id/write-file', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const turtleID = parseInt(req.params.id);
|
||||||
|
const { path, content, append } = req.body;
|
||||||
|
const turtle = turtles.get(turtleID);
|
||||||
|
if (!turtle) return res.status(404).json({ error: 'Turtle not found' });
|
||||||
|
if (!path || content === undefined) return res.status(400).json({ error: 'Missing path or content' });
|
||||||
|
|
||||||
|
const result = await turtle.writeToFile(path, content, append || false);
|
||||||
|
res.json({ success: result === true, result });
|
||||||
|
} catch (error) {
|
||||||
|
res.json({ success: false, error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Refresh detailed inventory state
|
||||||
|
app.post('/api/turtle/:id/refresh-inventory', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const turtleID = parseInt(req.params.id);
|
||||||
|
const turtle = turtles.get(turtleID);
|
||||||
|
if (!turtle) return res.status(404).json({ error: 'Turtle not found' });
|
||||||
|
|
||||||
|
const inventory = await turtle.refreshInventoryState();
|
||||||
|
res.json({ success: true, inventory });
|
||||||
|
} catch (error) {
|
||||||
|
res.json({ success: false, error: error.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Graceful shutdown
|
// Graceful shutdown
|
||||||
process.on('SIGINT', () => {
|
process.on('SIGINT', () => {
|
||||||
console.log('\n🛑 Shutting down server...');
|
console.log('\n🛑 Shutting down server...');
|
||||||
|
|||||||
Reference in New Issue
Block a user