All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cpp-qt5-qhttpengine-server.apirequest.cpp.mustache Maven / Gradle / Ivy

There is a newer version: 7.8.0
Show newest version
{{>licenseInfo}}
#include 
#include 
#include 
#include 
#include 

#include "{{prefix}}Helpers.h"
#include "{{classname}}Request.h"

{{#cppNamespaceDeclarations}}
namespace {{this}} {
{{/cppNamespaceDeclarations}}

{{classname}}Request::{{classname}}Request(QHttpEngine::Socket *s, {{classname}}Handler* hdl) : QObject(s), socket(s), handler(hdl) {
    auto headers = s->headers();
    for(auto itr = headers.begin(); itr != headers.end(); itr++) {
        requestHeaders.insert(QString(itr.key()), QString(itr.value()));
    }     
}

{{classname}}Request::~{{classname}}Request(){
    disconnect(this, nullptr, nullptr, nullptr);
    qDebug() << "{{classname}}Request::~{{classname}}Request()";
}

QMap 
{{classname}}Request::getRequestHeaders() const {
    return requestHeaders;
}

void {{classname}}Request::setResponseHeaders(const QMultiMap& headers){
    for(auto itr = headers.begin(); itr != headers.end(); ++itr) {
        responseHeaders.insert(itr.key(), itr.value());
    }
}


QHttpEngine::Socket* {{classname}}Request::getRawSocket(){
    return socket;
}

{{#operations}}{{#operation}}
void {{classname}}Request::{{nickname}}Request({{#hasPathParams}}{{#pathParams}}const QString& {{{paramName}}}str{{#hasMore}}, {{/hasMore}}{{/pathParams}}{{/hasPathParams}}){
    qDebug() << "{{{basePathWithoutHost}}}{{{path}}}";
    connect(this, &{{classname}}Request::{{nickname}}, handler, &{{classname}}Handler::{{nickname}});
    
    {{#queryParams}}{{queryParam}}
    {{{dataType}}} {{paramName}};   
    if(socket->queryString().keys().contains("{{paramName}}")){
        fromStringValue(socket->queryString().value{{#isListContainer}}s{{/isListContainer}}("{{paramName}}"), {{paramName}});
    }
    {{queryParam}}{{/queryParams}}
    {{#pathParams}}
    {{{dataType}}} {{paramName}};
    fromStringValue({{paramName}}str, {{paramName}});
    {{/pathParams}}{{#headerParams}}
    {{{dataType}}} {{paramName}};
    if(socket->headers().keys().contains("{{paramName}}")){
        fromStringValue(socket->queryString().value("{{paramName}}"), {{paramName}});
    }
    {{/headerParams}}{{#formParams}}
    {{{dataType}}} {{paramName}};{{/formParams}}{{#bodyParams}} {{#bodyParam}}
    {{#isListContainer}}
    QJsonDocument doc;
    {{{dataType}}} {{paramName}};     
    if(socket->readJson(doc)){
        QJsonArray jsonArray = doc.array();
        foreach(QJsonValue obj, jsonArray) {
            {{items.baseType}} o;
            ::{{cppNamespace}}::fromJsonValue(o, obj);
            {{paramName}}.append(o);
        }
    }
    {{/isListContainer}}
    {{^isListContainer}}
    {{^isMapContainer}}
    {{#isPrimitiveType}}
    {{{dataType}}} {{paramName}};
    ::{{cppNamespace}}::fromStringValue((QString(socket->readAll()), {{paramName}});
    {{/isPrimitiveType}}
    {{/isMapContainer}}
    {{#isMapContainer}}
    QJsonDocument doc;
    socket->readJson(doc);
    QJsonObject obj = doc.object();
    {{{dataType}}} {{paramName}};   
    foreach(QString key, obj.keys()) {
        {{baseType}} val;
        ::{{cppNamespace}}::fromJsonValue(val, obj[key]);
        {{paramName}}.insert(key, val);
    }
    {{/isMapContainer}}
    {{^isMapContainer}}
    {{^isPrimitiveType}}
    QJsonDocument doc;
    socket->readJson(doc);
    QJsonObject obj = doc.object();
    {{{dataType}}} {{paramName}};
    ::{{cppNamespace}}::fromJsonValue({{paramName}}, obj);
    {{/isPrimitiveType}}
    {{/isMapContainer}}
    {{/isListContainer}}        
    {{/bodyParam}}{{/bodyParams}}

    emit {{nickname}}({{#allParams}}{{#isBodyParam}}{{/isBodyParam}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
}

{{/operation}}{{/operations}}  

{{#operations}}{{#operation}}void {{classname}}Request::{{nickname}}Response({{#returnType}}const {{{returnType}}}& res{{/returnType}}){
    writeResponseHeaders();{{#returnType}}{{^isPrimitiveType}}
    QJsonDocument resDoc(::{{cppNamespace}}::toJsonValue(res).to{{^isListContainer}}Object{{/isListContainer}}{{#isListContainer}}Array{{/isListContainer}}());{{/isPrimitiveType}}
    socket->writeJson(resDoc);{{#isPrimitiveType}}
    socket->write({{#isListContainer}}QString("["+{{/isListContainer}}::{{cppNamespace}}::toStringValue(res){{#isListContainer}}+"]"){{/isListContainer}}.toUtf8());{{/isPrimitiveType}}{{/returnType}}{{^returnType}}    
    socket->setStatusCode(QHttpEngine::Socket::OK);{{/returnType}}
    if(socket->isOpen()){
        socket->close();
    }
}

{{/operation}}{{/operations}}
{{#operations}}{{#operation}}void {{classname}}Request::{{nickname}}Error({{#returnType}}const {{{returnType}}}& res, {{/returnType}}QNetworkReply::NetworkError error_type, QString& error_str){
    Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors
    writeResponseHeaders();{{#returnType}}
    Q_UNUSED(error_str);  // response will be used instead of error string{{^isPrimitiveType}}
    QJsonDocument resDoc(::{{cppNamespace}}::toJsonValue(res).to{{^isListContainer}}Object{{/isListContainer}}{{#isListContainer}}Array{{/isListContainer}}());{{/isPrimitiveType}}
    socket->writeJson(resDoc);{{#isPrimitiveType}}
    socket->write({{#isListContainer}}QString("["+{{/isListContainer}}::{{cppNamespace}}::toStringValue(res){{#isListContainer}}+"]"){{/isListContainer}}.toUtf8());{{/isPrimitiveType}}{{/returnType}}{{^returnType}}    
    socket->setStatusCode(QHttpEngine::Socket::NotFound);
    socket->write(error_str.toUtf8());{{/returnType}}
    if(socket->isOpen()){
        socket->close();
    }
}

{{/operation}}{{/operations}}
void {{classname}}Request::sendCustomResponse(QByteArray & res, QNetworkReply::NetworkError error_type){
    Q_UNUSED(res);  // TODO
    Q_UNUSED(error_type); // TODO
}
    
void {{classname}}Request::sendCustomResponse(QIODevice *res, QNetworkReply::NetworkError error_type){
    Q_UNUSED(res);  // TODO
    Q_UNUSED(error_type); // TODO
}

{{#cppNamespaceDeclarations}}
}
{{/cppNamespaceDeclarations}}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy