From 0edf06fae6d13c039df63b1918773a75949a99ba Mon Sep 17 00:00:00 2001
From: jroyan <jerome.royan@b-com.com>
Date: Fri, 20 Sep 2024 14:21:32 +0200
Subject: [PATCH] update patches

---
 EtsiServerGen/patches/applyPatches.sh         |  13 +-
 .../patches/fixCppCapabilityModel.patch       |  22 +-
 .../patches/fixCppGetRelocResponse.patch      |  14 -
 .../fixCppRelocalizationInformation.patch     |  26 +-
 ...fixCppRelocalizationInformationModel.patch |  21 -
 ...pRelocalizationInformationParamModel.patch |  20 -
 EtsiServerGen/patches/fixCppTrackable.patch   | 397 ------------------
 .../patches/fixCppTrackableModel.patch        |  35 +-
 EtsiServerGen/patches/fixCppTrackables.patch  | 178 ++++++++
 .../patches/fixCppUuidAndModeModel.patch      |  18 +
 .../patches/fixCppWorldAnchorModel.patch      |  35 +-
 .../patches/fixCppWorldAnchors.patch          | 335 +++++++++++++--
 .../patches/fixCppWorldLinkModel.patch        |  22 +
 EtsiServerGen/patches/fixCppWorldLinks.patch  | 324 ++++++++++++--
 .../patches/fixCppWorldLinksModel.patch       |  24 --
 EtsiServerGen/patches/fixHelperHeader.patch   |  11 -
 .../patches/fixYAMLrestbedSchema.patch        |  36 --
 17 files changed, 912 insertions(+), 619 deletions(-)
 delete mode 100644 EtsiServerGen/patches/fixCppGetRelocResponse.patch
 delete mode 100644 EtsiServerGen/patches/fixCppRelocalizationInformationModel.patch
 delete mode 100644 EtsiServerGen/patches/fixCppRelocalizationInformationParamModel.patch
 delete mode 100644 EtsiServerGen/patches/fixCppTrackable.patch
 create mode 100644 EtsiServerGen/patches/fixCppTrackables.patch
 create mode 100644 EtsiServerGen/patches/fixCppUuidAndModeModel.patch
 create mode 100644 EtsiServerGen/patches/fixCppWorldLinkModel.patch
 delete mode 100644 EtsiServerGen/patches/fixCppWorldLinksModel.patch
 delete mode 100644 EtsiServerGen/patches/fixHelperHeader.patch
 delete mode 100644 EtsiServerGen/patches/fixYAMLrestbedSchema.patch

diff --git a/EtsiServerGen/patches/applyPatches.sh b/EtsiServerGen/patches/applyPatches.sh
index ae585fe..446a900 100755
--- a/EtsiServerGen/patches/applyPatches.sh
+++ b/EtsiServerGen/patches/applyPatches.sh
@@ -2,8 +2,11 @@
 patch -u ../api/DefaultApi.h -i fixHeaderModelIssue.patch
 patch -u ../api/DefaultApi.cpp -i fixCppModelIssue.patch
 patch -u ../api/RelocalizationInformationApi.cpp -i fixCppRelocalizationInformation.patch
