47 #ifndef ASYNCALIASCONTROLLER_HPP__
48 #define ASYNCALIASCONTROLLER_HPP__
54 #include <ccut/async.hpp>
55 #include <ccut/utils.hpp>
56 #include <logger/Logger.hpp>
57 #include <oatpp/core/Types.hpp>
58 #include <oatpp/core/macro/codegen.hpp>
59 #include <oatpp/core/macro/component.hpp>
60 #include <oatpp/web/server/api/ApiController.hpp>
62 #include "Exception.hpp"
63 #include "FutureCoroutine.hpp"
65 #include "SmcController.hpp"
66 #include "device/DeviceStore.hpp"
68 #include OATPP_CODEGEN_BEGIN(ApiController)
78 addTag(*
this,
"alias");
81 ENDPOINT_INFO(getAliasList)
83 info->summary =
"Get list of alias";
84 info->addResponse<List<String>>(Status::CODE_200,
"application/json")
85 .addExample(
"example", List<String>{
"alias1",
"myStepper"});
87 ENDPOINT_ASYNC(
"GET",
"/alias", getAliasList)
90 ENDPOINT_ASYNC_INIT(getAliasList)
93 oatpp::UnorderedSet<String> ret{oatpp::UnorderedSet<String>::createShared()};
94 auto deviceStore(controller->deviceStore.lock());
97 std::set<std::string> list{deviceStore->getAliasList()};
98 ret->insert(list.begin(), list.end());
99 return _return(controller->createDtoResponse(Status::CODE_200, ret));
102 return _return(controller->createResponse(Status::CODE_500,
"no deviceStore"));
106 ENDPOINT_INFO(getAlias)
108 info->summary =
"Resolve an alias";
109 info->addResponse<String>(Status::CODE_200,
"application/json")
110 .addExample(
"example", String{
"grbl://1/axis/X"});
111 info->pathParams.add<String>(
"id");
113 ENDPOINT_ASYNC(
"GET",
"/alias/{id}", getAlias)
116 ENDPOINT_ASYNC_INIT(getAlias)
117 Action act()
override
119 auto deviceStore(controller->deviceStore.lock());
122 const std::string
id = request->getPathVariable(
"id").getValue(
"");
123 const std::string ret = deviceStore->getAlias(
id);
125 return _return(controller->createResponse(Status::CODE_404,
"no such alias"));
127 return _return(controller->createDtoResponse(Status::CODE_200, String(ret)));
129 return _return(controller->createResponse(Status::CODE_500,
"no deviceStore"));
133 ENDPOINT_INFO(deleteAlias)
135 info->summary =
"Delete an alias";
136 info->addResponse<String>(Status::CODE_200,
"application/json");
137 info->pathParams.add<String>(
"id");
139 ENDPOINT_ASYNC(
"DELETE",
"/alias/{id}", deleteAlias)
142 ENDPOINT_ASYNC_INIT(deleteAlias)
143 Action act()
override
145 auto deviceStore(controller->deviceStore.lock());
148 const std::string
id = request->getPathVariable(
"id").getValue(
"");
149 deviceStore->removeAlias(
id);
150 return _return(controller->createResponse(Status::CODE_200,
"done"));
152 return _return(controller->createResponse(Status::CODE_500,
"no deviceStore"));
156 ENDPOINT_INFO(putAlias)
158 info->summary =
"Create or update an alias";
159 info->addResponse<String>(Status::CODE_200,
"application/json");
160 info->pathParams.add<String>(
"id");
161 info->addConsumes<String>(
"application/json")
162 .addExample(
"device id", String(
"grbl://1/axis/X"));
164 ENDPOINT_ASYNC(
"PUT",
"/alias/{id}", putAlias)
167 ENDPOINT_ASYNC_INIT(putAlias)
168 Action act()
override
171 ->readBodyToDtoAsync<String>(
172 controller->getDefaultObjectMapper())
173 .callbackTo(&putAlias::onBodyReady);
175 Action onBodyReady(
const String &target)
177 auto deviceStore(controller->deviceStore.lock());
180 const std::string
id = request->getPathVariable(
"id").getValue(
"");
181 deviceStore->addAlias(
id, target.getValue(
""));
182 return _return(controller->createResponse(Status::CODE_200,
"done"));
184 return _return(controller->createResponse(Status::CODE_500,
"no deviceStore"));
191 #include OATPP_CODEGEN_END(ApiController)