Bug fixing
This commit is contained in:
@@ -9,6 +9,18 @@
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
|
||||
/*
|
||||
|
||||
IMPORTANT: handling of tags.
|
||||
|
||||
When an object is uploaded:
|
||||
- the object is stored in the object store
|
||||
- the database is primarily
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
namespace simple_object_storage {
|
||||
|
||||
PutHandler::PutHandler(Server& server) : server_(server) {}
|
||||
@@ -55,19 +67,25 @@ void PutHandler::handle_put_object(const httplib::Request& req, httplib::Respons
|
||||
}
|
||||
|
||||
// Validate required metadata fields
|
||||
if (!metadata.contains("labeltag")) {
|
||||
if (!metadata.contains("label")) {
|
||||
res.status = 400;
|
||||
nlohmann::json response = {{"result", "error"}, {"error", "Missing required metadata field: labeltag"}};
|
||||
nlohmann::json response = {{"result", "error"}, {"error", "Missing required metadata field: label"}};
|
||||
res.set_content(response.dump(), "application/json");
|
||||
return;
|
||||
}
|
||||
|
||||
// Extract labeltag and validate format
|
||||
std::string labeltag = metadata["labeltag"];
|
||||
auto [label, tag] = server_.parse_label_tag(labeltag);
|
||||
if (label.empty() || tag.empty()) {
|
||||
if (!metadata.contains("tags") || !metadata["tags"].is_array() || metadata["tags"].empty()) {
|
||||
res.status = 400;
|
||||
nlohmann::json response = {{"result", "error"}, {"error", "Invalid label:tag format"}};
|
||||
nlohmann::json response = {{"result", "error"}, {"error", "Missing or invalid required metadata field: tags (must be non-empty array)"}};
|
||||
res.set_content(response.dump(), "application/json");
|
||||
return;
|
||||
}
|
||||
|
||||
// Extract label and tags
|
||||
std::string label = metadata["label"];
|
||||
if (label.empty()) {
|
||||
res.status = 400;
|
||||
nlohmann::json response = {{"result", "error"}, {"error", "Label cannot be empty"}};
|
||||
res.set_content(response.dump(), "application/json");
|
||||
return;
|
||||
}
|
||||
@@ -144,11 +162,23 @@ void PutHandler::handle_put_object(const httplib::Request& req, httplib::Respons
|
||||
|
||||
// Update database index
|
||||
dbEntry entry;
|
||||
entry.label_tag = labeltag;
|
||||
entry.hash = std::to_string(hash);
|
||||
entry.metadata = metadata; // Store the complete metadata
|
||||
|
||||
if (!server_.db_->update_or_insert(entry)) {
|
||||
// For each tag, create a label:tag entry
|
||||
bool success = true;
|
||||
for (const auto& tag : metadata["tags"]) {
|
||||
std::string tag_str = tag.get<std::string>();
|
||||
if (tag_str.empty()) continue; // Skip empty tags
|
||||
|
||||
entry.label_tag = label + ":" + tag_str;
|
||||
if (!server_.db_->update_or_insert(entry)) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
res.status = 500;
|
||||
nlohmann::json response = {{"result", "error"}, {"error", "Failed to update database index"}};
|
||||
res.set_content(response.dump(), "application/json");
|
||||
|
Reference in New Issue
Block a user