-#patch -u ../api/WorldAnchorsApi.cpp -i fixCppWorldAnchors.patch
-#patch -u ../model/WorldAnchor.cpp -i fixCppWorldAnchorModel.patch
-#patch -u ../api/WorldLinksApi.cpp -i fixCppWorldLinks.patch
-#patch -u ../model/WorldLink.cpp -i fixCppWorldLinksModel.patch
-
+patch -u ../api/TrackablesApi.cpp -i fixCppTrackables.patch
+patch -u ../api/WorldAnchorsApi.cpp -i fixCppWorldAnchors.patch
+patch -u ../api/WorldLinksApi.cpp -i fixCppWorldLinks.patch
+patch -u ../model/Capability.cpp -i fixCppCapabilityModel.patch
+patch -u ../model/Trackable.cpp -i fixCppTrackableModel.patch
+patch -u ../model/UuidAndMode.cpp -i fixCppUuidAndModeModel.patch
+patch -u ../model/WorldAnchor.cpp -i fixCppWorldAnchorModel.patch
+patch -u ../model/WorldLink.cpp -i fixCppWorldLinkModel.patch
diff --git a/EtsiServerGen/patches/fixCppCapabilityModel.patch b/EtsiServerGen/patches/fixCppCapabilityModel.patch
index 35b5d4f..06531f0 100644
--- a/EtsiServerGen/patches/fixCppCapabilityModel.patch
+++ b/EtsiServerGen/patches/fixCppCapabilityModel.patch
@@ -1,20 +1,22 @@
-diff --git a/EtsiServerGen/model/Capability.cpp b/../../world-storage-cpp-server/EtsiServerGen/model/Capability.cpp
-index 8df709d..442bc9d 100644
---- a/EtsiServerGen/model/Capability.cpp
-+++ b/../../world-storage-cpp-server/EtsiServerGen/model/Capability.cpp
-@@ -63,6 +63,7 @@ ptree Capability::toPropertyTree() const
+--- Capability.cpp	2024-09-19 23:18:16.290090280 +0200
++++ Capability-corrected.cpp	2024-09-20 13:40:09.082949533 +0200
+@@ -63,7 +63,8 @@
  {
  	ptree pt;
  	ptree tmp_node;
-+    pt.put("trackableType", m_TrackableType.getEnumValue());
- 	pt.add_child("encodingInformation", m_EncodingInformation.toPropertyTree());
+-	pt.add_child("encodingInformation", m_EncodingInformation.toPropertyTree());
++	pt.put("trackableType", m_TrackableType.getEnumValue());
++    pt.add_child("encodingInformation", m_EncodingInformation.toPropertyTree());
  	pt.put("framerate", m_Framerate);
  	pt.put("latency", m_Latency);
-@@ -73,6 +74,7 @@ ptree Capability::toPropertyTree() const
+ 	pt.put("accuracy", m_Accuracy);
+@@ -73,7 +74,8 @@
  void Capability::fromPropertyTree(ptree const &pt)
  {
  	ptree tmp_node;
-+    m_TrackableType.setEnumValue(pt.get("trackableType",""));
- 	if (pt.get_child_optional("encodingInformation")) {
+-	if (pt.get_child_optional("encodingInformation")) {
++	m_TrackableType.setEnumValue(pt.get("trackableType",""));
++    if (pt.get_child_optional("encodingInformation")) {
          m_EncodingInformation = fromPt<EncodingInformationStructure>(pt.get_child("encodingInformation"));
  	}
+ 	m_Framerate = pt.get("framerate", 0.0);
diff --git a/EtsiServerGen/patches/fixCppGetRelocResponse.patch b/EtsiServerGen/patches/fixCppGetRelocResponse.patch
deleted file mode 100644
index 2c85329..0000000
--- a/EtsiServerGen/patches/fixCppGetRelocResponse.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/EtsiServerGen/model/GetRelocalizationInformation_200_response.cpp b/../../world-storage-cpp-server/EtsiServerGen/model/GetRelocalizationInformation_200_response.cpp
-index d6f90df..ce6079e 100644
---- a/EtsiServerGen/model/GetRelocalizationInformation_200_response.cpp
-+++ b/../../world-storage-cpp-server/EtsiServerGen/model/GetRelocalizationInformation_200_response.cpp
-@@ -47,6 +47,9 @@ std::string GetRelocalizationInformation_200_response::toJsonString(bool prettyJ
-     // workaround inspired by: https://stackoverflow.com/a/56395440
-     std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\"");
-     std::string result = std::regex_replace(ss.str(), reg, "$1");
-+
-+    result.erase(std::remove(result.begin(), result.end(), '|'), result.end());
-+
-     return result;
- }
- 
diff --git a/EtsiServerGen/patches/fixCppRelocalizationInformation.patch b/EtsiServerGen/patches/fixCppRelocalizationInformation.patch
index 2ad31df..0ab4692 100644
--- a/EtsiServerGen/patches/fixCppRelocalizationInformation.patch
+++ b/EtsiServerGen/patches/fixCppRelocalizationInformation.patch
@@ -1,17 +1,23 @@
---- RelocalizationInformationApi.cpp	2024-09-17 15:53:04.949160050 +0200
-+++ RelocalizationInformationApi_corrected.cpp	2024-09-17 15:44:29.639017895 +0200
-@@ -161,12 +161,12 @@
+--- RelocalizationInformationApi.cpp	2024-09-19 22:57:54.664539447 +0200
++++ RelocalizationInformationApi_corrected.cpp	2024-09-19 22:57:22.213975949 +0200
+@@ -157,16 +157,12 @@
+ {
+     const auto request = session->get_request();
+     // Getting the query params
+-    std::string uuids_raw = request->get_query_parameter("uuids");
++    std::multimap<std::string, std::string> uuids_raw = request->get_query_parameters("uuids");
      std::vector<UuidAndMode> uuids;
-     std::vector<std::string> uuids_temp;
-     boost::split(uuids_temp, uuids_raw, boost::is_any_of(","));
+-    std::vector<std::string> uuids_temp;
+-    boost::split(uuids_temp, uuids_raw, boost::is_any_of(","));
 -    std::transform(uuids_temp.begin(), uuids_temp.end(), std::back_inserter(uuids), [](const auto& i){ UuidAndMode ret; ret.fromString(i); return ret;});
-+    std::transform(uuids_temp.begin(), uuids_temp.end(), std::back_inserter(uuids), [](const auto& i){ UuidAndMode ret; ret.fromJsonString(i); return ret;});
-     std::string capabilities_raw = request->get_query_parameter("capabilities");
+-    std::string capabilities_raw = request->get_query_parameter("capabilities");
++    std::transform(uuids_raw.begin(), uuids_raw.end(), std::back_inserter(uuids), [](const auto& i){ UuidAndMode ret; ret.fromJsonString(i.second); return ret;});
++    std::multimap<std::string, std::string> capabilities_raw = request->get_query_parameters("capabilities");
      std::vector<Capability> capabilities;
-     std::vector<std::string> capabilities_temp;
-     boost::split(capabilities_temp, capabilities_raw, boost::is_any_of(","));
+-    std::vector<std::string> capabilities_temp;
+-    boost::split(capabilities_temp, capabilities_raw, boost::is_any_of(","));
 -    std::transform(capabilities_temp.begin(), capabilities_temp.end(), std::back_inserter(capabilities), [](const auto& i){ Capability ret; ret.fromString(i); return ret;});
-+    std::transform(capabilities_temp.begin(), capabilities_temp.end(), std::back_inserter(capabilities), [](const auto& i){ Capability ret; ret.fromJsonString(i); return ret;});
++    std::transform(capabilities_raw.begin(), capabilities_raw.end(), std::back_inserter(capabilities), [](const auto& i){ Capability ret; ret.fromJsonString(i.second); return ret;});
      // Getting the headers
      std::string token = request->get_header("token", "");
      
diff --git a/EtsiServerGen/patches/fixCppRelocalizationInformationModel.patch b/EtsiServerGen/patches/fixCppRelocalizationInformationModel.patch
deleted file mode 100644
index 4fe2132..0000000
--- a/EtsiServerGen/patches/fixCppRelocalizationInformationModel.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/EtsiServerGen/model/RelocalizationInformation.cpp b/../../world-storage-cpp-server/EtsiServerGen/model/RelocalizationInformation.cpp
-index 46fd7ec..8a020e9 100644
---- a/EtsiServerGen/model/RelocalizationInformation.cpp
-+++ b/../../world-storage-cpp-server/EtsiServerGen/model/RelocalizationInformation.cpp
-@@ -64,6 +64,7 @@ ptree RelocalizationInformation::toPropertyTree() const
- 	ptree pt;
- 	ptree tmp_node;
- 	pt.put("requestUUID", m_RequestUUID);
-+    pt.put("requestType", m_RequestType.getEnumValue());
- 	// generate tree for RelocObjects
-     tmp_node.clear();
- 	if (!m_RelocObjects.empty()) {
-@@ -78,6 +79,8 @@ void RelocalizationInformation::fromPropertyTree(ptree const &pt)
- {
- 	ptree tmp_node;
- 	m_RequestUUID = pt.get("requestUUID", "");
-+    m_RequestType.setEnumValue(pt.get("requestType",""));
-+
- 	// push all items of RelocObjects into member
- 	if (pt.get_child_optional("relocObjects")) {
-         m_RelocObjects = fromPt<std::vector<RelocalizationInformation_relocObjects_inner>>(pt.get_child("relocObjects"));
diff --git a/EtsiServerGen/patches/fixCppRelocalizationInformationParamModel.patch b/EtsiServerGen/patches/fixCppRelocalizationInformationParamModel.patch
deleted file mode 100644
index 37a5d72..0000000
--- a/EtsiServerGen/patches/fixCppRelocalizationInformationParamModel.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git a/EtsiServerGen/model/RelocalizationInformationParam.cpp b/../../world-storage-cpp-server/EtsiServerGen/model/RelocalizationInformationParam.cpp
-index 2890d6f..4c36c18 100644
---- a/EtsiServerGen/model/RelocalizationInformationParam.cpp
-+++ b/../../world-storage-cpp-server/EtsiServerGen/model/RelocalizationInformationParam.cpp
-@@ -63,6 +63,7 @@ ptree RelocalizationInformationParam::toPropertyTree() const
- {
- 	ptree pt;
- 	ptree tmp_node;
-+    pt.put("mode", m_Mode.getEnumValue());
- 	pt.put("uuid", m_Uuid);
- 	return pt;
- }
-@@ -70,6 +71,7 @@ ptree RelocalizationInformationParam::toPropertyTree() const
- void RelocalizationInformationParam::fromPropertyTree(ptree const &pt)
- {
- 	ptree tmp_node;
-+    m_Mode.setEnumValue(pt.get("mode",""));
- 	m_Uuid = pt.get("uuid", "");
- }
- 
diff --git a/EtsiServerGen/patches/fixCppTrackable.patch b/EtsiServerGen/patches/fixCppTrackable.patch
deleted file mode 100644
index ab291d7..0000000
--- a/EtsiServerGen/patches/fixCppTrackable.patch
+++ /dev/null
@@ -1,397 +0,0 @@
-diff --git a/EtsiServerGen/api/TrackablesApi.cpp b/../../world-storage-cpp-server/EtsiServerGen/api/TrackablesApi.cpp
-index 4360e8b..9075a53 100644
---- a/EtsiServerGen/api/TrackablesApi.cpp
-+++ b/../../world-storage-cpp-server/EtsiServerGen/api/TrackablesApi.cpp
-@@ -20,9 +20,12 @@
- #include <boost/property_tree/json_parser.hpp>
- #include <boost/lexical_cast.hpp>
- #include <boost/algorithm/string.hpp>
--
-+#include <iostream>
-+#include <stdlib.h> 
- #include "TrackablesApi.h"
- 
-+ 
-+
- namespace org {
- namespace openapitools {
- namespace server {
-@@ -80,6 +83,13 @@ MODEL_T extractJsonModelBodyParam(const std::string& bodyContent)
-     boost::property_tree::json_parser::read_json(sstream, pt);
- 
-     auto model = MODEL_T(pt);
-+
-+    if constexpr(std::is_same_v<MODEL_T, Trackable>) {
-+        auto unitStr = pt.get<std::string>("unit", ""); 
-+        UnitSystem unit; 
-+        unit.fromString(unitStr);// Convertir unitStr en UnitSystem
-+        model.setUnit(unit);
-+    }
-     return model;
- }
- 
-@@ -159,88 +169,102 @@ void TrackablesResource::defaultSessionClose(const std::shared_ptr<restbed::Sess
-     session->close(status, result, { {"Connection", "close"} });
- }
- 
-+void extractBodyContentAsync(
-+    const std::shared_ptr<restbed::Session>& session,
-+    int content_length,
-+    std::function<void(const std::string&)> callback)
-+{
-+    session->fetch(content_length,
-+        [callback](const std::shared_ptr<restbed::Session> session,
-+                   const restbed::Bytes &body) {
-+            std::string bodyContent = restbed::String::format(
-+                "%.*s\n", (int)body.size(), body.data());
-+            callback(bodyContent);
-+        });
-+}
-+
- void TrackablesResource::handler_POST_internal(const std::shared_ptr<restbed::Session> session)
- {
-     const auto request = session->get_request();
--    // body params or form params here from the body content string
--    std::string bodyContent = extractBodyContent(session);
--    auto trackable = extractJsonModelBodyParam<Trackable>(bodyContent);
--    // Getting the headers
--    std::string token = request->get_header("token", "");
--    
--    int status_code = 500;
--    std::string resultObject = "";
--    std::string result = "";
--    
--    try {
--        std::tie(status_code, resultObject) =
--            handler_POST(trackable, token);
--    }
--    catch(const TrackablesApiException& e) {
--        std::tie(status_code, result) = handleTrackablesApiException(e);
--    }
--    catch(const std::exception& e) {
--        std::tie(status_code, result) = handleStdException(e);
--    }
--    catch(...) {
--        std::tie(status_code, result) = handleUnspecifiedException();
--    }
--    
--    std::multimap< std::string, std::string > responseHeaders {};
--    static const std::vector<std::string> contentTypes{
--        "text/plain","application/json",
--    };
--    static const std::string acceptTypes{
--        "application/json, "
--    };
--    
--    if (status_code == 200) {
--        responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
--        if (!acceptTypes.empty()) {
--            responseHeaders.insert(std::make_pair("Accept", acceptTypes));
--        }
--    
--        result = resultObject;
--        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
--        return;
--    }
--    if (status_code == 201) {
--        responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
--        if (!acceptTypes.empty()) {
--            responseHeaders.insert(std::make_pair("Accept", acceptTypes));
--        }
--    
--        result = resultObject;
--        returnResponse(session, 201, result.empty() ? "{}" : result, responseHeaders);
--        return;
--    }
--    if (status_code == 400) {
--        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
--        result = "Bad request.";
--    
--        result = resultObject;
--        returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
--        return;
--    }
--    if (status_code == 409) {
--        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
--        result = "Invalid UUID, id must be a Nil value.";
--    
--        result = resultObject;
--        returnResponse(session, 409, result.empty() ? "{}" : result, responseHeaders);
--        return;
--    }
--    if (status_code == 0) {
--        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
--        result = "Unexpected error.";
--    
--        result = resultObject.toJsonString();
--        returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
--        return;
--    }
--    defaultSessionClose(session, status_code, result);
--    
--    
-+    int content_length = request->get_header("Content-Length", 0);
-+   extractBodyContentAsync(session, content_length, [this, session,request](const std::string& bodyContent) {
-+            
-+
-+            std::string token = request->get_header("token", "");
-+
-+            int status_code = 500;
-+            std::string resultObject = "";
-+            std::string result = "";
-+                            
-+             auto trackable = extractJsonModelBodyParam<Trackable>(bodyContent);
-+            
-+            try {
-+                std::tie(status_code, resultObject) =
-+                    handler_POST(trackable, token);
-+            }
-+            catch (const TrackablesApiException& e) {
-+                std::tie(status_code, result) = handleTrackablesApiException(e);
-+            }
-+            catch (const std::exception& e) {
-+                std::tie(status_code, result) = handleStdException(e);
-+            }
-+            catch (...) {
-+                std::tie(status_code, result) = handleUnspecifiedException();
-+            }
-+
-+            std::multimap< std::string, std::string > responseHeaders {};
-+            static const std::vector<std::string> contentTypes{
-+                "text/plain","application/json",
-+            };
-+            static const std::string acceptTypes{
-+                "application/json, "
-+            };
-+
-+            if (status_code == 200) {
-+                responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
-+                if (!acceptTypes.empty()) {
-+                    responseHeaders.insert(std::make_pair("Accept", acceptTypes));
-+                }
-+
-+                auto result = resultObject;
-+                returnResponse(session, 200, result, responseHeaders);
-+                return;
-+            }
-+            if (status_code == 201) {
-+                responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
-+                if (!acceptTypes.empty()) {
-+                    responseHeaders.insert(std::make_pair("Accept", acceptTypes));
-+                }
-+
-+                auto result = resultObject;
-+                returnResponse(session, 201, result, responseHeaders);
-+                return;
-+            }
-+            if (status_code == 400) {
-+                responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-+                result = "Bad request.";
-+
-+                auto result = resultObject;
-+                returnResponse(session, 400, result, responseHeaders);
-+                return;
-+            }
-+            if (status_code == 409) {
-+                responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-+                result = "Invalid UUID, id must be a Nil value.";
-+
-+                auto result = resultObject;
-+                returnResponse(session, 409, result, responseHeaders);
-+                return;
-+            }
-+            if (status_code == 0) {
-+                responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-+                result = "Unexpected error.";
-+
-+                returnResponse(session, 0, result, responseHeaders);
-+                return;
-+            }
-+            defaultSessionClose(session, status_code, result);
-+   });   
- }
- 
- // x-extension
-@@ -279,8 +303,16 @@ void TrackablesResource::handler_GET_internal(const std::shared_ptr<restbed::Ses
-         if (!acceptTypes.empty()) {
-             responseHeaders.insert(std::make_pair("Accept", acceptTypes));
-         }
--    
--        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
-+        std::string rep= "[\n";
-+        for (const Trackable& item : resultObject) {
-+            rep += item.toJsonString() + ",\n";
-+        }
-+       if (!resultObject.empty()) {
-+        rep = rep.substr(0, rep.size() - 2); 
-+       }
-+        rep += "\n]";
-+
-+        returnResponse(session, 200, rep, responseHeaders);
-         return;
-     }
-     if (status_code == 201) {
-@@ -288,17 +320,20 @@ void TrackablesResource::handler_GET_internal(const std::shared_ptr<restbed::Ses
-         if (!acceptTypes.empty()) {
-             responseHeaders.insert(std::make_pair("Accept", acceptTypes));
-         }
--    
--        result = resultObject;
--        returnResponse(session, 201, result.empty() ? "{}" : result, responseHeaders);
-+        std::string rep;
-+        for (const Trackable& item : resultObject) {
-+            rep += item.toJsonString() + ",\n";
-+        }
-+
-+        returnResponse(session, 201, rep, responseHeaders);
-         return;
-     }
-     if (status_code == 0) {
-         responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-         result = "Unexpected error.";
-     
--        result = resultObject.toJsonString();
--        returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
-+
-+        returnResponse(session, 0, result, responseHeaders);
-         return;
-     }
-     defaultSessionClose(session, status_code, result);
-@@ -308,8 +343,11 @@ void TrackablesResource::handler_GET_internal(const std::shared_ptr<restbed::Ses
- // x-extension
- void TrackablesResource::handler_PUT_internal(const std::shared_ptr<restbed::Session> session) {
-     const auto request = session->get_request();
-+    int content_length = request->get_header("Content-Length", 0);
-+
-     // body params or form params here from the body content string
--    std::string bodyContent = extractBodyContent(session);
-+   extractBodyContentAsync(session, content_length, [this, session,request](const std::string& bodyContent) {
-+    
-     auto trackable = extractJsonModelBodyParam<Trackable>(bodyContent);
-     // Getting the headers
-     std::string token = request->get_header("token", "");
-@@ -346,8 +384,8 @@ void TrackablesResource::handler_PUT_internal(const std::shared_ptr<restbed::Ses
-             responseHeaders.insert(std::make_pair("Accept", acceptTypes));
-         }
-     
--        result = resultObject;
--        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
-+        auto result = resultObject;
-+        returnResponse(session, 200, result, responseHeaders);
-         return;
-     }
-     if (status_code == 400) {
-@@ -362,21 +400,19 @@ void TrackablesResource::handler_PUT_internal(const std::shared_ptr<restbed::Ses
-         responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-         result = "Not found, could not find UUID in database.";
-     
--        result = resultObject;
--        returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders);
-+        auto result = resultObject;
-+        returnResponse(session, 404, result, responseHeaders);
-         return;
-     }
-     if (status_code == 0) {
-         responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-         result = "Unexpected error.";
-     
--        result = resultObject.toJsonString();
--        returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
-+        returnResponse(session, 0, result, responseHeaders);
-         return;
-     }
-     defaultSessionClose(session, status_code, result);
--    
--    
-+   });    
- }
- 
- std::pair<int, std::string> TrackablesResource::handler_POST(
-@@ -396,18 +432,24 @@ std::pair<int, std::string> TrackablesResource::handler_PUT(
-     return handler_PUT_func(trackable, token);
- }
- 
--std::string TrackablesResource::extractBodyContent(const std::shared_ptr<restbed::Session>& session) {
--  const auto request = session->get_request();
--  int content_length = request->get_header("Content-Length", 0);
--  std::string bodyContent;
--  session->fetch(content_length,
-+
-+
-+std::string TrackablesResource::extractBodyContent(
-+   const std::shared_ptr<restbed::Session>& session) {
-+   const auto request = session->get_request();
-+   int content_length = request->get_header("Content-Length", 0);
-+
-+   std::string bodyContent;
-+   session->fetch(content_length,
-                  [&bodyContent](const std::shared_ptr<restbed::Session> session,
-                                 const restbed::Bytes &body) {
-                    bodyContent = restbed::String::format(
-                        "%.*s\n", (int)body.size(), body.data());
-                  });
--  return bodyContent;
-+    return bodyContent;
- }
-+ 
-+
- 
- std::string TrackablesResource::extractFormParamsFromBody(const std::string& paramName, const std::string& body) {
-     const auto uri = restbed::Uri("urlencoded?" + body, true);
-@@ -499,24 +541,22 @@ void TrackablesTrackableUUIDResource::handler_DELETE_internal(const std::shared_
-             responseHeaders.insert(std::make_pair("Accept", acceptTypes));
-         }
-     
--        result = resultObject;
--        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
-+        auto result = resultObject;
-+        returnResponse(session, 200, result, responseHeaders);
-         return;
-     }
-     if (status_code == 400) {
-         responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-         result = "Invalid UUID supplied.";
-     
--        result = resultObject;
--        returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
-+        returnResponse(session, 400,result, responseHeaders);
-         return;
-     }
-     if (status_code == 404) {
-         responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-         result = "Not found, could not find UUID in database.";
-     
--        result = resultObject;
--        returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders);
-+        returnResponse(session, 404, result, responseHeaders);
-         return;
-     }
-     defaultSessionClose(session, status_code, result);
-@@ -564,23 +604,22 @@ void TrackablesTrackableUUIDResource::handler_GET_internal(const std::shared_ptr
-         }
-     
-         result = resultObject.toJsonString();
--        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
-+        returnResponse(session, 200,result, responseHeaders);
-         return;
-     }
-     if (status_code == 400) {
-         responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-         result = "Invalid UUID supplied.";
-     
--        result = resultObject;
--        returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
-+        auto result = resultObject;
-+        returnResponse(session, 400, "{}", responseHeaders);
-         return;
-     }
-     if (status_code == 404) {
-         responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
-         result = "Not found, could not find UUID in database.";
-     
--        result = resultObject;
--        returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders);
-+        returnResponse(session, 404, result, responseHeaders);
-         return;
-     }
-     defaultSessionClose(session, status_code, result);
diff --git a/EtsiServerGen/patches/fixCppTrackableModel.patch b/EtsiServerGen/patches/fixCppTrackableModel.patch
index def0e93..123c6b6 100644
--- a/EtsiServerGen/patches/fixCppTrackableModel.patch
+++ b/EtsiServerGen/patches/fixCppTrackableModel.patch
@@ -1,15 +1,25 @@
---- Trackable.cpp	2024-08-30 11:59:56.122059845 +0200
-+++ Trackable_corrected.cpp	2024-08-30 15:24:54.948427783 +0200
-@@ -48,6 +48,8 @@
+--- Trackable.cpp	2024-09-19 16:25:49.067872578 +0200
++++ Trackable_corrected.cpp	2024-09-19 16:18:02.183949340 +0200
+@@ -48,6 +48,7 @@
      // workaround inspired by: https://stackoverflow.com/a/56395440
      std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\"");
      std::string result = std::regex_replace(ss.str(), reg, "$1");
-+
 +    result.erase(std::remove(result.begin(), result.end(), '|'), result.end());
      return result;
  }
  
-@@ -85,8 +87,19 @@
+@@ -65,7 +66,10 @@
+ 	ptree tmp_node;
+ 	pt.put("UUID", m_UUID);
+ 	pt.put("name", m_Name);
++    pt.put("trackablePayload", "|" + m_TrackablePayload +  "|" );
+ 	pt.put("creatorUUID", m_CreatorUUID);
++    pt.put("trackableType", m_TrackableType.getEnumValue());
++    pt.put("unit", m_Unit.getEnumValue());
+ 	pt.add_child("trackableEncodingInformation", m_TrackableEncodingInformation.toPropertyTree());
+ 	// generate tree for LocalCRS
+     tmp_node.clear();
+@@ -83,8 +87,19 @@
  	}
  	// generate tree for KeyvalueTags
      if (!m_KeyvalueTags.empty()) {
@@ -27,16 +37,27 @@
 +            keyvalueTags.add_child(kv.first,tag_node);
 +           
 +        }
-+         pt.add_child("keyvalueTags", keyvalueTags);
++        pt.add_child("keyvalueTags", keyvalueTags);
      }
      tmp_node.clear();
  	pt.put("confidence", m_Confidence);
-@@ -115,6 +128,8 @@
+@@ -96,6 +111,9 @@
+ 	ptree tmp_node;
+ 	m_UUID = pt.get("UUID", "");
+ 	m_Name = pt.get("name", "");
++    m_TrackableType.setEnumValue(pt.get("trackableType",""));
++    m_Unit.setEnumValue(pt.get("unit",""));
++
+ 	m_CreatorUUID = pt.get("creatorUUID", "");
+ 	if (pt.get_child_optional("trackableEncodingInformation")) {
+         m_TrackableEncodingInformation = fromPt<EncodingInformationStructure>(pt.get_child("trackableEncodingInformation"));
+@@ -111,6 +129,9 @@
      if (pt.get_child_optional("keyvalueTags")) {
          m_KeyvalueTags = fromPt<std::map<std::string, std::vector<std::string>>>(pt.get_child("keyvalueTags"));
      }
 +    if (pt.get_child_optional("trackablePayload")) {
 +        m_TrackablePayload = fromPt<std::string>(pt.get_child("trackablePayload"));
++    }
  	m_Confidence = pt.get("confidence", 0.0);
  }
  
diff --git a/EtsiServerGen/patches/fixCppTrackables.patch b/EtsiServerGen/patches/fixCppTrackables.patch
new file mode 100644
index 0000000..0fbbb30
--- /dev/null
+++ b/EtsiServerGen/patches/fixCppTrackables.patch
@@ -0,0 +1,178 @@
+--- TrackablesApi.cpp	2024-09-19 14:26:36.877177137 +0200
++++ TrackablesApi_corrected.cpp	2024-09-19 14:27:58.857174515 +0200
+@@ -159,86 +159,100 @@
+     session->close(status, result, { {"Connection", "close"} });
+ }
+ 
++void extractBodyContentAsync(
++    const std::shared_ptr<restbed::Session>& session,
++    int content_length,
++    std::function<void(const std::string&)> callback)
++{
++    session->fetch(content_length,
++        [callback](const std::shared_ptr<restbed::Session> session,
++                   const restbed::Bytes &body) {
++            std::string bodyContent = restbed::String::format(
++                "%.*s\n", (int)body.size(), body.data());
++            callback(bodyContent);
++        });
++}
++
+ void TrackablesResource::handler_POST_internal(const std::shared_ptr<restbed::Session> session)
+ {
+     const auto request = session->get_request();
+-    // body params or form params here from the body content string
+-    std::string bodyContent = extractBodyContent(session);
+-    auto trackable = extractJsonModelBodyParam<Trackable>(bodyContent);
++
+     // Getting the headers
+-    std::string token = request->get_header("token", "");
+-    
+-    int status_code = 500;
+-    Success resultObject = Success{};
+-    std::string result = "";
+-    
+-    try {
+-        std::tie(status_code, resultObject) =
+-            handler_POST(trackable, token);
+-    }
+-    catch(const TrackablesApiException& e) {
+-        std::tie(status_code, result) = handleTrackablesApiException(e);
+-    }
+-    catch(const std::exception& e) {
+-        std::tie(status_code, result) = handleStdException(e);
+-    }
+-    catch(...) {
+-        std::tie(status_code, result) = handleUnspecifiedException();
+-    }
+-    
+-    std::multimap< std::string, std::string > responseHeaders {};
+-    static const std::vector<std::string> contentTypes{
+-        "application/json",
+-    };
+-    static const std::string acceptTypes{
+-        "application/json, "
+-    };
+-    
+-    if (status_code == 200) {
+-        responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
+-        if (!acceptTypes.empty()) {
+-            responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++    int content_length = request->get_header("Content-Length", 0);
++    extractBodyContentAsync(session, content_length, [this, session,request](const std::string& bodyContent) {
++        std::string token = request->get_header("token", "");
++    
++        int status_code = 500;
++        Success resultObject;
++        std::string result = "";
++    
++        auto trackable = extractJsonModelBodyParam<Trackable>(bodyContent);
++        try {
++            std::tie(status_code, resultObject) =
++                handler_POST(trackable, token);
+         }
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 400) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Bad request.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 409) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Invalid UUID, id must be a Nil value.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 409, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 511) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 0) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Unexpected error.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    defaultSessionClose(session, status_code, result);
+-    
+-    
++        catch(const TrackablesApiException& e) {
++            std::tie(status_code, result) = handleTrackablesApiException(e);
++        }
++        catch(const std::exception& e) {
++            std::tie(status_code, result) = handleStdException(e);
++        }
++        catch(...) {
++            std::tie(status_code, result) = handleUnspecifiedException();
++        }
++        
++        std::multimap< std::string, std::string > responseHeaders {};
++        static const std::vector<std::string> contentTypes{
++            "application/json",
++        };
++        static const std::string acceptTypes{
++            "application/json, "
++        };
++        
++        if (status_code == 200) {
++            responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
++            if (!acceptTypes.empty()) {
++                responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++            }
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 400) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Bad request.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 409) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Invalid UUID, id must be a Nil value.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 409, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 511) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 0) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Unexpected error.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        defaultSessionClose(session, status_code, result);
++    });       
+ }
+ 
+ // x-extension
diff --git a/EtsiServerGen/patches/fixCppUuidAndModeModel.patch b/EtsiServerGen/patches/fixCppUuidAndModeModel.patch
new file mode 100644
index 0000000..c577d0a
--- /dev/null
+++ b/EtsiServerGen/patches/fixCppUuidAndModeModel.patch
@@ -0,0 +1,18 @@
+--- UuidAndMode.cpp	2024-09-19 23:00:03.766677271 +0200
++++ UuidAndMode_corrected.cpp	2024-09-19 23:02:48.899142341 +0200
+@@ -64,6 +64,7 @@
+ 	ptree pt;
+ 	ptree tmp_node;
+ 	pt.put("uuid", m_Uuid);
++	pt.put("mode", m_Mode.getEnumValue());
+ 	return pt;
+ }
+ 
+@@ -71,6 +72,7 @@
+ {
+ 	ptree tmp_node;
+ 	m_Uuid = pt.get("uuid", "");
++	m_Mode.setEnumValue(pt.get("mode",""));
+ }
+ 
+ std::string UuidAndMode::getUuid() const
diff --git a/EtsiServerGen/patches/fixCppWorldAnchorModel.patch b/EtsiServerGen/patches/fixCppWorldAnchorModel.patch
index 325d8f9..81295f9 100644
--- a/EtsiServerGen/patches/fixCppWorldAnchorModel.patch
+++ b/EtsiServerGen/patches/fixCppWorldAnchorModel.patch
@@ -1,6 +1,22 @@
---- WorldAnchor.cpp	2024-08-30 16:07:36.273085120 +0200
-+++ WorldAnchor_corrected.cpp	2024-08-30 16:10:28.143238251 +0200
-@@ -83,8 +83,20 @@
+--- WorldAnchor.cpp	2024-09-19 16:26:22.388046412 +0200
++++ WorldAnchor_corrected.cpp	2024-09-19 16:35:37.881343480 +0200
+@@ -48,6 +48,7 @@
+     // workaround inspired by: https://stackoverflow.com/a/56395440
+     std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\"");
+     std::string result = std::regex_replace(ss.str(), reg, "$1");
++    result.erase(std::remove(result.begin(), result.end(), '|'), result.end());
+     return result;
+ }
+ 
+@@ -66,6 +67,7 @@
+ 	pt.put("UUID", m_UUID);
+ 	pt.put("name", m_Name);
+ 	pt.put("creatorUUID", m_CreatorUUID);
++    pt.put("unit", m_Unit.getEnumValue());
+ 	// generate tree for LocalCRS
+     tmp_node.clear();
+ 	if (!m_LocalCRS.empty()) {
+@@ -82,8 +84,17 @@
  	}
  	// generate tree for KeyvalueTags
      if (!m_KeyvalueTags.empty()) {
@@ -14,12 +30,17 @@
 +                value_node.put("", "|" + val + "|"); // Ensure value is treated as string
 +                tag_node.push_back(std::make_pair("", value_node));
 +            }
-+
-+            keyvalueTags.add_child(kv.first,tag_node);
-+           
++            keyvalueTags.add_child(kv.first,tag_node);       
 +        }
 +        pt.add_child("keyvalueTags", keyvalueTags);
-+
      }
      tmp_node.clear();
  	return pt;
+@@ -95,6 +106,7 @@
+ 	m_UUID = pt.get("UUID", "");
+ 	m_Name = pt.get("name", "");
+ 	m_CreatorUUID = pt.get("creatorUUID", "");
++    m_Unit.setEnumValue(pt.get("unit",""));
+ 	// push all items of LocalCRS into member
+ 	if (pt.get_child_optional("localCRS")) {
+         m_LocalCRS = fromPt<std::vector<float>>(pt.get_child("localCRS"));
diff --git a/EtsiServerGen/patches/fixCppWorldAnchors.patch b/EtsiServerGen/patches/fixCppWorldAnchors.patch
index c8962f0..f6af32e 100644
--- a/EtsiServerGen/patches/fixCppWorldAnchors.patch
+++ b/EtsiServerGen/patches/fixCppWorldAnchors.patch
@@ -1,14 +1,6 @@
---- WorldAnchorsApi.cpp	2024-08-30 11:59:56.242044753 +0200
-+++ WorldAnchorsApi_corrected.cpp	2024-08-30 15:32:20.829988554 +0200
-@@ -21,6 +21,7 @@
- #include <boost/lexical_cast.hpp>
- #include <boost/algorithm/string.hpp>
- 
-+#include <iostream>
- #include "WorldAnchorsApi.h"
- 
- namespace org {
-@@ -159,11 +160,26 @@
+--- WorldAnchorsApi.cpp	2024-09-19 14:34:27.853783839 +0200
++++ WorldAnchorsApi_corrected.cpp	2024-09-19 14:34:04.503291590 +0200
+@@ -159,85 +159,100 @@
      session->close(status, result, { {"Connection", "close"} });
  }
  
@@ -29,40 +21,317 @@
  void WorldAnchorsResource::handler_POST_internal(const std::shared_ptr<restbed::Session> session)
  {
      const auto request = session->get_request();
-+    int content_length = request->get_header("Content-Length", 0);
-     // body params or form params here from the body content string
+-    // body params or form params here from the body content string
 -    std::string bodyContent = extractBodyContent(session);
+-    auto worldAnchor = extractJsonModelBodyParam<WorldAnchor>(bodyContent);
+-    // Getting the headers
+-    std::string token = request->get_header("token", "");
+-    
+-    int status_code = 500;
+-    Success resultObject = Success{};
+-    std::string result = "";
+-    
+-    try {
+-        std::tie(status_code, resultObject) =
+-            handler_POST(worldAnchor, token);
+-    }
+-    catch(const WorldAnchorsApiException& e) {
+-        std::tie(status_code, result) = handleWorldAnchorsApiException(e);
+-    }
+-    catch(const std::exception& e) {
+-        std::tie(status_code, result) = handleStdException(e);
+-    }
+-    catch(...) {
+-        std::tie(status_code, result) = handleUnspecifiedException();
+-    }
+-    
+-    std::multimap< std::string, std::string > responseHeaders {};
+-    static const std::vector<std::string> contentTypes{
+-        "application/json",
+-    };
+-    static const std::string acceptTypes{
+-        "application/json, "
+-    };
+-    
+-    if (status_code == 200) {
+-        responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
+-        if (!acceptTypes.empty()) {
+-            responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++    int content_length = request->get_header("Content-Length", 0);
++
 +    extractBodyContentAsync(session, content_length, [this, session,request](const std::string& bodyContent) {
-     auto worldAnchor = extractJsonModelBodyParam<WorldAnchor>(bodyContent);
-     // Getting the headers
-     std::string token = request->get_header("token", "");
-@@ -239,7 +255,7 @@
-         return;
-     }
-     defaultSessionClose(session, status_code, result);
--    
-+    });
++        auto worldAnchor = extractJsonModelBodyParam<WorldAnchor>(bodyContent);
++        // Getting the headers
++        std::string token = request->get_header("token", "");
++        
++        int status_code = 500;
++        Success resultObject = Success{};
++        std::string result = "";
++        
++        try {
++            std::tie(status_code, resultObject) =
++                handler_POST(worldAnchor, token);
+         }
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 400) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Bad request.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 409) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Invalid UUID, id must be a Nil value.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 409, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 511) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 0) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Unexpected error.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    defaultSessionClose(session, status_code, result);
+-    
++        catch(const WorldAnchorsApiException& e) {
++            std::tie(status_code, result) = handleWorldAnchorsApiException(e);
++        }
++        catch(const std::exception& e) {
++            std::tie(status_code, result) = handleStdException(e);
++        }
++        catch(...) {
++            std::tie(status_code, result) = handleUnspecifiedException();
++        }
++        
++        std::multimap< std::string, std::string > responseHeaders {};
++        static const std::vector<std::string> contentTypes{
++            "application/json",
++        };
++        static const std::string acceptTypes{
++            "application/json, "
++        };
++        
++        if (status_code == 200) {
++            responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
++            if (!acceptTypes.empty()) {
++                responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++            }
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 400) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Bad request.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 409) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Invalid UUID, id must be a Nil value.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 409, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 511) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 0) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Unexpected error.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        defaultSessionClose(session, status_code, result);
++    });    
      
  }
  
-@@ -309,8 +325,9 @@
+@@ -313,82 +328,83 @@
  // x-extension
  void WorldAnchorsResource::handler_PUT_internal(const std::shared_ptr<restbed::Session> session) {
      const auto request = session->get_request();
-+    int content_length = request->get_header("Content-Length", 0);
-     // body params or form params here from the body content string
+-    // body params or form params here from the body content string
 -    std::string bodyContent = extractBodyContent(session);
+-    auto worldAnchor = extractJsonModelBodyParam<WorldAnchor>(bodyContent);
+-    // Getting the headers
+-    std::string token = request->get_header("token", "");
+-    
+-    int status_code = 500;
+-    Success resultObject = Success{};
+-    std::string result = "";
+-    
+-    try {
+-        std::tie(status_code, resultObject) =
+-            handler_PUT(worldAnchor, token);
+-    }
+-    catch(const WorldAnchorsApiException& e) {
+-        std::tie(status_code, result) = handleWorldAnchorsApiException(e);
+-    }
+-    catch(const std::exception& e) {
+-        std::tie(status_code, result) = handleStdException(e);
+-    }
+-    catch(...) {
+-        std::tie(status_code, result) = handleUnspecifiedException();
+-    }
+-    
+-    std::multimap< std::string, std::string > responseHeaders {};
+-    static const std::vector<std::string> contentTypes{
+-        "application/json",
+-    };
+-    static const std::string acceptTypes{
+-        "application/json, "
+-    };
+-    
+-    if (status_code == 200) {
+-        responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
+-        if (!acceptTypes.empty()) {
+-            responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++    int content_length = request->get_header("Content-Length", 0);
++
 +    extractBodyContentAsync(session, content_length, [this, session,request](const std::string& bodyContent) {
-     auto worldAnchor = extractJsonModelBodyParam<WorldAnchor>(bodyContent);
-     // Getting the headers
-     std::string token = request->get_header("token", "");
-@@ -386,8 +403,7 @@
-         return;
-     }
-     defaultSessionClose(session, status_code, result);
++        auto worldAnchor = extractJsonModelBodyParam<WorldAnchor>(bodyContent);
++        // Getting the headers
++        std::string token = request->get_header("token", "");
++        
++        int status_code = 500;
++        Success resultObject = Success{};
++        std::string result = "";
++        
++        try {
++            std::tie(status_code, resultObject) =
++                handler_PUT(worldAnchor, token);
+         }
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 400) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Bad request.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 404) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Not found, could not find UUID in database.";
 -    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 511) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
 -    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 0) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Unexpected error.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    defaultSessionClose(session, status_code, result);
