diff --git a/native/cpp/CommonCpp/NativeModules/DraftStoreOperations.h b/native/cpp/CommonCpp/NativeModules/DraftStoreOperations.h
new file mode 100644
--- /dev/null
+++ b/native/cpp/CommonCpp/NativeModules/DraftStoreOperations.h
@@ -0,0 +1,47 @@
+#pragma once
+
+namespace comm {
+class DraftStoreOperationBase {
+public:
+  virtual void execute() = 0;
+  virtual ~DraftStoreOperationBase(){};
+};
+
+class UpdateDraftOperation : public DraftStoreOperationBase {
+public:
+  UpdateDraftOperation(jsi::Runtime &rt, const jsi::Object &payload)
+      : key{payload.getProperty(rt, "key").asString(rt).utf8(rt)},
+        text{payload.getProperty(rt, "text").asString(rt).utf8(rt)} {
+  }
+  virtual void execute() override {
+    DatabaseManager::getQueryExecutor().updateDraft(this->key, this->text);
+  }
+
+private:
+  std::string key;
+  std::string text;
+};
+
+class MoveDraftOperation : public DraftStoreOperationBase {
+public:
+  MoveDraftOperation(jsi::Runtime &rt, const jsi::Object &payload)
+      : oldKey{payload.getProperty(rt, "oldKey").asString(rt).utf8(rt)},
+        newKey{payload.getProperty(rt, "newKey").asString(rt).utf8(rt)} {
+  }
+  virtual void execute() override {
+    DatabaseManager::getQueryExecutor().moveDraft(this->oldKey, this->newKey);
+  }
+
+private:
+  std::string oldKey;
+  std::string newKey;
+};
+
+class RemoveAllDraftsOperation : public DraftStoreOperationBase {
+public:
+  virtual void execute() override {
+    DatabaseManager::getQueryExecutor().removeAllDrafts();
+  }
+};
+
+} // namespace comm