Lukas Woodtli d2e60f59b3
Cpp restbed server improvements (#13030)
* Keep old implementation of cpp-restbed generator as cpp-restbed-server-deprecated

* Refactor operation path processing

* Restructure samples directory to better allow writing tests

* Improve templates for cpp-restbed-server

Improve templates

* Add integration tests

* Improvement in templates for cpp-restbed-server

* Fix tests

* Improve cpp-restbed generator

* Improve cpp-restbed-server

* Add more tests

* Add suppoert for arrays of enums in query params

* Generate CMakeLists.txt

* Small improvements and example in Readme

* Add integration tests to maven project

* Update doc
2022-08-27 18:10:28 +08:00

251 lines
7.5 KiB
C++

/**
* OpenAPI Petstore
* This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.
*
* The version of the OpenAPI document: 1.0.0
*
*
* NOTE: This class is auto generated by OpenAPI-Generator unset.
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
* StoreApi.h
*
*
*/
#ifndef StoreApi_H_
#define StoreApi_H_
#include <memory>
#include <utility>
#include <exception>
#include <corvusoft/restbed/session.hpp>
#include <corvusoft/restbed/resource.hpp>
#include <corvusoft/restbed/request.hpp>
#include <corvusoft/restbed/service.hpp>
#include <corvusoft/restbed/settings.hpp>
#include "Order.h"
#include <map>
#include <string>
namespace org {
namespace openapitools {
namespace server {
namespace api {
using namespace org::openapitools::server::model;
///
/// Exception to flag problems in the handlers
///
class StoreApiException: public std::exception
{
public:
StoreApiException(int status_code, std::string what);
int getStatus() const;
const char* what() const noexcept override;
private:
int m_status;
std::string m_what;
};
/// <summary>
/// Delete purchase order by ID
/// </summary>
/// <remarks>
/// For valid response try integer IDs with value &lt; 1000. Anything above 1000 or nonintegers will generate API errors
/// </remarks>
class StoreApiStoreOrderOrderIdResource: public restbed::Resource
{
public:
StoreApiStoreOrderOrderIdResource(const std::string& context = "/v2");
virtual ~StoreApiStoreOrderOrderIdResource();
protected:
//////////////////////////////////////////////////////////
// Override these to implement the server functionality //
//////////////////////////////////////////////////////////
virtual int handler_DELETE(
std::string const & orderId);
virtual std::pair<int, std::shared_ptr<Order>> handler_GET(
int64_t const & orderId);
protected:
//////////////////////////////////////
// Override these for customization //
//////////////////////////////////////
virtual std::string extractBodyContent(const std::shared_ptr<restbed::Session>& session);
virtual std::string getPathParam_orderId(const std::shared_ptr<const restbed::Request>& request)
{
return request->get_path_parameter("orderId", "");
}
virtual int64_t getPathParam_orderId_x_extension(const std::shared_ptr<const restbed::Request>& request)
{
return request->get_path_parameter("orderId", 0L);
}
virtual std::pair<int, std::string> handleStoreApiException(const StoreApiException& e);
virtual std::pair<int, std::string> handleStdException(const std::exception& e);
virtual std::pair<int, std::string> handleUnspecifiedException();
virtual void setResponseHeader(const std::shared_ptr<restbed::Session>& session,
const std::string& header);
virtual void returnResponse(const std::shared_ptr<restbed::Session>& session,
const int status, const std::string& result, const std::string& contentType);
virtual void defaultSessionClose(const std::shared_ptr<restbed::Session>& session,
const int status, const std::string& result);
private:
void handler_DELETE_internal(const std::shared_ptr<restbed::Session> session);
void handler_GET_internal(const std::shared_ptr<restbed::Session> session);
};
/// <summary>
/// Returns pet inventories by status
/// </summary>
/// <remarks>
/// Returns a map of status codes to quantities
/// </remarks>
class StoreApiStoreInventoryResource: public restbed::Resource
{
public:
StoreApiStoreInventoryResource(const std::string& context = "/v2");
virtual ~StoreApiStoreInventoryResource();
protected:
//////////////////////////////////////////////////////////
// Override these to implement the server functionality //
//////////////////////////////////////////////////////////
virtual std::pair<int, std::map<std::string, int32_t>> handler_GET(
);
protected:
//////////////////////////////////////
// Override these for customization //
//////////////////////////////////////
virtual std::string extractBodyContent(const std::shared_ptr<restbed::Session>& session);
virtual std::pair<int, std::string> handleStoreApiException(const StoreApiException& e);
virtual std::pair<int, std::string> handleStdException(const std::exception& e);
virtual std::pair<int, std::string> handleUnspecifiedException();
virtual void setResponseHeader(const std::shared_ptr<restbed::Session>& session,
const std::string& header);
virtual void returnResponse(const std::shared_ptr<restbed::Session>& session,
const int status, const std::string& result, const std::string& contentType);
virtual void defaultSessionClose(const std::shared_ptr<restbed::Session>& session,
const int status, const std::string& result);
private:
void handler_GET_internal(const std::shared_ptr<restbed::Session> session);
};
/// <summary>
/// Place an order for a pet
/// </summary>
/// <remarks>
///
/// </remarks>
class StoreApiStoreOrderResource: public restbed::Resource
{
public:
StoreApiStoreOrderResource(const std::string& context = "/v2");
virtual ~StoreApiStoreOrderResource();
protected:
//////////////////////////////////////////////////////////
// Override these to implement the server functionality //
//////////////////////////////////////////////////////////
virtual std::pair<int, std::shared_ptr<Order>> handler_POST(
std::shared_ptr<Order> const & order);
protected:
//////////////////////////////////////
// Override these for customization //
//////////////////////////////////////
virtual std::string extractBodyContent(const std::shared_ptr<restbed::Session>& session);
virtual std::pair<int, std::string> handleStoreApiException(const StoreApiException& e);
virtual std::pair<int, std::string> handleStdException(const std::exception& e);
virtual std::pair<int, std::string> handleUnspecifiedException();
virtual void setResponseHeader(const std::shared_ptr<restbed::Session>& session,
const std::string& header);
virtual void returnResponse(const std::shared_ptr<restbed::Session>& session,
const int status, const std::string& result, const std::string& contentType);
virtual void defaultSessionClose(const std::shared_ptr<restbed::Session>& session,
const int status, const std::string& result);
private:
void handler_POST_internal(const std::shared_ptr<restbed::Session> session);
};
//
// The restbed service to actually implement the REST server
//
class StoreApi
{
public:
explicit StoreApi(std::shared_ptr<restbed::Service> const& restbedService);
virtual ~StoreApi();
virtual void setStoreApiStoreOrderOrderIdResource(std::shared_ptr<StoreApiStoreOrderOrderIdResource> spStoreApiStoreOrderOrderIdResource);
virtual void setStoreApiStoreInventoryResource(std::shared_ptr<StoreApiStoreInventoryResource> spStoreApiStoreInventoryResource);
virtual void setStoreApiStoreOrderResource(std::shared_ptr<StoreApiStoreOrderResource> spStoreApiStoreOrderResource);
virtual void publishDefaultResources();
virtual std::shared_ptr<restbed::Service> service();
protected:
std::shared_ptr<StoreApiStoreOrderOrderIdResource> m_spStoreApiStoreOrderOrderIdResource;
std::shared_ptr<StoreApiStoreInventoryResource> m_spStoreApiStoreInventoryResource;
std::shared_ptr<StoreApiStoreOrderResource> m_spStoreApiStoreOrderResource;
private:
std::shared_ptr<restbed::Service> m_service;
};
}
}
}
}
#endif /* StoreApi_H_ */