+-    
++        catch(const WorldAnchorsApiException& e) {
++            std::tie(status_code, result) = handleWorldAnchorsApiException(e);
++        }
++        catch(const std::exception& e) {
++            std::tie(status_code, result) = handleStdException(e);
++        }
++        catch(...) {
++            std::tie(status_code, result) = handleUnspecifiedException();
++        }
++        
++        std::multimap< std::string, std::string > responseHeaders {};
++        static const std::vector<std::string> contentTypes{
++            "application/json",
++        };
++        static const std::string acceptTypes{
++            "application/json, "
++        };
++        
++        if (status_code == 200) {
++            responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
++            if (!acceptTypes.empty()) {
++                responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++            }
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 400) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Bad request.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 404) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Not found, could not find UUID in database.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 511) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 0) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Unexpected error.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        defaultSessionClose(session, status_code, result);
 +    });    
+     
  }
  
- std::pair<int, Error> WorldAnchorsResource::handler_POST(
diff --git a/EtsiServerGen/patches/fixCppWorldLinkModel.patch b/EtsiServerGen/patches/fixCppWorldLinkModel.patch
new file mode 100644
index 0000000..502c97b
--- /dev/null
+++ b/EtsiServerGen/patches/fixCppWorldLinkModel.patch
@@ -0,0 +1,22 @@
+--- WorldLink.cpp	2024-09-19 16:49:24.736599495 +0200
++++ WorldLink_corrected.cpp	2024-09-19 16:49:12.816378721 +0200
+@@ -67,6 +67,9 @@
+ 	pt.put("creatorUUID", m_CreatorUUID);
+ 	pt.put("UUIDFrom", m_UUIDFrom);
+ 	pt.put("UUIDTo", m_UUIDTo);
++    pt.put("typeFrom", m_TypeFrom.getEnumValue());
++    pt.put("typeTo", m_TypeTo.getEnumValue());
++    pt.put("unit", m_Unit.getEnumValue());
+ 	// generate tree for Transform
+     tmp_node.clear();
+ 	if (!m_Transform.empty()) {
+@@ -90,6 +93,9 @@
+ 	m_CreatorUUID = pt.get("creatorUUID", "");
+ 	m_UUIDFrom = pt.get("UUIDFrom", "");
+ 	m_UUIDTo = pt.get("UUIDTo", "");
++    m_TypeFrom.setEnumValue(pt.get("typeFrom",""));
++    m_TypeTo.setEnumValue(pt.get("typeTo",""));
++    m_Unit.setEnumValue(pt.get("unit",""));
+ 	// push all items of Transform into member
+ 	if (pt.get_child_optional("transform")) {
+         m_Transform = fromPt<std::vector<float>>(pt.get_child("transform"));
diff --git a/EtsiServerGen/patches/fixCppWorldLinks.patch b/EtsiServerGen/patches/fixCppWorldLinks.patch
index c74b396..63b2f1e 100644
--- a/EtsiServerGen/patches/fixCppWorldLinks.patch
+++ b/EtsiServerGen/patches/fixCppWorldLinks.patch
@@ -1,6 +1,6 @@
---- WorldLinksApi.cpp	2024-08-30 15:39:14.710928653 +0200
-+++ WorldLinksApi_corrected.cpp	2024-08-30 15:39:10.800920831 +0200
-@@ -159,11 +159,26 @@
+--- WorldLinksApi.cpp	2024-09-19 14:34:27.853783839 +0200
++++ WorldLinksApi_corrected.cpp	2024-09-19 14:31:59.140606768 +0200
+@@ -159,85 +159,100 @@
      session->close(status, result, { {"Connection", "close"} });
  }
  
@@ -21,41 +21,317 @@
  void WorldLinksResource::handler_POST_internal(const std::shared_ptr<restbed::Session> session)
  {
      const auto request = session->get_request();
-+    int content_length = request->get_header("Content-Length", 0);
-     // body params or form params here from the body content string
+-    // body params or form params here from the body content string
 -    std::string bodyContent = extractBodyContent(session);
+-    auto worldLink = extractJsonModelBodyParam<WorldLink>(bodyContent);
+-    // Getting the headers
+-    std::string token = request->get_header("token", "");
+-    
+-    int status_code = 500;
+-    Success resultObject = Success{};
+-    std::string result = "";
+-    
+-    try {
+-        std::tie(status_code, resultObject) =
+-            handler_POST(worldLink, token);
+-    }
+-    catch(const WorldLinksApiException& e) {
+-        std::tie(status_code, result) = handleWorldLinksApiException(e);
+-    }
+-    catch(const std::exception& e) {
+-        std::tie(status_code, result) = handleStdException(e);
+-    }
+-    catch(...) {
+-        std::tie(status_code, result) = handleUnspecifiedException();
+-    }
+-    
+-    std::multimap< std::string, std::string > responseHeaders {};
+-    static const std::vector<std::string> contentTypes{
+-        "application/json",
+-    };
+-    static const std::string acceptTypes{
+-        "application/json, "
+-    };
+-    
+-    if (status_code == 200) {
+-        responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
+-        if (!acceptTypes.empty()) {
+-            responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++    int content_length = request->get_header("Content-Length", 0);
++
 +    extractBodyContentAsync(session, content_length, [this, session,request](const std::string& bodyContent) {
-     auto worldLink = extractJsonModelBodyParam<WorldLink>(bodyContent);
-     // Getting the headers
-     std::string token = request->get_header("token", "");
-@@ -239,8 +254,7 @@
-         return;
-     }
-     defaultSessionClose(session, status_code, result);
++        auto worldLink = extractJsonModelBodyParam<WorldLink>(bodyContent);
++        // Getting the headers
++        std::string token = request->get_header("token", "");
++        
++        int status_code = 500;
++        Success resultObject = Success{};
++        std::string result = "";
++        
++        try {
++            std::tie(status_code, resultObject) =
++                handler_POST(worldLink, token);
+         }
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 400) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Bad request.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 409) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Invalid UUID, id must be a Nil value.";
 -    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 409, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 511) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
 -    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 0) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Unexpected error.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    defaultSessionClose(session, status_code, result);
+-    
++        catch(const WorldLinksApiException& e) {
++            std::tie(status_code, result) = handleWorldLinksApiException(e);
++        }
++        catch(const std::exception& e) {
++            std::tie(status_code, result) = handleStdException(e);
++        }
++        catch(...) {
++            std::tie(status_code, result) = handleUnspecifiedException();
++        }
++        
++        std::multimap< std::string, std::string > responseHeaders {};
++        static const std::vector<std::string> contentTypes{
++            "application/json",
++        };
++        static const std::string acceptTypes{
++            "application/json, "
++        };
++        
++        if (status_code == 200) {
++            responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
++            if (!acceptTypes.empty()) {
++                responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++            }
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 400) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Bad request.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 409) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Invalid UUID, id must be a Nil value.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 409, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 511) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 0) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Unexpected error.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        defaultSessionClose(session, status_code, result);
 +    });    
