API mission

This commit is contained in:
2026-06-13 13:35:00 +07:00
parent 6f6d925fdd
commit 1a8bddb037
23 changed files with 1930 additions and 23 deletions

View File

@@ -137,6 +137,9 @@ std::optional<nlohmann::json> MissionQueue::enqueue(const nlohmann::json& payloa
entry["mission"] = payload["mission"];
entry["parameters"] = payload.contains("parameters") && payload["parameters"].is_object() ? payload["parameters"]
: nlohmann::json::object();
entry["priority"] = payload.contains("priority") && payload["priority"].is_number() ? payload["priority"].get<int>() : 0;
entry["robot_id"] = payload.value("robot_id", "default");
entry["source"] = payload.value("source", "ui");
entry["status"] = "pending";
entry["created_at"] = IdUtil::nowIso8601();
entry["started_at"] = nullptr;
@@ -145,7 +148,7 @@ std::optional<nlohmann::json> MissionQueue::enqueue(const nlohmann::json& payloa
{
std::lock_guard<std::mutex> lock(mu_);
queue_.push_back(entry);
insertByPriorityUnlocked(entry);
saveUnlocked();
}
@@ -153,6 +156,29 @@ std::optional<nlohmann::json> MissionQueue::enqueue(const nlohmann::json& payloa
return entry;
}
void MissionQueue::insertByPriorityUnlocked(nlohmann::json& entry)
{
const int priority = entry.value("priority", 0);
size_t insert_at = queue_.size();
for (size_t i = 0; i < queue_.size(); ++i)
{
if (!queue_[i].is_object())
continue;
if (queue_[i].value("status", "") != "pending")
continue;
const int existing = queue_[i].value("priority", 0);
if (priority > existing)
{
insert_at = i;
break;
}
}
if (insert_at >= queue_.size())
queue_.push_back(entry);
else
queue_.insert(queue_.begin() + static_cast<nlohmann::json::difference_type>(insert_at), entry);
}
bool MissionQueue::removeById(const std::string& id, std::string& err)
{
std::lock_guard<std::mutex> lock(mu_);