#pragma once #include #include #include #include #include #include #include #include "NodeContext.h" #include "NodeInfo.h" #include "TaskManager.h" #include "ApiTypes.h" class Service; // Forward declaration class ApiServer { public: ApiServer(NodeContext& ctx, TaskManager& taskMgr, uint16_t port = 80); void begin(); void addService(Service& service); void addEndpoint(const String& uri, int method, std::function requestHandler); void addEndpoint(const String& uri, int method, std::function requestHandler, std::function uploadHandler); void addEndpoint(const String& uri, int method, std::function requestHandler, const std::vector& params); void addEndpoint(const String& uri, int method, std::function requestHandler, std::function uploadHandler, const std::vector& params); static const char* methodToStr(int method); // Access to endpoints for endpoints endpoint const std::vector& getEndpoints() const { return endpoints; } private: AsyncWebServer server; NodeContext& ctx; TaskManager& taskManager; std::vector> services; std::vector endpoints; // Single source of truth for endpoints // Internal helpers void registerEndpoint(const String& uri, int method, const std::vector& params, const String& serviceName); };