+     
  }
  
- // x-extension
-@@ -309,8 +323,9 @@
+@@ -313,82 +328,83 @@
  // x-extension
  void WorldLinksResource::handler_PUT_internal(const std::shared_ptr<restbed::Session> session) {
      const auto request = session->get_request();
-+    int content_length = request->get_header("Content-Length", 0);
-     // body params or form params here from the body content string
+-    // body params or form params here from the body content string
 -    std::string bodyContent = extractBodyContent(session);
+-    auto worldLink = extractJsonModelBodyParam<WorldLink>(bodyContent);
+-    // Getting the headers
+-    std::string token = request->get_header("token", "");
+-    
+-    int status_code = 500;
+-    Success resultObject = Success{};
+-    std::string result = "";
+-    
+-    try {
+-        std::tie(status_code, resultObject) =
+-            handler_PUT(worldLink, token);
+-    }
+-    catch(const WorldLinksApiException& e) {
+-        std::tie(status_code, result) = handleWorldLinksApiException(e);
+-    }
+-    catch(const std::exception& e) {
+-        std::tie(status_code, result) = handleStdException(e);
+-    }
+-    catch(...) {
+-        std::tie(status_code, result) = handleUnspecifiedException();
+-    }
+-    
+-    std::multimap< std::string, std::string > responseHeaders {};
+-    static const std::vector<std::string> contentTypes{
+-        "application/json",
+-    };
+-    static const std::string acceptTypes{
+-        "application/json, "
+-    };
+-    
+-    if (status_code == 200) {
+-        responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
+-        if (!acceptTypes.empty()) {
+-            responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++    int content_length = request->get_header("Content-Length", 0);
++
 +    extractBodyContentAsync(session, content_length, [this, session,request](const std::string& bodyContent) {
-     auto worldLink = extractJsonModelBodyParam<WorldLink>(bodyContent);
-     // Getting the headers
-     std::string token = request->get_header("token", "");
-@@ -386,8 +401,7 @@
-         return;
-     }
-     defaultSessionClose(session, status_code, result);
++        auto worldLink = extractJsonModelBodyParam<WorldLink>(bodyContent);
++        // Getting the headers
++        std::string token = request->get_header("token", "");
++        
++        int status_code = 500;
++        Success resultObject = Success{};
++        std::string result = "";
++        
++        try {
++            std::tie(status_code, resultObject) =
++                handler_PUT(worldLink, token);
+         }
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 400) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Bad request.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 404) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Not found, could not find UUID in database.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 511) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
+-    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    if (status_code == 0) {
+-        responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
+-        result = "Unexpected error.";
 -    
+-        result = resultObject.toJsonString();
+-        returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
+-        return;
+-    }
+-    defaultSessionClose(session, status_code, result);
 -    
++        catch(const WorldLinksApiException& e) {
++            std::tie(status_code, result) = handleWorldLinksApiException(e);
++        }
++        catch(const std::exception& e) {
++            std::tie(status_code, result) = handleStdException(e);
++        }
++        catch(...) {
++            std::tie(status_code, result) = handleUnspecifiedException();
++        }
++        
++        std::multimap< std::string, std::string > responseHeaders {};
++        static const std::vector<std::string> contentTypes{
++            "application/json",
++        };
++        static const std::string acceptTypes{
++            "application/json, "
++        };
++        
++        if (status_code == 200) {
++            responseHeaders.insert(std::make_pair("Content-Type", selectPreferredContentType(contentTypes)));
++            if (!acceptTypes.empty()) {
++                responseHeaders.insert(std::make_pair("Accept", acceptTypes));
++            }
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 400) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Bad request.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 404) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Not found, could not find UUID in database.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 511) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "The secret token is not valid. Please ask an ISG ARF team member for a valid token.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 511, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        if (status_code == 0) {
++            responseHeaders.insert(std::make_pair("Content-Type", "text/plain"));
++            result = "Unexpected error.";
++        
++            result = resultObject.toJsonString();
++            returnResponse(session, 0, result.empty() ? "{}" : result, responseHeaders);
++            return;
++        }
++        defaultSessionClose(session, status_code, result);
 +    });    
