[C++] [Qt5 Server] server allow api handler override of generated code (#2308)

* Allow overriding the default API handler to use a derived class from generated code
* Allow overriding the default api handler
This commit is contained in:
sunn 2019-03-16 17:36:50 +01:00 committed by GitHub
parent e5a0d18374
commit f41f50c3e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 98 additions and 75 deletions

View File

@ -12,7 +12,7 @@
namespace {{this}} { namespace {{this}} {
{{/cppNamespaceDeclarations}} {{/cppNamespaceDeclarations}}
{{classname}}Request::{{classname}}Request(QHttpEngine::Socket *s, {{classname}}Handler* hdl) : QObject(s), socket(s), handler(hdl) { {{classname}}Request::{{classname}}Request(QHttpEngine::Socket *s, QSharedPointer<{{classname}}Handler> hdl) : QObject(s), socket(s), handler(hdl) {
auto headers = s->headers(); auto headers = s->headers();
for(auto itr = headers.begin(); itr != headers.end(); itr++) { for(auto itr = headers.begin(); itr != headers.end(); itr++) {
requestHeaders.insert(QString(itr.key()), QString(itr.value())); requestHeaders.insert(QString(itr.key()), QString(itr.value()));
@ -43,7 +43,7 @@ QHttpEngine::Socket* {{classname}}Request::getRawSocket(){
{{#operations}}{{#operation}} {{#operations}}{{#operation}}
void {{classname}}Request::{{nickname}}Request({{#hasPathParams}}{{#pathParams}}const QString& {{{paramName}}}str{{#hasMore}}, {{/hasMore}}{{/pathParams}}{{/hasPathParams}}){ void {{classname}}Request::{{nickname}}Request({{#hasPathParams}}{{#pathParams}}const QString& {{{paramName}}}str{{#hasMore}}, {{/hasMore}}{{/pathParams}}{{/hasPathParams}}){
qDebug() << "{{{basePathWithoutHost}}}{{{path}}}"; qDebug() << "{{{basePathWithoutHost}}}{{{path}}}";
connect(this, &{{classname}}Request::{{nickname}}, handler, &{{classname}}Handler::{{nickname}}); connect(this, &{{classname}}Request::{{nickname}}, handler.data(), &{{classname}}Handler::{{nickname}});
{{#queryParams}}{{queryParam}} {{#queryParams}}{{queryParam}}
{{{dataType}}} {{paramName}}; {{{dataType}}} {{paramName}};

View File

@ -22,7 +22,7 @@ class {{classname}}Request : public QObject
Q_OBJECT Q_OBJECT
public: public:
{{classname}}Request(QHttpEngine::Socket *s, {{classname}}Handler* handler); {{classname}}Request(QHttpEngine::Socket *s, QSharedPointer<{{classname}}Handler> handler);
virtual ~{{classname}}Request(); virtual ~{{classname}}Request();
{{#operations}}{{#operation}}void {{nickname}}Request({{#hasPathParams}}{{#pathParams}}const QString& {{{paramName}}}{{#hasMore}}, {{/hasMore}}{{/pathParams}}{{/hasPathParams}}); {{#operations}}{{#operation}}void {{nickname}}Request({{#hasPathParams}}{{#pathParams}}const QString& {{{paramName}}}{{#hasMore}}, {{/hasMore}}{{/pathParams}}{{/hasPathParams}});
@ -52,7 +52,7 @@ private:
QMap<QString, QString> requestHeaders; QMap<QString, QString> requestHeaders;
QMap<QString, QString> responseHeaders; QMap<QString, QString> responseHeaders;
QHttpEngine::Socket *socket; QHttpEngine::Socket *socket;
{{classname}}Handler *handler; QSharedPointer<{{classname}}Handler> handler;
inline void writeResponseHeaders(){ inline void writeResponseHeaders(){
QHttpEngine::Socket::HeaderMap resHeaders; QHttpEngine::Socket::HeaderMap resHeaders;

View File

@ -18,18 +18,22 @@ namespace {{this}} {
} }
{{prefix}}ApiRouter::~{{prefix}}ApiRouter(){ {{prefix}}ApiRouter::~{{prefix}}ApiRouter(){
{{#apiInfo}}{{#apis}}
delete {{classname}}ApiHandler;{{/apis}}{{/apiInfo}}
} }
void {{prefix}}ApiRouter::createApiHandlers() { {{#apiInfo}}{{#apis}} void {{prefix}}ApiRouter::createApiHandlers() { {{#apiInfo}}{{#apis}}
{{classname}}ApiHandler = new {{classname}}Handler();{{/apis}}{{/apiInfo}} m{{classname}}Handler = QSharedPointer<{{classname}}Handler>::create();{{/apis}}{{/apiInfo}}
} }
{{#apiInfo}}{{#apis}}
void {{prefix}}ApiRouter::set{{classname}}Handler(QSharedPointer<{{classname}}Handler> handler){
m{{classname}}Handler = handler;
}{{/apis}}{{/apiInfo}}
void {{prefix}}ApiRouter::setUpRoutes() { void {{prefix}}ApiRouter::setUpRoutes() {
{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}{{^hasPathParams}} {{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}{{^hasPathParams}}
Routes.insert(QString("%1 %2").arg("{{httpMethod}}").arg("{{{basePathWithoutHost}}}{{{path}}}").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("{{httpMethod}}").arg("{{{basePathWithoutHost}}}{{{path}}}").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new {{classname}}Request(socket, {{classname}}ApiHandler); auto reqObj = new {{classname}}Request(socket, m{{classname}}Handler);
reqObj->{{nickname}}Request(); reqObj->{{nickname}}Request();
});{{/hasPathParams}}{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} });{{/hasPathParams}}{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}}
} }
@ -67,7 +71,7 @@ bool {{prefix}}ApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *
{{#pathParams}} {{#pathParams}}
QString {{baseName}} = match.captured(QString("{{baseName}}").toLower()); QString {{baseName}} = match.captured(QString("{{baseName}}").toLower());
{{/pathParams}} {{/pathParams}}
auto reqObj = new {{classname}}Request(socket, {{classname}}ApiHandler); auto reqObj = new {{classname}}Request(socket, m{{classname}}Handler);
reqObj->{{nickname}}Request({{#pathParams}}{{baseName}}{{#hasMore}}, {{/hasMore}}{{/pathParams}}); reqObj->{{nickname}}Request({{#pathParams}}{{baseName}}{{#hasMore}}, {{/hasMore}}{{/pathParams}});
return true; return true;
} }

View File

@ -43,6 +43,8 @@ public:
void setUpRoutes(); void setUpRoutes();
void processRequest(QHttpEngine::Socket *socket); void processRequest(QHttpEngine::Socket *socket);
{{#apiInfo}}{{#apis}}
void set{{classname}}Handler(QSharedPointer<{{classname}}Handler> handler);{{/apis}}{{/apiInfo}}
private: private:
QMap<QString, std::function<void(QHttpEngine::Socket *)>> Routes; QMap<QString, std::function<void(QHttpEngine::Socket *)>> Routes;
QMultiMap<QString, std::function<void(QHttpEngine::Socket *)>> RoutesWithPathParam; QMultiMap<QString, std::function<void(QHttpEngine::Socket *)>> RoutesWithPathParam;
@ -51,7 +53,7 @@ private:
bool handleRequestAndExtractPathParam(QHttpEngine::Socket *socket); bool handleRequestAndExtractPathParam(QHttpEngine::Socket *socket);
{{#apiInfo}}{{#apis}} {{#apiInfo}}{{#apis}}
{{classname}}Handler *{{classname}}ApiHandler;{{/apis}}{{/apiInfo}} QSharedPointer<{{classname}}Handler> m{{classname}}Handler;{{/apis}}{{/apiInfo}}
protected: protected:
// override this method to provide custom class derived from ApiHandler classes // override this method to provide custom class derived from ApiHandler classes
virtual void createApiHandlers(); virtual void createApiHandlers();

View File

@ -71,10 +71,10 @@ int main(int argc, char * argv[])
quint16 port = static_cast<quint16>(parser.value(portOption).toInt()); quint16 port = static_cast<quint16>(parser.value(portOption).toInt());
QSharedPointer<{{cppNamespace}}::{{prefix}}ApiRequestHandler> handler(new {{cppNamespace}}::{{prefix}}ApiRequestHandler()); QSharedPointer<{{cppNamespace}}::{{prefix}}ApiRequestHandler> handler(new {{cppNamespace}}::{{prefix}}ApiRequestHandler());
{{cppNamespace}}::{{prefix}}ApiRouter router; auto router = QSharedPointer<{{cppNamespace}}::{{prefix}}ApiRouter>::create();
router.setUpRoutes(); router->setUpRoutes();
QObject::connect(handler.data(), &{{cppNamespace}}::{{prefix}}ApiRequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) { QObject::connect(handler.data(), &{{cppNamespace}}::{{prefix}}ApiRequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) {
router.processRequest(socket); router->processRequest(socket);
}); });
QHttpEngine::Server server(handler.data()); QHttpEngine::Server server(handler.data());

View File

@ -29,62 +29,70 @@ OAIApiRouter::OAIApiRouter() {
} }
OAIApiRouter::~OAIApiRouter(){ OAIApiRouter::~OAIApiRouter(){
delete OAIPetApiApiHandler;
delete OAIStoreApiApiHandler;
delete OAIUserApiApiHandler;
} }
void OAIApiRouter::createApiHandlers() { void OAIApiRouter::createApiHandlers() {
OAIPetApiApiHandler = new OAIPetApiHandler(); mOAIPetApiHandler = QSharedPointer<OAIPetApiHandler>::create();
OAIStoreApiApiHandler = new OAIStoreApiHandler(); mOAIStoreApiHandler = QSharedPointer<OAIStoreApiHandler>::create();
OAIUserApiApiHandler = new OAIUserApiHandler(); mOAIUserApiHandler = QSharedPointer<OAIUserApiHandler>::create();
}
void OAIApiRouter::setOAIPetApiHandler(QSharedPointer<OAIPetApiHandler> handler){
mOAIPetApiHandler = handler;
}
void OAIApiRouter::setOAIStoreApiHandler(QSharedPointer<OAIStoreApiHandler> handler){
mOAIStoreApiHandler = handler;
}
void OAIApiRouter::setOAIUserApiHandler(QSharedPointer<OAIUserApiHandler> handler){
mOAIUserApiHandler = handler;
} }
void OAIApiRouter::setUpRoutes() { void OAIApiRouter::setUpRoutes() {
Routes.insert(QString("%1 %2").arg("POST").arg("/v2/pet").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("POST").arg("/v2/pet").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); auto reqObj = new OAIPetApiRequest(socket, mOAIPetApiHandler);
reqObj->addPetRequest(); reqObj->addPetRequest();
}); });
Routes.insert(QString("%1 %2").arg("GET").arg("/v2/pet/findByStatus").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("GET").arg("/v2/pet/findByStatus").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); auto reqObj = new OAIPetApiRequest(socket, mOAIPetApiHandler);
reqObj->findPetsByStatusRequest(); reqObj->findPetsByStatusRequest();
}); });
Routes.insert(QString("%1 %2").arg("GET").arg("/v2/pet/findByTags").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("GET").arg("/v2/pet/findByTags").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); auto reqObj = new OAIPetApiRequest(socket, mOAIPetApiHandler);
reqObj->findPetsByTagsRequest(); reqObj->findPetsByTagsRequest();
}); });
Routes.insert(QString("%1 %2").arg("PUT").arg("/v2/pet").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("PUT").arg("/v2/pet").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); auto reqObj = new OAIPetApiRequest(socket, mOAIPetApiHandler);
reqObj->updatePetRequest(); reqObj->updatePetRequest();
}); });
Routes.insert(QString("%1 %2").arg("GET").arg("/v2/store/inventory").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("GET").arg("/v2/store/inventory").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); auto reqObj = new OAIStoreApiRequest(socket, mOAIStoreApiHandler);
reqObj->getInventoryRequest(); reqObj->getInventoryRequest();
}); });
Routes.insert(QString("%1 %2").arg("POST").arg("/v2/store/order").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("POST").arg("/v2/store/order").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); auto reqObj = new OAIStoreApiRequest(socket, mOAIStoreApiHandler);
reqObj->placeOrderRequest(); reqObj->placeOrderRequest();
}); });
Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); auto reqObj = new OAIUserApiRequest(socket, mOAIUserApiHandler);
reqObj->createUserRequest(); reqObj->createUserRequest();
}); });
Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user/createWithArray").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user/createWithArray").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); auto reqObj = new OAIUserApiRequest(socket, mOAIUserApiHandler);
reqObj->createUsersWithArrayInputRequest(); reqObj->createUsersWithArrayInputRequest();
}); });
Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user/createWithList").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user/createWithList").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); auto reqObj = new OAIUserApiRequest(socket, mOAIUserApiHandler);
reqObj->createUsersWithListInputRequest(); reqObj->createUsersWithListInputRequest();
}); });
Routes.insert(QString("%1 %2").arg("GET").arg("/v2/user/login").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("GET").arg("/v2/user/login").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); auto reqObj = new OAIUserApiRequest(socket, mOAIUserApiHandler);
reqObj->loginUserRequest(); reqObj->loginUserRequest();
}); });
Routes.insert(QString("%1 %2").arg("GET").arg("/v2/user/logout").toLower(), [this](QHttpEngine::Socket *socket) { Routes.insert(QString("%1 %2").arg("GET").arg("/v2/user/logout").toLower(), [this](QHttpEngine::Socket *socket) {
auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); auto reqObj = new OAIUserApiRequest(socket, mOAIUserApiHandler);
reqObj->logoutUserRequest(); reqObj->logoutUserRequest();
}); });
} }
@ -120,7 +128,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString petId = match.captured(QString("petId").toLower()); QString petId = match.captured(QString("petId").toLower());
auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); auto reqObj = new OAIPetApiRequest(socket, mOAIPetApiHandler);
reqObj->deletePetRequest(petId); reqObj->deletePetRequest(petId);
return true; return true;
} }
@ -132,7 +140,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString petId = match.captured(QString("petId").toLower()); QString petId = match.captured(QString("petId").toLower());
auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); auto reqObj = new OAIPetApiRequest(socket, mOAIPetApiHandler);
reqObj->getPetByIdRequest(petId); reqObj->getPetByIdRequest(petId);
return true; return true;
} }
@ -144,7 +152,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString petId = match.captured(QString("petId").toLower()); QString petId = match.captured(QString("petId").toLower());
auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); auto reqObj = new OAIPetApiRequest(socket, mOAIPetApiHandler);
reqObj->updatePetWithFormRequest(petId); reqObj->updatePetWithFormRequest(petId);
return true; return true;
} }
@ -156,7 +164,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString petId = match.captured(QString("petId").toLower()); QString petId = match.captured(QString("petId").toLower());
auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); auto reqObj = new OAIPetApiRequest(socket, mOAIPetApiHandler);
reqObj->uploadFileRequest(petId); reqObj->uploadFileRequest(petId);
return true; return true;
} }
@ -168,7 +176,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString orderId = match.captured(QString("orderId").toLower()); QString orderId = match.captured(QString("orderId").toLower());
auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); auto reqObj = new OAIStoreApiRequest(socket, mOAIStoreApiHandler);
reqObj->deleteOrderRequest(orderId); reqObj->deleteOrderRequest(orderId);
return true; return true;
} }
@ -180,7 +188,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString orderId = match.captured(QString("orderId").toLower()); QString orderId = match.captured(QString("orderId").toLower());
auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); auto reqObj = new OAIStoreApiRequest(socket, mOAIStoreApiHandler);
reqObj->getOrderByIdRequest(orderId); reqObj->getOrderByIdRequest(orderId);
return true; return true;
} }
@ -192,7 +200,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString username = match.captured(QString("username").toLower()); QString username = match.captured(QString("username").toLower());
auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); auto reqObj = new OAIUserApiRequest(socket, mOAIUserApiHandler);
reqObj->deleteUserRequest(username); reqObj->deleteUserRequest(username);
return true; return true;
} }
@ -204,7 +212,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString username = match.captured(QString("username").toLower()); QString username = match.captured(QString("username").toLower());
auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); auto reqObj = new OAIUserApiRequest(socket, mOAIUserApiHandler);
reqObj->getUserByNameRequest(username); reqObj->getUserByNameRequest(username);
return true; return true;
} }
@ -216,7 +224,7 @@ bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket)
QRegularExpressionMatch match = getRequestMatch( completePath, reqPath ); QRegularExpressionMatch match = getRequestMatch( completePath, reqPath );
if ( match.hasMatch() ){ if ( match.hasMatch() ){
QString username = match.captured(QString("username").toLower()); QString username = match.captured(QString("username").toLower());
auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); auto reqObj = new OAIUserApiRequest(socket, mOAIUserApiHandler);
reqObj->updateUserRequest(username); reqObj->updateUserRequest(username);
return true; return true;
} }

