24 #ifndef ASYNCAPICONTROLLER_HPP__
25 #define ASYNCAPICONTROLLER_HPP__
31 #include <ccut/async.hpp>
32 #include <ccut/utils.hpp>
33 #include <logger/Logger.hpp>
34 #include <oatpp/core/Types.hpp>
35 #include <oatpp/core/macro/codegen.hpp>
36 #include <oatpp/core/macro/component.hpp>
37 #include <oatpp/web/server/api/ApiController.hpp>
39 #include "Exception.hpp"
40 #include "FutureCoroutine.hpp"
41 #include "SmcController.hpp"
42 #include "device/Axis.hpp"
43 #include "device/DeviceBase.hpp"
44 #include "device/DeviceStore.hpp"
45 #include "platform/PlatformFactory.hpp"
46 #include "util/serialize.hpp"
48 #include OATPP_CODEGEN_BEGIN(ApiController)
61 info->summary =
"api-docs redirection";
62 info->addResponse<List<String>>(Status::CODE_302,
"");
64 ENDPOINT_ASYNC(
"GET",
"/", root)
66 ENDPOINT_ASYNC_INIT(root)
70 auto ret = controller->createResponse(Status::CODE_302);
71 ret->putHeader(
"Location",
"/api-docs/ui");
76 ENDPOINT_INFO(devices)
78 info->summary =
"List available devices";
79 info->addResponse<List<String>>(Status::CODE_200,
"application/json")
80 .addExample(
"example",
81 List<String>{
"grbl://1/platform",
"grbl://1/axis/X",
82 "grbl://1/axis/Y",
"grbl://1/axis/Z",
83 "grbl://1/axis/A",
"grbl://1/axis/B",
86 auto ¶m = info->queryParams.add<String>(
"type")
87 .addExample(
"fetch all", String())
88 .addExample(
"trigger", String(
"trigger"))
89 .addExample(
"axis", String(
"axis"))
90 .addExample(
"platform", String(
"platform"));
91 param.description =
"device type filter, accepted values are listed in "
92 "`GET /devices/types`";
93 param.required =
false;
96 auto ¶m = info->queryParams.add<Boolean>(
"typed")
97 .addExample(
"default results", Boolean(
false))
98 .addExample(
"typed results", Boolean(
true));
99 param.description =
"get a deviceId : type map rather than a simple list";
100 param.required =
false;
104 ENDPOINT_ASYNC(
"GET",
"/devices", devices)
106 ENDPOINT_ASYNC_INIT(devices)
108 Action act()
override
110 const std::string deviceType =
111 request->getQueryParameter(
"type").getValue(
"");
112 bool success =
false;
113 bool typed = TypeInterpretation<Boolean>::fromString(
"Boolean",
114 request->getQueryParameter(
"typed"), success);
119 auto deviceStore(controller->deviceStore.lock());
122 std::set<smc::DeviceId> devices = deviceType.empty() ?
123 deviceStore->getDeviceList() :
124 deviceStore->getDeviceList(
125 smc::from_string<smc::DeviceType>(deviceType));
128 oatpp::UnorderedSet<String> ret{oatpp::UnorderedSet<String>::createShared()};
129 ret->insert(devices.begin(), devices.end());
130 return _return(controller->createDtoResponse(Status::CODE_200, ret));
134 oatpp::UnorderedFields<String> ret{oatpp::UnorderedFields<String>::createShared()};
135 for (smc::DeviceId
id : devices)
136 ret[String(
id)] = String(
smc::to_string(deviceStore->getDevice(
id)->type()));
137 return _return(controller->createDtoResponse(Status::CODE_200, ret));
141 return _return(controller->createResponse(Status::CODE_500,
"no deviceStore"));
146 #include OATPP_CODEGEN_END(ApiController)
const std::string & to_string(Axis::State state)
convert State to string