namespace samples::mongodb {
 
 public:
  static constexpr std::string_view kName = "handler-translations";
 
      : HttpHandlerBase(config, context),
 
  std::string HandleRequestThrow(
    if (request.
GetMethod() == server::http::HttpMethod::kPatch) {
 
      InsertNew(request);
      return {};
    } else {
      return ReturnDiff(request);
    }
  }
 
 private:
 
  storages::mongo::PoolPtr pool_;
};
 
}  
 
namespace samples::mongodb {
 
  const auto& key = request.
GetArg(
"key");
 
  const auto& lang = request.
GetArg(
"lang");
 
  const auto& value = request.
GetArg(
"value");
 
 
  auto transl = pool_->GetCollection("translations");
  transl.InsertOne(MakeDoc("key", key, "lang", lang, "value", value));
}
 
std::string Translations::ReturnDiff(
  auto time_point = std::chrono::system_clock::time_point{};
  if (request.
HasArg(
"last_update")) {
 
    const auto& update_time = request.
GetArg(
"last_update");
 
  }
 
  auto transl = pool_->GetCollection("translations");
  auto cursor = transl.Find(
      options::Sort{std::make_pair("_id", options::Sort::kAscending)});
 
  if (!cursor) {
    return "{}";
  }
 
  auto content = vb["content"];
 
  for (const auto& doc : cursor) {
    const auto key = doc[
"key"].
As<std::string>();
 
    const auto lang = doc["lang"].As<std::string>();
    content[key][lang] = doc["value"].As<std::string>();
 
    last = doc;
  }
 
      last["_id"].As<formats::bson::Oid>().GetTimePoint());
 
}
 
}  
 
int main(int argc, char* argv[]) {
                                  .Append<components::Mongo>("mongo-tr")
                                  .Append<samples::mongodb::Translations>();
}