View File

@ -54,6 +54,10 @@ public:
void setUpRoutes(); void setUpRoutes();
void processRequest(QHttpEngine::Socket *socket); void processRequest(QHttpEngine::Socket *socket);
void setOAIPetApiHandler(QSharedPointer<OAIPetApiHandler> handler);
void setOAIStoreApiHandler(QSharedPointer<OAIStoreApiHandler> handler);
void setOAIUserApiHandler(QSharedPointer<OAIUserApiHandler> handler);
private: private:
QMap<QString, std::function<void(QHttpEngine::Socket *)>> Routes; QMap<QString, std::function<void(QHttpEngine::Socket *)>> Routes;
QMultiMap<QString, std::function<void(QHttpEngine::Socket *)>> RoutesWithPathParam; QMultiMap<QString, std::function<void(QHttpEngine::Socket *)>> RoutesWithPathParam;
@ -62,9 +66,9 @@ private:
bool handleRequestAndExtractPathParam(QHttpEngine::Socket *socket); bool handleRequestAndExtractPathParam(QHttpEngine::Socket *socket);
OAIPetApiHandler *OAIPetApiApiHandler; QSharedPointer<OAIPetApiHandler> mOAIPetApiHandler;
OAIStoreApiHandler *OAIStoreApiApiHandler; QSharedPointer<OAIStoreApiHandler> mOAIStoreApiHandler;
OAIUserApiHandler *OAIUserApiApiHandler; QSharedPointer<OAIUserApiHandler> mOAIUserApiHandler;
protected: protected:
// override this method to provide custom class derived from ApiHandler classes // override this method to provide custom class derived from ApiHandler classes
virtual void createApiHandlers(); virtual void createApiHandlers();

