feat: Enhance database functions for turtle paths and mining areas; add support for optional parameters and improve data handling
This commit is contained in:
@@ -239,15 +239,33 @@ export function savePath(turtleId, pathName, pathData) {
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
`);
|
||||
const now = Date.now();
|
||||
stmt.run(turtleId, pathName, JSON.stringify(pathData), now, now);
|
||||
const result = stmt.run(turtleId, pathName, JSON.stringify(pathData), now, now);
|
||||
return result.lastInsertRowid;
|
||||
}
|
||||
|
||||
export function getPaths(turtleId) {
|
||||
const stmt = db.prepare('SELECT * FROM turtle_paths WHERE turtle_id = ? ORDER BY created_at DESC');
|
||||
return stmt.all(turtleId).map(row => ({
|
||||
...row,
|
||||
path_data: JSON.parse(row.path_data)
|
||||
}));
|
||||
export function getPaths(turtleId = null) {
|
||||
if (turtleId) {
|
||||
const stmt = db.prepare('SELECT * FROM turtle_paths WHERE turtle_id = ? ORDER BY created_at DESC');
|
||||
return stmt.all(turtleId).map(row => ({
|
||||
...row,
|
||||
path_data: JSON.parse(row.path_data)
|
||||
}));
|
||||
} else {
|
||||
const stmt = db.prepare('SELECT * FROM turtle_paths ORDER BY created_at DESC');
|
||||
return stmt.all().map(row => ({
|
||||
...row,
|
||||
path_data: JSON.parse(row.path_data)
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
export function getPath(pathId) {
|
||||
const stmt = db.prepare('SELECT * FROM turtle_paths WHERE id = ?');
|
||||
const row = stmt.get(pathId);
|
||||
if (row) {
|
||||
return { ...row, path_data: JSON.parse(row.path_data) };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function deletePath(pathId) {
|
||||
@@ -256,13 +274,13 @@ export function deletePath(pathId) {
|
||||
}
|
||||
|
||||
// Task Queue
|
||||
export function createTask(taskType, taskData, priority = 0) {
|
||||
export function createTask(taskType, taskData, priority = 0, assignedTurtleId = null) {
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO task_queue (task_type, task_data, priority, status, created_at, updated_at)
|
||||
VALUES (?, ?, ?, 'pending', ?, ?)
|
||||
INSERT INTO task_queue (task_type, task_data, assigned_turtle_id, priority, status, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, 'pending', ?, ?)
|
||||
`);
|
||||
const now = Date.now();
|
||||
const result = stmt.run(taskType, JSON.stringify(taskData), priority, now, now);
|
||||
const result = stmt.run(taskType, JSON.stringify(taskData), assignedTurtleId, priority, now, now);
|
||||
return result.lastInsertRowid;
|
||||
}
|
||||
|
||||
@@ -292,6 +310,15 @@ export function assignTask(taskId, turtleId) {
|
||||
stmt.run(turtleId, Date.now(), taskId);
|
||||
}
|
||||
|
||||
export function updateTaskStatus(taskId, status, result = null) {
|
||||
const stmt = db.prepare(`
|
||||
UPDATE task_queue
|
||||
SET status = ?, task_data = CASE WHEN ? IS NOT NULL THEN json_set(task_data, '$.result', ?) ELSE task_data END, updated_at = ?
|
||||
WHERE id = ?
|
||||
`);
|
||||
stmt.run(status, result, result, Date.now(), taskId);
|
||||
}
|
||||
|
||||
export function completeTask(taskId) {
|
||||
const stmt = db.prepare(`
|
||||
UPDATE task_queue
|
||||
@@ -301,7 +328,19 @@ export function completeTask(taskId) {
|
||||
stmt.run(Date.now(), taskId);
|
||||
}
|
||||
|
||||
export function getAllTasks() {
|
||||
export function deleteTask(taskId) {
|
||||
const stmt = db.prepare('DELETE FROM task_queue WHERE id = ?');
|
||||
return stmt.run(taskId);
|
||||
}
|
||||
|
||||
export function getAllTasks(status = null) {
|
||||
if (status) {
|
||||
const stmt = db.prepare('SELECT * FROM task_queue WHERE status = ? ORDER BY priority DESC, created_at DESC');
|
||||
return stmt.all(status).map(row => ({
|
||||
...row,
|
||||
task_data: JSON.parse(row.task_data)
|
||||
}));
|
||||
}
|
||||
const stmt = db.prepare('SELECT * FROM task_queue ORDER BY priority DESC, created_at DESC');
|
||||
return stmt.all().map(row => ({
|
||||
...row,
|
||||
@@ -310,25 +349,40 @@ export function getAllTasks() {
|
||||
}
|
||||
|
||||
// Mining Areas
|
||||
export function saveMiningArea(turtleId, bounds) {
|
||||
export function saveMiningArea(turtleId, bounds, areaName = null, status = 'planned') {
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO mining_areas (turtle_id, min_x, min_y, min_z, max_x, max_y, max_z, status, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, 'active', ?, ?)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`);
|
||||
const now = Date.now();
|
||||
stmt.run(
|
||||
const result = stmt.run(
|
||||
turtleId,
|
||||
bounds.minX, bounds.minY, bounds.minZ,
|
||||
bounds.maxX, bounds.maxY, bounds.maxZ,
|
||||
now, now
|
||||
status, now, now
|
||||
);
|
||||
return result.lastInsertRowid;
|
||||
}
|
||||
|
||||
export function getMiningAreas() {
|
||||
const stmt = db.prepare('SELECT * FROM mining_areas WHERE status = \'active\'');
|
||||
export function getMiningAreas(statusFilter = null) {
|
||||
if (statusFilter) {
|
||||
const stmt = db.prepare('SELECT * FROM mining_areas WHERE status = ? ORDER BY created_at DESC');
|
||||
return stmt.all(statusFilter);
|
||||
}
|
||||
const stmt = db.prepare('SELECT * FROM mining_areas ORDER BY created_at DESC');
|
||||
return stmt.all();
|
||||
}
|
||||
|
||||
export function updateMiningAreaStatus(areaId, status) {
|
||||
const stmt = db.prepare('UPDATE mining_areas SET status = ?, updated_at = ? WHERE id = ?');
|
||||
stmt.run(status, Date.now(), areaId);
|
||||
}
|
||||
|
||||
export function deleteMiningArea(areaId) {
|
||||
const stmt = db.prepare('DELETE FROM mining_areas WHERE id = ?');
|
||||
return stmt.run(areaId);
|
||||
}
|
||||
|
||||
export function closeMiningArea(areaId) {
|
||||
const stmt = db.prepare('UPDATE mining_areas SET status = \'closed\', updated_at = ? WHERE id = ?');
|
||||
stmt.run(Date.now(), areaId);
|
||||
@@ -373,7 +427,7 @@ export function getMiningStats(turtleId = null, days = 7) {
|
||||
|
||||
export function getTopMiners(limit = 10) {
|
||||
const stmt = db.prepare(`
|
||||
SELECT turtle_id, SUM(count) as total_blocks
|
||||
SELECT turtle_id, SUM(count) as total_blocks, COUNT(DISTINCT block_type) as unique_types
|
||||
FROM mining_stats
|
||||
GROUP BY turtle_id
|
||||
ORDER BY total_blocks DESC
|
||||
|
||||
Reference in New Issue
Block a user