88#include " DataModels/CommandSchema.h"
99
1010namespace ConnectedSystemsAPI {
11+ // / <summary>
12+ // / API for interacting with control streams in the Connected Systems API.
13+ // / </summary>
1114 class ControlStreamsAPI {
1215 private:
1316 std::string apiRoot;
@@ -19,7 +22,12 @@ namespace ConnectedSystemsAPI {
1922 : apiRoot(apiRoot), authHeader(authHeader) {
2023 }
2124
22- APIResponse<DataModels::ControlStream> getControlStreams (std::string queryString = " " ) {
25+ // / <summary>
26+ // / List all control streams available from this server endpoint.
27+ // / </summary>
28+ // / <param name="queryString">The query string.</param>
29+ // / <returns>A response object containing a list of control streams.</returns>
30+ APIResponse<DataModels::ControlStream> getControlStreams (const std::string& queryString = " " ) const {
2331 auto response = APIRequest::Builder ()
2432 .setApiRoot (apiRoot)
2533 .setMethod (" GET" )
@@ -31,7 +39,16 @@ namespace ConnectedSystemsAPI {
3139 return response;
3240 }
3341
34- APIResponse<DataModels::ControlStream> getControlStreamsOfSystem (const std::string& systemId, std::string queryString = " " ) {
42+ // / <summary>
43+ // / List all control streams available from the parent system.
44+ // / </summary>
45+ // / <param name="systemId">The local identifier of a system.</param>
46+ // / <param name="queryString">The query string.</param>
47+ // / <returns>A response object containing a list of control streams.</returns>
48+ APIResponse<DataModels::ControlStream> getControlStreamsOfSystem (const std::string& systemId, const std::string& queryString = " " ) const {
49+ if (systemId.empty ())
50+ return APIResponse<DataModels::ControlStream>(400 , " Invalid systemId" , " " , {});
51+
3552 auto response = APIRequest::Builder ()
3653 .setApiRoot (apiRoot)
3754 .setMethod (" GET" )
@@ -45,7 +62,15 @@ namespace ConnectedSystemsAPI {
4562 return response;
4663 }
4764
48- APIResponse<DataModels::ControlStream> getControlStreamById (const std::string& controlStreamId) {
65+ // / <summary>
66+ // / Get a specific control stream by its ID.
67+ // / </summary>
68+ // / <param name="controlStreamId">The local identifier of a control stream.</param>
69+ // / <returns>A response object containing the control stream.</returns>
70+ APIResponse<DataModels::ControlStream> getControlStreamById (const std::string& controlStreamId) const {
71+ if (controlStreamId.empty ())
72+ return APIResponse<DataModels::ControlStream>(400 , " Invalid controlStreamId" , " " , {});
73+
4974 auto response = APIRequest::Builder ()
5075 .setApiRoot (apiRoot)
5176 .setMethod (" GET" )
@@ -57,7 +82,15 @@ namespace ConnectedSystemsAPI {
5782 return response;
5883 }
5984
60- APIResponse<DataModels::CommandSchema> getControlStreamSchema (const std::string& controlStreamId) {
85+ // / <summary>
86+ // / Get the command schema for a specific control stream by its ID.
87+ // / </summary>
88+ // / <param name="controlStreamId">The local identifier of a control stream.</param>
89+ // / <returns>A response object containing the command schema.</returns>
90+ APIResponse<DataModels::CommandSchema> getControlStreamSchema (const std::string& controlStreamId) const {
91+ if (controlStreamId.empty ())
92+ return APIResponse<DataModels::CommandSchema>(400 , " Invalid controlStreamId" , " " , {});
93+
6194 auto response = APIRequest::Builder ()
6295 .setApiRoot (apiRoot)
6396 .setMethod (" GET" )
@@ -69,5 +102,86 @@ namespace ConnectedSystemsAPI {
69102 .execute <DataModels::CommandSchema>();
70103 return response;
71104 }
105+
106+ // / <summary>
107+ // / Create a new control stream under the specified parent system.
108+ // / </summary>
109+ // / <param name="systemId">The local identifier of the parent system.</param>
110+ // / <param name="controlStream">The control stream to create.</param>
111+ // / <returns>A response object indicating success or failure.</returns>
112+ APIResponse<void > createControlStream (const std::string& systemId, const DataModels::ControlStream& controlStream) const {
113+ if (systemId.empty ())
114+ return APIResponse<void >(400 , " Invalid systemId" , " " , {});
115+
116+ nlohmann::ordered_json j;
117+ ConnectedSystemsAPI::DataModels::to_json (j, controlStream);
118+
119+ auto response = APIRequest::Builder ()
120+ .setApiRoot (apiRoot)
121+ .setMethod (" POST" )
122+ .setAuthHeader (authHeader)
123+ .addHeader (" Content-Type" , " application/json" )
124+ .setResourcePath (" systems" )
125+ .setResourceId (systemId)
126+ .setSubResourcePath (" controlstreams" )
127+ .setBody (j.dump ())
128+ .build ()
129+ .execute <void >();
130+ return response;
131+ }
132+
133+ // / <summary>
134+ // / Update an existing control stream by its ID.
135+ // / </summary>
136+ // / <param name="controlStreamId">The local identifier of the control stream to update.</param>
137+ // / <param name="controlStream">The updated control stream.</param>
138+ // / <returns>A response object indicating success or failure.</returns>
139+ APIResponse<void > updateControlStream (const std::string& controlStreamId, const DataModels::ControlStream& controlStream) const {
140+ if (controlStreamId.empty ())
141+ return APIResponse<void >(400 , " Invalid controlStreamId" , " " , {});
142+
143+ nlohmann::ordered_json j;
144+ ConnectedSystemsAPI::DataModels::to_json (j, controlStream);
145+
146+ auto response = APIRequest::Builder ()
147+ .setApiRoot (apiRoot)
148+ .setMethod (" PUT" )
149+ .setAuthHeader (authHeader)
150+ .addHeader (" Content-Type" , " application/json" )
151+ .setResourcePath (" controlstreams" )
152+ .setResourceId (controlStreamId)
153+ .setBody (j.dump ())
154+ .build ()
155+ .execute <void >();
156+ return response;
157+ }
158+
159+ // / <summary>
160+ // / Delete a control stream by its ID, with an option to delete all associated commands.
161+ // / </summary>
162+ // / <param name="controlStreamId">The local identifier of the control stream to delete.</param>
163+ // / <param name="cascade">If true, all associated commands will also be deleted.
164+ // / If false, associated commands will be preserved.
165+ // / If undefined, the server's default behavior will be applied (false unless otherwise specified).</param>
166+ // / <returns>A response object indicating success or failure.</returns>
167+ APIResponse<void > deleteControlStream (const std::string& controlStreamId, std::optional<bool > cascade = std::nullopt ) const {
168+ if (controlStreamId.empty ())
169+ return APIResponse<void >(400 , " Invalid controlStreamId" , " " , {});
170+
171+ std::string queryString;
172+ if (cascade.has_value ())
173+ queryString = cascade.value () ? " ?cascade=true" : " ?cascade=false" ;
174+
175+ auto response = APIRequest::Builder ()
176+ .setApiRoot (apiRoot)
177+ .setMethod (" DELETE" )
178+ .setAuthHeader (authHeader)
179+ .setResourcePath (" controlstreams" )
180+ .setResourceId (controlStreamId)
181+ .setQueryString (queryString)
182+ .build ()
183+ .execute <void >();
184+ return response;
185+ }
72186 };
73187}
0 commit comments