View File

@ -82,10 +82,10 @@ int main(int argc, char * argv[])
quint16 port = static_cast<quint16>(parser.value(portOption).toInt()); quint16 port = static_cast<quint16>(parser.value(portOption).toInt());
QSharedPointer<OpenAPI::OAIApiRequestHandler> handler(new OpenAPI::OAIApiRequestHandler()); QSharedPointer<OpenAPI::OAIApiRequestHandler> handler(new OpenAPI::OAIApiRequestHandler());
OpenAPI::OAIApiRouter router; auto router = QSharedPointer<OpenAPI::OAIApiRouter>::create();
router.setUpRoutes(); router->setUpRoutes();
QObject::connect(handler.data(), &OpenAPI::OAIApiRequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) { QObject::connect(handler.data(), &OpenAPI::OAIApiRequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) {
router.processRequest(socket); router->processRequest(socket);
}); });
QHttpEngine::Server server(handler.data()); QHttpEngine::Server server(handler.data());

View File

@ -21,7 +21,7 @@
namespace OpenAPI { namespace OpenAPI {
OAIPetApiRequest::OAIPetApiRequest(QHttpEngine::Socket *s, OAIPetApiHandler* hdl) : QObject(s), socket(s), handler(hdl) { OAIPetApiRequest::OAIPetApiRequest(QHttpEngine::Socket *s, QSharedPointer<OAIPetApiHandler> hdl) : QObject(s), socket(s), handler(hdl) {
auto headers = s->headers(); auto headers = s->headers();
for(auto itr = headers.begin(); itr != headers.end(); itr++) { for(auto itr = headers.begin(); itr != headers.end(); itr++) {
requestHeaders.insert(QString(itr.key()), QString(itr.value())); requestHeaders.insert(QString(itr.key()), QString(itr.value()));
@ -52,10 +52,11 @@ QHttpEngine::Socket* OAIPetApiRequest::getRawSocket(){
void OAIPetApiRequest::addPetRequest(){ void OAIPetApiRequest::addPetRequest(){
qDebug() << "/v2/pet"; qDebug() << "/v2/pet";
connect(this, &OAIPetApiRequest::addPet, handler, &OAIPetApiHandler::addPet); connect(this, &OAIPetApiRequest::addPet, handler.data(), &OAIPetApiHandler::addPet);
QJsonDocument doc; QJsonDocument doc;
socket->readJson(doc); socket->readJson(doc);
QJsonObject obj = doc.object(); QJsonObject obj = doc.object();
@ -69,7 +70,7 @@ void OAIPetApiRequest::addPetRequest(){
void OAIPetApiRequest::deletePetRequest(const QString& pet_idstr){ void OAIPetApiRequest::deletePetRequest(const QString& pet_idstr){
qDebug() << "/v2/pet/{petId}"; qDebug() << "/v2/pet/{petId}";
connect(this, &OAIPetApiRequest::deletePet, handler, &OAIPetApiHandler::deletePet); connect(this, &OAIPetApiRequest::deletePet, handler.data(), &OAIPetApiHandler::deletePet);
qint64 pet_id; qint64 pet_id;
@ -87,7 +88,7 @@ void OAIPetApiRequest::deletePetRequest(const QString& pet_idstr){
void OAIPetApiRequest::findPetsByStatusRequest(){ void OAIPetApiRequest::findPetsByStatusRequest(){
qDebug() << "/v2/pet/findByStatus"; qDebug() << "/v2/pet/findByStatus";
connect(this, &OAIPetApiRequest::findPetsByStatus, handler, &OAIPetApiHandler::findPetsByStatus); connect(this, &OAIPetApiRequest::findPetsByStatus, handler.data(), &OAIPetApiHandler::findPetsByStatus);
QList<QString> status; QList<QString> status;
@ -103,7 +104,7 @@ void OAIPetApiRequest::findPetsByStatusRequest(){
void OAIPetApiRequest::findPetsByTagsRequest(){ void OAIPetApiRequest::findPetsByTagsRequest(){
qDebug() << "/v2/pet/findByTags"; qDebug() << "/v2/pet/findByTags";
connect(this, &OAIPetApiRequest::findPetsByTags, handler, &OAIPetApiHandler::findPetsByTags); connect(this, &OAIPetApiRequest::findPetsByTags, handler.data(), &OAIPetApiHandler::findPetsByTags);
QList<QString> tags; QList<QString> tags;
@ -119,7 +120,7 @@ void OAIPetApiRequest::findPetsByTagsRequest(){
void OAIPetApiRequest::getPetByIdRequest(const QString& pet_idstr){ void OAIPetApiRequest::getPetByIdRequest(const QString& pet_idstr){
qDebug() << "/v2/pet/{petId}"; qDebug() << "/v2/pet/{petId}";
connect(this, &OAIPetApiRequest::getPetById, handler, &OAIPetApiHandler::getPetById); connect(this, &OAIPetApiRequest::getPetById, handler.data(), &OAIPetApiHandler::getPetById);
qint64 pet_id; qint64 pet_id;
@ -132,10 +133,11 @@ void OAIPetApiRequest::getPetByIdRequest(const QString& pet_idstr){
void OAIPetApiRequest::updatePetRequest(){ void OAIPetApiRequest::updatePetRequest(){
qDebug() << "/v2/pet"; qDebug() << "/v2/pet";
connect(this, &OAIPetApiRequest::updatePet, handler, &OAIPetApiHandler::updatePet); connect(this, &OAIPetApiRequest::updatePet, handler.data(), &OAIPetApiHandler::updatePet);
QJsonDocument doc; QJsonDocument doc;
socket->readJson(doc); socket->readJson(doc);
QJsonObject obj = doc.object(); QJsonObject obj = doc.object();
@ -149,7 +151,7 @@ void OAIPetApiRequest::updatePetRequest(){
void OAIPetApiRequest::updatePetWithFormRequest(const QString& pet_idstr){ void OAIPetApiRequest::updatePetWithFormRequest(const QString& pet_idstr){
qDebug() << "/v2/pet/{petId}"; qDebug() << "/v2/pet/{petId}";
connect(this, &OAIPetApiRequest::updatePetWithForm, handler, &OAIPetApiHandler::updatePetWithForm); connect(this, &OAIPetApiRequest::updatePetWithForm, handler.data(), &OAIPetApiHandler::updatePetWithForm);
qint64 pet_id; qint64 pet_id;
@ -164,7 +166,7 @@ void OAIPetApiRequest::updatePetWithFormRequest(const QString& pet_idstr){
void OAIPetApiRequest::uploadFileRequest(const QString& pet_idstr){ void OAIPetApiRequest::uploadFileRequest(const QString& pet_idstr){
qDebug() << "/v2/pet/{petId}/uploadImage"; qDebug() << "/v2/pet/{petId}/uploadImage";
connect(this, &OAIPetApiRequest::uploadFile, handler, &OAIPetApiHandler::uploadFile); connect(this, &OAIPetApiRequest::uploadFile, handler.data(), &OAIPetApiHandler::uploadFile);
qint64 pet_id; qint64 pet_id;

View File

@ -33,7 +33,7 @@ class OAIPetApiRequest : public QObject
Q_OBJECT Q_OBJECT
public: public:
OAIPetApiRequest(QHttpEngine::Socket *s, OAIPetApiHandler* handler); OAIPetApiRequest(QHttpEngine::Socket *s, QSharedPointer<OAIPetApiHandler> handler);
virtual ~OAIPetApiRequest(); virtual ~OAIPetApiRequest();
void addPetRequest(); void addPetRequest();
@ -91,7 +91,7 @@ private:
QMap<QString, QString> requestHeaders; QMap<QString, QString> requestHeaders;
QMap<QString, QString> responseHeaders; QMap<QString, QString> responseHeaders;
QHttpEngine::Socket *socket; QHttpEngine::Socket *socket;
OAIPetApiHandler *handler; QSharedPointer<OAIPetApiHandler> handler;
inline void writeResponseHeaders(){ inline void writeResponseHeaders(){
QHttpEngine::Socket::HeaderMap resHeaders; QHttpEngine::Socket::HeaderMap resHeaders;

View File

@ -21,7 +21,7 @@
namespace OpenAPI { namespace OpenAPI {
OAIStoreApiRequest::OAIStoreApiRequest(QHttpEngine::Socket *s, OAIStoreApiHandler* hdl) : QObject(s), socket(s), handler(hdl) { OAIStoreApiRequest::OAIStoreApiRequest(QHttpEngine::Socket *s, QSharedPointer<OAIStoreApiHandler> hdl) : QObject(s), socket(s), handler(hdl) {
auto headers = s->headers(); auto headers = s->headers();
for(auto itr = headers.begin(); itr != headers.end(); itr++) { for(auto itr = headers.begin(); itr != headers.end(); itr++) {
requestHeaders.insert(QString(itr.key()), QString(itr.value())); requestHeaders.insert(QString(itr.key()), QString(itr.value()));
@ -52,7 +52,7 @@ QHttpEngine::Socket* OAIStoreApiRequest::getRawSocket(){
void OAIStoreApiRequest::deleteOrderRequest(const QString& order_idstr){ void OAIStoreApiRequest::deleteOrderRequest(const QString& order_idstr){
qDebug() << "/v2/store/order/{orderId}"; qDebug() << "/v2/store/order/{orderId}";
connect(this, &OAIStoreApiRequest::deleteOrder, handler, &OAIStoreApiHandler::deleteOrder); connect(this, &OAIStoreApiRequest::deleteOrder, handler.data(), &OAIStoreApiHandler::deleteOrder);
QString order_id; QString order_id;
@ -65,7 +65,7 @@ void OAIStoreApiRequest::deleteOrderRequest(const QString& order_idstr){
void OAIStoreApiRequest::getInventoryRequest(){ void OAIStoreApiRequest::getInventoryRequest(){
qDebug() << "/v2/store/inventory"; qDebug() << "/v2/store/inventory";
connect(this, &OAIStoreApiRequest::getInventory, handler, &OAIStoreApiHandler::getInventory); connect(this, &OAIStoreApiRequest::getInventory, handler.data(), &OAIStoreApiHandler::getInventory);
@ -76,7 +76,7 @@ void OAIStoreApiRequest::getInventoryRequest(){
void OAIStoreApiRequest::getOrderByIdRequest(const QString& order_idstr){ void OAIStoreApiRequest::getOrderByIdRequest(const QString& order_idstr){
qDebug() << "/v2/store/order/{orderId}"; qDebug() << "/v2/store/order/{orderId}";
connect(this, &OAIStoreApiRequest::getOrderById, handler, &OAIStoreApiHandler::getOrderById); connect(this, &OAIStoreApiRequest::getOrderById, handler.data(), &OAIStoreApiHandler::getOrderById);
qint64 order_id; qint64 order_id;
@ -89,10 +89,11 @@ void OAIStoreApiRequest::getOrderByIdRequest(const QString& order_idstr){
void OAIStoreApiRequest::placeOrderRequest(){ void OAIStoreApiRequest::placeOrderRequest(){
qDebug() << "/v2/store/order"; qDebug() << "/v2/store/order";
connect(this, &OAIStoreApiRequest::placeOrder, handler, &OAIStoreApiHandler::placeOrder); connect(this, &OAIStoreApiRequest::placeOrder, handler.data(), &OAIStoreApiHandler::placeOrder);
QJsonDocument doc; QJsonDocument doc;
socket->readJson(doc); socket->readJson(doc);
QJsonObject obj = doc.object(); QJsonObject obj = doc.object();

View File

@ -32,7 +32,7 @@ class OAIStoreApiRequest : public QObject
Q_OBJECT Q_OBJECT
public: public:
OAIStoreApiRequest(QHttpEngine::Socket *s, OAIStoreApiHandler* handler); OAIStoreApiRequest(QHttpEngine::Socket *s, QSharedPointer<OAIStoreApiHandler> handler);
virtual ~OAIStoreApiRequest(); virtual ~OAIStoreApiRequest();
void deleteOrderRequest(const QString& order_id); void deleteOrderRequest(const QString& order_id);
@ -74,7 +74,7 @@ private:
QMap<QString, QString> requestHeaders; QMap<QString, QString> requestHeaders;
QMap<QString, QString> responseHeaders; QMap<QString, QString> responseHeaders;
QHttpEngine::Socket *socket; QHttpEngine::Socket *socket;
OAIStoreApiHandler *handler; QSharedPointer<OAIStoreApiHandler> handler;
inline void writeResponseHeaders(){ inline void writeResponseHeaders(){
QHttpEngine::Socket::HeaderMap resHeaders; QHttpEngine::Socket::HeaderMap resHeaders;

View File

@ -21,7 +21,7 @@
namespace OpenAPI { namespace OpenAPI {
OAIUserApiRequest::OAIUserApiRequest(QHttpEngine::Socket *s, OAIUserApiHandler* hdl) : QObject(s), socket(s), handler(hdl) { OAIUserApiRequest::OAIUserApiRequest(QHttpEngine::Socket *s, QSharedPointer<OAIUserApiHandler> hdl) : QObject(s), socket(s), handler(hdl) {
auto headers = s->headers(); auto headers = s->headers();
for(auto itr = headers.begin(); itr != headers.end(); itr++) { for(auto itr = headers.begin(); itr != headers.end(); itr++) {
requestHeaders.insert(QString(itr.key()), QString(itr.value())); requestHeaders.insert(QString(itr.key()), QString(itr.value()));
@ -52,10 +52,11 @@ QHttpEngine::Socket* OAIUserApiRequest::getRawSocket(){
void OAIUserApiRequest::createUserRequest(){ void OAIUserApiRequest::createUserRequest(){
qDebug() << "/v2/user"; qDebug() << "/v2/user";
connect(this, &OAIUserApiRequest::createUser, handler, &OAIUserApiHandler::createUser); connect(this, &OAIUserApiRequest::createUser, handler.data(), &OAIUserApiHandler::createUser);
QJsonDocument doc; QJsonDocument doc;
socket->readJson(doc); socket->readJson(doc);
QJsonObject obj = doc.object(); QJsonObject obj = doc.object();
@ -69,7 +70,7 @@ void OAIUserApiRequest::createUserRequest(){
void OAIUserApiRequest::createUsersWithArrayInputRequest(){ void OAIUserApiRequest::createUsersWithArrayInputRequest(){
qDebug() << "/v2/user/createWithArray"; qDebug() << "/v2/user/createWithArray";
connect(this, &OAIUserApiRequest::createUsersWithArrayInput, handler, &OAIUserApiHandler::createUsersWithArrayInput); connect(this, &OAIUserApiRequest::createUsersWithArrayInput, handler.data(), &OAIUserApiHandler::createUsersWithArrayInput);
@ -91,7 +92,7 @@ void OAIUserApiRequest::createUsersWithArrayInputRequest(){
void OAIUserApiRequest::createUsersWithListInputRequest(){ void OAIUserApiRequest::createUsersWithListInputRequest(){
qDebug() << "/v2/user/createWithList"; qDebug() << "/v2/user/createWithList";
connect(this, &OAIUserApiRequest::createUsersWithListInput, handler, &OAIUserApiHandler::createUsersWithListInput); connect(this, &OAIUserApiRequest::createUsersWithListInput, handler.data(), &OAIUserApiHandler::createUsersWithListInput);
@ -113,7 +114,7 @@ void OAIUserApiRequest::createUsersWithListInputRequest(){
void OAIUserApiRequest::deleteUserRequest(const QString& usernamestr){ void OAIUserApiRequest::deleteUserRequest(const QString& usernamestr){
qDebug() << "/v2/user/{username}"; qDebug() << "/v2/user/{username}";
connect(this, &OAIUserApiRequest::deleteUser, handler, &OAIUserApiHandler::deleteUser); connect(this, &OAIUserApiRequest::deleteUser, handler.data(), &OAIUserApiHandler::deleteUser);
QString username; QString username;
@ -126,7 +127,7 @@ void OAIUserApiRequest::deleteUserRequest(const QString& usernamestr){
void OAIUserApiRequest::getUserByNameRequest(const QString& usernamestr){ void OAIUserApiRequest::getUserByNameRequest(const QString& usernamestr){
qDebug() << "/v2/user/{username}"; qDebug() << "/v2/user/{username}";
connect(this, &OAIUserApiRequest::getUserByName, handler, &OAIUserApiHandler::getUserByName); connect(this, &OAIUserApiRequest::getUserByName, handler.data(), &OAIUserApiHandler::getUserByName);
QString username; QString username;
@ -139,7 +140,7 @@ void OAIUserApiRequest::getUserByNameRequest(const QString& usernamestr){
void OAIUserApiRequest::loginUserRequest(){ void OAIUserApiRequest::loginUserRequest(){
qDebug() << "/v2/user/login"; qDebug() << "/v2/user/login";
connect(this, &OAIUserApiRequest::loginUser, handler, &OAIUserApiHandler::loginUser); connect(this, &OAIUserApiRequest::loginUser, handler.data(), &OAIUserApiHandler::loginUser);
QString username; QString username;
@ -160,7 +161,7 @@ void OAIUserApiRequest::loginUserRequest(){
void OAIUserApiRequest::logoutUserRequest(){ void OAIUserApiRequest::logoutUserRequest(){
qDebug() << "/v2/user/logout"; qDebug() << "/v2/user/logout";
connect(this, &OAIUserApiRequest::logoutUser, handler, &OAIUserApiHandler::logoutUser); connect(this, &OAIUserApiRequest::logoutUser, handler.data(), &OAIUserApiHandler::logoutUser);
@ -171,12 +172,13 @@ void OAIUserApiRequest::logoutUserRequest(){
void OAIUserApiRequest::updateUserRequest(const QString& usernamestr){ void OAIUserApiRequest::updateUserRequest(const QString& usernamestr){
qDebug() << "/v2/user/{username}"; qDebug() << "/v2/user/{username}";
connect(this, &OAIUserApiRequest::updateUser, handler, &OAIUserApiHandler::updateUser); connect(this, &OAIUserApiRequest::updateUser, handler.data(), &OAIUserApiHandler::updateUser);
QString username; QString username;
fromStringValue(usernamestr, username); fromStringValue(usernamestr, username);
QJsonDocument doc; QJsonDocument doc;
socket->readJson(doc); socket->readJson(doc);
QJsonObject obj = doc.object(); QJsonObject obj = doc.object();

View File

@ -32,7 +32,7 @@ class OAIUserApiRequest : public QObject
Q_OBJECT Q_OBJECT
public: public:
OAIUserApiRequest(QHttpEngine::Socket *s, OAIUserApiHandler* handler); OAIUserApiRequest(QHttpEngine::Socket *s, QSharedPointer<OAIUserApiHandler> handler);
virtual ~OAIUserApiRequest(); virtual ~OAIUserApiRequest();
void createUserRequest(); void createUserRequest();
@ -90,7 +90,7 @@ private:
QMap<QString, QString> requestHeaders; QMap<QString, QString> requestHeaders;
QMap<QString, QString> responseHeaders; QMap<QString, QString> responseHeaders;
QHttpEngine::Socket *socket; QHttpEngine::Socket *socket;
OAIUserApiHandler *handler; QSharedPointer<OAIUserApiHandler> handler;
inline void writeResponseHeaders(){ inline void writeResponseHeaders(){
QHttpEngine::Socket::HeaderMap resHeaders; QHttpEngine::Socket::HeaderMap resHeaders;