feat: Enhance database functions for turtle paths and mining areas; add support for optional parameters and improve data handling

This commit is contained in:
MayaTheShy
2026-02-20 01:28:54 -05:00
parent 75b2088b4f
commit 3c0f72acf1

View File

@@ -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