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 (?, ?, ?, ?, ?)
|
VALUES (?, ?, ?, ?, ?)
|
||||||
`);
|
`);
|
||||||
const now = Date.now();
|
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) {
|
export function getPaths(turtleId = null) {
|
||||||
const stmt = db.prepare('SELECT * FROM turtle_paths WHERE turtle_id = ? ORDER BY created_at DESC');
|
if (turtleId) {
|
||||||
return stmt.all(turtleId).map(row => ({
|
const stmt = db.prepare('SELECT * FROM turtle_paths WHERE turtle_id = ? ORDER BY created_at DESC');
|
||||||
...row,
|
return stmt.all(turtleId).map(row => ({
|
||||||
path_data: JSON.parse(row.path_data)
|
...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) {
|
export function deletePath(pathId) {
|
||||||
@@ -256,13 +274,13 @@ export function deletePath(pathId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Task Queue
|
// Task Queue
|
||||||
export function createTask(taskType, taskData, priority = 0) {
|
export function createTask(taskType, taskData, priority = 0, assignedTurtleId = null) {
|
||||||
const stmt = db.prepare(`
|
const stmt = db.prepare(`
|
||||||
INSERT INTO task_queue (task_type, task_data, priority, status, created_at, updated_at)
|
INSERT INTO task_queue (task_type, task_data, assigned_turtle_id, priority, status, created_at, updated_at)
|
||||||
VALUES (?, ?, ?, 'pending', ?, ?)
|
VALUES (?, ?, ?, ?, 'pending', ?, ?)
|
||||||
`);
|
`);
|
||||||
const now = Date.now();
|
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;
|
return result.lastInsertRowid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,6 +310,15 @@ export function assignTask(taskId, turtleId) {
|
|||||||
stmt.run(turtleId, Date.now(), taskId);
|
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) {
|
export function completeTask(taskId) {
|
||||||
const stmt = db.prepare(`
|
const stmt = db.prepare(`
|
||||||
UPDATE task_queue
|
UPDATE task_queue
|
||||||
@@ -301,7 +328,19 @@ export function completeTask(taskId) {
|
|||||||
stmt.run(Date.now(), 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');
|
const stmt = db.prepare('SELECT * FROM task_queue ORDER BY priority DESC, created_at DESC');
|
||||||
return stmt.all().map(row => ({
|
return stmt.all().map(row => ({
|
||||||
...row,
|
...row,
|
||||||
@@ -310,25 +349,40 @@ export function getAllTasks() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mining Areas
|
// Mining Areas
|
||||||
export function saveMiningArea(turtleId, bounds) {
|
export function saveMiningArea(turtleId, bounds, areaName = null, status = 'planned') {
|
||||||
const stmt = db.prepare(`
|
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)
|
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();
|
const now = Date.now();
|
||||||
stmt.run(
|
const result = stmt.run(
|
||||||
turtleId,
|
turtleId,
|
||||||
bounds.minX, bounds.minY, bounds.minZ,
|
bounds.minX, bounds.minY, bounds.minZ,
|
||||||
bounds.maxX, bounds.maxY, bounds.maxZ,
|
bounds.maxX, bounds.maxY, bounds.maxZ,
|
||||||
now, now
|
status, now, now
|
||||||
);
|
);
|
||||||
|
return result.lastInsertRowid;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMiningAreas() {
|
export function getMiningAreas(statusFilter = null) {
|
||||||
const stmt = db.prepare('SELECT * FROM mining_areas WHERE status = \'active\'');
|
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();
|
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) {
|
export function closeMiningArea(areaId) {
|
||||||
const stmt = db.prepare('UPDATE mining_areas SET status = \'closed\', updated_at = ? WHERE id = ?');
|
const stmt = db.prepare('UPDATE mining_areas SET status = \'closed\', updated_at = ? WHERE id = ?');
|
||||||
stmt.run(Date.now(), areaId);
|
stmt.run(Date.now(), areaId);
|
||||||
@@ -373,7 +427,7 @@ export function getMiningStats(turtleId = null, days = 7) {
|
|||||||
|
|
||||||
export function getTopMiners(limit = 10) {
|
export function getTopMiners(limit = 10) {
|
||||||
const stmt = db.prepare(`
|
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
|
FROM mining_stats
|
||||||
GROUP BY turtle_id
|
GROUP BY turtle_id
|
||||||
ORDER BY total_blocks DESC
|
ORDER BY total_blocks DESC
|
||||||
|
|||||||
Reference in New Issue
Block a user