#pragma once #include #include #include #include #include #include namespace sw { namespace redis { class Redis; } } class RedisPublisher { public: // Ex.: "tcp://127.0.0.1:6379?keep_alive=true&socket_timeout=200ms" explicit RedisPublisher(const std::string& uri); // SET key com JSON; ttl_sec <= 0 => sem expire bool set_json(const std::string& key, const std::string& json, int ttl_sec = 0); // XADD histórico (retorna id gerado). Se maxlen>0, usa aprox MAXLEN~. std::string xadd(const std::string& stream, const std::vector>& fields, size_t maxlen = 0); bool hset_fields(const std::string& key, const std::vector>& fields, int ttl_sec = 0); // 1) Merge com dicionário “flat” em estilo a.b.c = "valor" bool set_json_merge_paths(const std::string& key, const std::vector>& flat_fields, int ttl_sec = 0, const std::string& sep = "."); // 2) Merge com JSON aninhado (deep-merge) bool set_json_merge_object(const std::string& key, const nlohmann::json& patch, int ttl_sec = 0); private: std::unique_ptr r_; };