Selaa lähdekoodia

feat(grpc,migrations): migrate Document.data callsites (phase B T5)

- database_grpc_impl.cpp: Insert/Update/Upsert/BatchInsert paths convert
  proto data via doc.set_data(...). toProto / toProtoVersionEntry emit
  the wire form via doc_binary::to_json_text(doc.data_binary) — skips a
  full materialise + dump round-trip. fromProto rebuilds via set_data.
- migration_runner.cpp: every Document doc; ... doc.data = ... path now
  uses set_data so the binary tree is built directly. Affects insert,
  insert_if_not_exists, upsert, update, upsert_setting, generate_secret,
  and recordMigration.
fszontagh 2 kuukautta sitten
vanhempi
sitoutus
704712246c

+ 8 - 8
service/src/database_grpc_impl.cpp

@@ -111,7 +111,7 @@ grpc::Status DatabaseGrpcImpl::Insert(
 
         Document doc;
         doc.id = request->id();
-        doc.data = data;
+        doc.set_data(data);
         if (request->ttl_seconds() > 0) {
             doc.setTtlSeconds(request->ttl_seconds());
         }
@@ -221,7 +221,7 @@ grpc::Status DatabaseGrpcImpl::Update(
         nlohmann::json data = smartbotic::db::parse_to_nlohmann(request->data());
 
         Document doc;
-        doc.data = data;
+        doc.set_data(data);
 
         // Set audit field for update
         if (!request->actor().empty()) {
@@ -360,7 +360,7 @@ grpc::Status DatabaseGrpcImpl::Upsert(
 
         Document doc;
         doc.id = request->id();
-        doc.data = data;
+        doc.set_data(data);
         if (request->ttl_seconds() > 0) {
             doc.setTtlSeconds(request->ttl_seconds());
         }
@@ -586,7 +586,7 @@ grpc::Status DatabaseGrpcImpl::BatchInsert(
 
             Document doc;
             doc.id = item.id();
-            doc.data = data;
+            doc.set_data(data);
             if (item.ttl_seconds() > 0) {
                 doc.setTtlSeconds(item.ttl_seconds());
             }
@@ -765,7 +765,7 @@ grpc::Status DatabaseGrpcImpl::SimilaritySearch(
             auto* protoResult = response->add_results();
             protoResult->set_id(result.id);
             protoResult->set_score(result.score);
-            protoResult->set_data(result.document.data.dump());
+            protoResult->set_data(smartbotic::db::doc_binary::to_json_text(result.document.data_binary));
         }
 
         return grpc::Status::OK;
@@ -1257,7 +1257,7 @@ pb::Document DatabaseGrpcImpl::toProto(const Document& doc) {
     pb::Document proto;
     proto.set_id(doc.id);
     proto.set_collection(doc.collection);
-    proto.set_data(doc.data.dump());
+    proto.set_data(smartbotic::db::doc_binary::to_json_text(doc.data_binary));
     proto.set_version(doc.version);
     proto.set_created_at(doc.createdAt);
     proto.set_updated_at(doc.updatedAt);
@@ -1276,7 +1276,7 @@ Document DatabaseGrpcImpl::fromProto(const pb::Document& proto) {
     Document doc;
     doc.id = proto.id();
     doc.collection = proto.collection();
-    doc.data = smartbotic::db::parse_to_nlohmann(proto.data());
+    doc.set_data(smartbotic::db::parse_to_nlohmann(proto.data()));
     doc.version = proto.version();
     doc.createdAt = proto.created_at();
     doc.updatedAt = proto.updated_at();
@@ -1313,7 +1313,7 @@ pb::CollectionInfo DatabaseGrpcImpl::toProtoCollInfo(const struct CollectionInfo
 pb::DocumentVersionEntry DatabaseGrpcImpl::toProtoVersionEntry(const DocumentVersion& ver) {
     pb::DocumentVersionEntry proto;
     proto.set_version(ver.version);
-    proto.set_data(ver.data.dump());
+    proto.set_data(smartbotic::db::doc_binary::to_json_text(ver.data_binary));
     proto.set_timestamp(ver.timestamp);
     proto.set_updated_by(ver.updatedBy);
     proto.set_encrypted(ver.encrypted);

+ 8 - 8
service/src/migrations/migration_runner.cpp

@@ -352,7 +352,7 @@ bool MigrationRunner::applyOperation(const nlohmann::json& operation) {
 
         Document doc;
         doc.id = id;
-        doc.data = operation["data"];
+        doc.set_data(operation["data"]);
 
         try {
             store_.insert(collection, doc);
@@ -381,7 +381,7 @@ bool MigrationRunner::applyOperation(const nlohmann::json& operation) {
 
         Document doc;
         doc.id = id;
-        doc.data = operation["data"];
+        doc.set_data(operation["data"]);
 
         try {
             store_.insert(collection, doc);
@@ -404,7 +404,7 @@ bool MigrationRunner::applyOperation(const nlohmann::json& operation) {
 
         Document doc;
         doc.id = id;
-        doc.data = operation["data"];
+        doc.set_data(operation["data"]);
 
         store_.upsert(collection, doc);
         spdlog::debug("upsert into '{}': {}", collection, doc.id);
@@ -422,7 +422,7 @@ bool MigrationRunner::applyOperation(const nlohmann::json& operation) {
 
         Document doc;
         doc.id = id;
-        doc.data = operation["data"];
+        doc.set_data(operation["data"]);
 
         bool updated = store_.update(collection, id, doc);
         spdlog::debug("update '{}': {} ({})", id, updated ? "updated" : "not found",
@@ -567,7 +567,7 @@ bool MigrationRunner::applyOperation(const nlohmann::json& operation) {
 
         Document doc;
         doc.id = key;
-        doc.data = nlohmann::json{{"value", value_to_write}};
+        doc.set_data(nlohmann::json{{"value", value_to_write}});
         store_.upsert(collection, doc);
         spdlog::debug("upsert_setting '{}/{}' = '{}' (fresh_install={})",
                       collection, key, value_to_write, fresh_install_at_start_);
@@ -611,7 +611,7 @@ bool MigrationRunner::applyOperation(const nlohmann::json& operation) {
 
         Document doc;
         doc.id = key;
-        doc.data = nlohmann::json{{"value", hex.str()}};
+        doc.set_data(nlohmann::json{{"value", hex.str()}});
         store_.upsert(collection, doc);
         spdlog::info("generate_secret '{}/{}': {}-byte secret generated", collection, key, bytes);
         return true;
@@ -631,14 +631,14 @@ void MigrationRunner::recordMigration(const std::string& version, const std::str
 
     Document doc;
     doc.id = id;
-    doc.data = {
+    doc.set_data(nlohmann::json{
         {"version", version},
         {"name", name},
         {"applied_at", std::chrono::duration_cast<std::chrono::milliseconds>(
             std::chrono::system_clock::now().time_since_epoch()).count()},
         {"status", "applied"},
         {"checksum", checksum}
-    };
+    });
 
     store_.insert(MIGRATIONS_COLLECTION, doc);
 }