feat: Enhance mining area API; add formatting helper, support for multiple input formats, and new endpoints for updating and deleting areas

This commit is contained in:
MayaTheShy
2026-02-20 01:29:29 -05:00
parent d7433b8bcc
commit 7a3b30bbbf

View File

@@ -625,16 +625,45 @@ app.post('/api/tasks/:taskId/complete', (req, res) => {
// ========== MINING AREA ENDPOINTS ==========
// Save a mining area claim
// Helper to format mining area for API response
function formatMiningArea(area) {
return {
areaID: area.id,
turtleID: area.turtle_id,
startX: area.min_x,
startY: area.min_y,
startZ: area.min_z,
endX: area.max_x,
endY: area.max_y,
endZ: area.max_z,
status: area.status,
createdAt: area.created_at,
updatedAt: area.updated_at
};
}
// Save a mining area
app.post('/api/mining-areas', (req, res) => {
try {
const { turtleId, bounds } = req.body;
db.saveMiningArea(turtleId, bounds);
const { turtleId, turtleID, bounds, startX, startY, startZ, endX, endY, endZ, areaName, status } = req.body;
const tid = turtleId || turtleID;
// Support both {turtleId, bounds} and flat {startX,startY,...} formats
const areaBounds = bounds || {
minX: Math.min(Number(startX), Number(endX)),
minY: Math.min(Number(startY), Number(endY)),
minZ: Math.min(Number(startZ), Number(endZ)),
maxX: Math.max(Number(startX), Number(endX)),
maxY: Math.max(Number(startY), Number(endY)),
maxZ: Math.max(Number(startZ), Number(endZ))
};
db.saveMiningArea(tid, areaBounds, areaName || null, status || 'planned');
const areas = db.getMiningAreas();
broadcastToClients({
type: 'mining_areas_updated',
areas
areas: areas.map(formatMiningArea)
});
res.json({ success: true });
@@ -643,17 +672,54 @@ app.post('/api/mining-areas', (req, res) => {
}
});
// Get all active mining areas
// Get all mining areas
app.get('/api/mining-areas', (req, res) => {
try {
const areas = db.getMiningAreas();
res.json({ areas });
res.json(areas.map(formatMiningArea));
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Close a mining area
// Update mining area status
app.put('/api/mining-areas/:areaId', (req, res) => {
try {
const areaId = parseInt(req.params.areaId);
const { status } = req.body;
db.updateMiningAreaStatus(areaId, status);
const areas = db.getMiningAreas();
broadcastToClients({
type: 'mining_areas_updated',
areas: areas.map(formatMiningArea)
});
res.json({ success: true });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Delete a mining area
app.delete('/api/mining-areas/:areaId', (req, res) => {
try {
const areaId = parseInt(req.params.areaId);
db.deleteMiningArea(areaId);
const areas = db.getMiningAreas();
broadcastToClients({
type: 'mining_areas_updated',
areas: areas.map(formatMiningArea)
});
res.json({ success: true });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Close a mining area (legacy endpoint)
app.post('/api/mining-areas/:areaId/close', (req, res) => {
try {
const areaId = parseInt(req.params.areaId);
@@ -662,7 +728,7 @@ app.post('/api/mining-areas/:areaId/close', (req, res) => {
const areas = db.getMiningAreas();
broadcastToClients({
type: 'mining_areas_updated',
areas
areas: areas.map(formatMiningArea)
});
res.json({ success: true });