#ifndef OBJECTMETHODS_H #define OBJECTMETHODS_H #include #include #include "dbQuery.h" #include "isValidGeoJsonObject.h" #include "types.h" #include #include #include #include #include namespace ObjectMethods { // Set common response headers for CORS and content-type void setCommonHeaders(QHttpServerResponse &response) { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Content-Type", "application/json"); } // Handle errors and return a response with a specific status code QHttpServerResponse createErrorResponse(const QString &errorMessage, QHttpServerResponse::StatusCode statusCode) { QHttpServerResponse response(errorMessage, statusCode); setCommonHeaders(response); return response; } // Validate and insert GeoJSON feature into the database QHttpServerResponse handleGeoJSONFeature(const QJsonObject &jsonObj) { QString error; GeoJSONFeature geoJsonObj = geoJsonObj.fromJson(jsonObj); if (!isValidGeoJSONFeature(geoJsonObj.toJson(), error)) { return createErrorResponse(error, QHttpServerResponse::StatusCode::BadRequest); } insertGeoObjectToDb(geoJsonObj.toJson()); return QHttpServerResponse(QString(), QHttpServerResponse::StatusCode::Ok); } QHttpServerResponse postObjects(const QHttpServerRequest &request) { auto body = request.body(); QJsonDocument jsonRequest = QJsonDocument::fromJson(body); if (!jsonRequest.isObject() && !jsonRequest.isArray()) { return createErrorResponse("Invalid JSON", QHttpServerResponse::StatusCode::BadRequest); } // Handle single object or an array of objects if (jsonRequest.isObject()) { return handleGeoJSONFeature(jsonRequest.object()); } else if (jsonRequest.isArray()) { for (const QJsonValue &obj : jsonRequest.array()) { if (obj.isObject()) { QHttpServerResponse response = handleGeoJSONFeature(obj.toObject()); if (response.statusCode() == QHttpServerResponse::StatusCode::BadRequest) { return response; // Return error response immediately if one is found } } } } return QHttpServerResponse(QString(), QHttpServerResponse::StatusCode::Ok); } QHttpServerResponse getGeoObjectsInterval(const QHttpServerRequest &request) { if (!request.query().hasQueryItem("replayId") || !request.query().hasQueryItem("start") || !request.query().hasQueryItem("end")) { return createErrorResponse("Query param is missing", QHttpServerResponse::StatusCode::BadRequest); } QString replayId = request.query().queryItemValue("replayId"); QString start_timestamp = request.query().queryItemValue("start"); QString end_timestamp = request.query().queryItemValue("end"); QJsonArray array = getGeoObjectsIntervallFromDb(replayId, start_timestamp, end_timestamp); QHttpServerResponse response(array, QHttpServerResponse::StatusCode::Ok); setCommonHeaders(response); return response; } QHttpServerResponse getReplayInitInformation(const QHttpServerRequest &request) { if (!request.query().hasQueryItem("replayId")) { return createErrorResponse("replayId is missing", QHttpServerResponse::StatusCode::BadRequest); } QJsonObject obj = getReplayInitInformationsFromDb(request.query().queryItemValue("replayId")); QHttpServerResponse response(obj, QHttpServerResponse::StatusCode::Ok); setCommonHeaders(response); return response; } QHttpServerResponse postBookmark(const QHttpServerRequest &request) { auto body = request.body(); QJsonDocument jsonRequest = QJsonDocument::fromJson(body); QString error; if (jsonRequest["name"].isNull() || jsonRequest["timestamp"].isNull()) { error = "values are missing"; return createErrorResponse(error, QHttpServerResponse::StatusCode::BadRequest); } insertBookmark(jsonRequest.object()); QHttpServerResponse response(error, QHttpServerResponse::StatusCode::Ok); setCommonHeaders(response); return response; } QHttpServerResponse getBookmarks(const QHttpServerRequest &request) { if (!request.query().hasQueryItem("replayId")) { return createErrorResponse("replayId is missing", QHttpServerResponse::StatusCode::BadRequest); } QJsonArray array = getBookmarkFromDB(request.query().queryItemValue("replayId")); QHttpServerResponse response(array, QHttpServerResponse::StatusCode::Ok); setCommonHeaders(response); return response; } } // namespace ObjectMethods #endif // OBJECTMETHODS_H