+     
  }
  
- std::pair<int, Error> WorldLinksResource::handler_POST(
diff --git a/EtsiServerGen/patches/fixCppWorldLinksModel.patch b/EtsiServerGen/patches/fixCppWorldLinksModel.patch
deleted file mode 100644
index f9d2599..0000000
--- a/EtsiServerGen/patches/fixCppWorldLinksModel.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- WorldLink.cpp	2024-08-30 15:49:02.321890614 +0200
-+++ WorldLink_corrected.cpp	2024-08-30 15:50:43.262030987 +0200
-@@ -79,8 +79,19 @@
- 	pt.put("unit", m_Unit);
- 	// generate tree for KeyvalueTags
-     if (!m_KeyvalueTags.empty()) {
--        tmp_node = toPt(m_KeyvalueTags);
--        pt.add_child("keyvalueTags", tmp_node);
-+        ptree keyvalueTags;
-+        for (const auto& kv : m_KeyvalueTags) {
-+            ptree tag_node;
-+            for (const auto& val : kv.second) {
-+                ptree value_node;
-+                value_node.put("", "|" + val + "|"); // Ensure value is treated as string
-+                tag_node.push_back(std::make_pair("", value_node));
-+            }
-+
-+            keyvalueTags.add_child(kv.first,tag_node);
-+           
-+        }
-+         pt.add_child("keyvalueTags", keyvalueTags);
-     }
-     tmp_node.clear();
- 	return pt;
diff --git a/EtsiServerGen/patches/fixHelperHeader.patch b/EtsiServerGen/patches/fixHelperHeader.patch
deleted file mode 100644
index 9cd269a..0000000
--- a/EtsiServerGen/patches/fixHelperHeader.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- ../../../../world-storage-cpp-server/EtsiServerGen/model/helpers.h	2024-04-15 17:47:05.562444771 +0200
-+++ ../model/helpers.h	2024-04-26 11:02:43.147098575 +0200
-@@ -15,7 +15,7 @@
- #define OPENAPI_MODELS_HELPER_H_
- 
- 
--
-+#include <boost/property_tree/ptree.hpp>
- #include <string>
- #include <map>
- #include <vector>
diff --git a/EtsiServerGen/patches/fixYAMLrestbedSchema.patch b/EtsiServerGen/patches/fixYAMLrestbedSchema.patch
deleted file mode 100644
index c39de9c..0000000
--- a/EtsiServerGen/patches/fixYAMLrestbedSchema.patch
+++ /dev/null
@@ -1,36 +0,0 @@
---- arf005/API/worldstorage/worldstorageopenapi.yaml	2024-04-26 15:38:19.205331526 +0200
-+++ arf005/API/worldstorage/worldstorageopenapiToPatch.yaml	2024-04-26 16:50:23.200217962 +0200
-@@ -100,16 +100,8 @@
-           required: true
-           schema:
-               type: array
--              uniqueItems: true
-               items:
--                type: object
--                properties:
--                  uuid:
--                    type: string
--                    format: uuid
--                    example: "fa8bbe40-8052-11ec-a8a3-0242ac120002"
--                  mode:
--                    $ref: '../common/commonopenapi.yaml#/components/schemas/Mode_WorldStorage'
-+                $ref: '#/components/schemas/relocalizationInformationParam'
- 
-         - in: query
-           name: capabilities
-@@ -650,6 +642,15 @@
-     # Reusable schemas (data models)
-     #-------------------------------
-       schemas:
-+        RelocalizationInformationParam:
-+            properties:
-+              uuid:
-+                type: string
-+                format: uuid
-+                example: "fa8bbe40-8052-11ec-a8a3-0242ac120002"
-+              mode:
-+                $ref: '../common/commonopenapi.yaml#/components/schemas/Mode_WorldStorage'
-+            
-         RelocalizationInformation:
-             description: An element representing all information needed in relation with a Trackable or a WorldAnchor.
-             type: object
-- 
GitLab