forked from loafle/openapi-generator-original
* [C++][Pistache] Refactor setupSupportingFiles Supporting files are set up in the CppPistacheServerCodegen() constructor as well as in processOpts(). Refactor the code and extract a method setupSupportingFiles(). * [C++][Pistache] Refactor: Simplify isQueryParam condition Both branches of the if/else do the same steps. Refactor this out and invert logic. * [C++][Pistache] Refactor: Add injectImplInFilename Both branches of the if/else if do the similar steps and are dependent on the suffix. Make this obvious by introducing a new method injectImplInFilename(String result, String suffix). * [C++][Pistache] Refactor: injectImplInFilename: remove index search We do not need the separatorChar index to inject the "Impl" string. Simply truncate the whole string. Also rename the parameter from 'result' to' filename'. * CppPistacheServer: Refactor postProcessOperationsWithModels Pull out the post-processing for a single operation, and also pull out post-processing for parameters. Introduce boolean expressions for supported parsing per parameter, and consumption of JSON. Reorder code to make locality more explicit i.e. how consumeJSON and isParsingSupported is generated and used. * CppPistacheServer: Refactor to use functional matching Functional matching like anyMatch() directly state what boolean value is searched. However, the Predicates deserve to heave names themselves. * CppPistacheServer: Add base class for Api Looking at the generated main-api-server.cpp code it gets obvious that the API classes are self similar with a similar interface. Only the construction and teh initialization is called in the main() function. Leverage this fact to create a generalization ApiBase. Introduce ApiBase as a pure virtual base class to the concrete API classes and declare init() as virtual. Pull the route member into the base class. With this change we could have a container hold all the ApiImpl objects later and call init() on all of them using a for_each loop. * CppPistacheServer: Use ApiBase for ApiImpl storage Refactor the main-api-server template to use a vector for ApiImpl storage instead of separate objects. This leverages the previously added ApiBase generalization. We push all concrete ApiImpl objects into a vector and call init() on each of them. * [C++][Pistache]: Update generated sample Due to teh addition of ApiBase class update the generated sample. * [C++][Pistache] Add comment for postProcessSingleParam * [C++][Pistache] Rename and comment implFilenameFromApiFilename While writing the comment, I realized that the method name could be more precise. Thus rename injectImplInFilename to implFilenameFromApiFilename and add comment.
143 lines
5.4 KiB
C++
143 lines
5.4 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 (https://openapi-generator.tech).
|
|
* https://openapi-generator.tech
|
|
* Do not edit the class manually.
|
|
*/
|
|
/*
|
|
* PetApi.h
|
|
*
|
|
*
|
|
*/
|
|
|
|
#ifndef PetApi_H_
|
|
#define PetApi_H_
|
|
|
|
|
|
#include "ApiBase.h"
|
|
|
|
#include <pistache/http.h>
|
|
#include <pistache/router.h>
|
|
#include <pistache/http_headers.h>
|
|
|
|
#include <optional>
|
|
#include <utility>
|
|
|
|
#include "ApiResponse.h"
|
|
#include "Pet.h"
|
|
#include <string>
|
|
|
|
namespace org::openapitools::server::api
|
|
{
|
|
|
|
class PetApi : public ApiBase {
|
|
public:
|
|
explicit PetApi(const std::shared_ptr<Pistache::Rest::Router>& rtr);
|
|
virtual ~PetApi() = default;
|
|
void init();
|
|
|
|
static const std::string base;
|
|
|
|
private:
|
|
void setupRoutes();
|
|
|
|
void add_pet_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
void delete_pet_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
void find_pets_by_status_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
void find_pets_by_tags_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
void get_pet_by_id_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
void update_pet_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
void update_pet_with_form_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
void upload_file_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
void pet_api_default_handler(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter response);
|
|
|
|
/// <summary>
|
|
/// Helper function to handle unexpected Exceptions during Parameter parsing and validation.
|
|
/// May be overridden to return custom error formats. This is called inside a catch block.
|
|
/// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
|
|
/// </summary>
|
|
virtual std::pair<Pistache::Http::Code, std::string> handleParsingException(const std::exception& ex) const noexcept;
|
|
|
|
/// <summary>
|
|
/// Helper function to handle unexpected Exceptions during processing of the request in handler functions.
|
|
/// May be overridden to return custom error formats. This is called inside a catch block.
|
|
/// Important: When overriding, do not call `throw ex;`, but instead use `throw;`.
|
|
/// </summary>
|
|
virtual std::pair<Pistache::Http::Code, std::string> handleOperationException(const std::exception& ex) const noexcept;
|
|
|
|
/// <summary>
|
|
/// Add a new pet to the store
|
|
/// </summary>
|
|
/// <remarks>
|
|
///
|
|
/// </remarks>
|
|
/// <param name="body">Pet object that needs to be added to the store</param>
|
|
virtual void add_pet(const org::openapitools::server::model::Pet &body, Pistache::Http::ResponseWriter &response) = 0;
|
|
/// <summary>
|
|
/// Deletes a pet
|
|
/// </summary>
|
|
/// <remarks>
|
|
///
|
|
/// </remarks>
|
|
/// <param name="petId">Pet id to delete</param>
|
|
/// <param name="apiKey"> (optional, default to "")</param>
|
|
virtual void delete_pet(const int64_t &petId, const std::optional<Pistache::Http::Header::Raw> &apiKey, Pistache::Http::ResponseWriter &response) = 0;
|
|
/// <summary>
|
|
/// Finds Pets by status
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Multiple status values can be provided with comma separated strings
|
|
/// </remarks>
|
|
/// <param name="status">Status values that need to be considered for filter</param>
|
|
virtual void find_pets_by_status(const std::optional<std::vector<std::string>> &status, Pistache::Http::ResponseWriter &response) = 0;
|
|
/// <summary>
|
|
/// Finds Pets by tags
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
|
|
/// </remarks>
|
|
/// <param name="tags">Tags to filter by</param>
|
|
virtual void find_pets_by_tags(const std::optional<std::vector<std::string>> &tags, Pistache::Http::ResponseWriter &response) = 0;
|
|
/// <summary>
|
|
/// Find pet by ID
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Returns a single pet
|
|
/// </remarks>
|
|
/// <param name="petId">ID of pet to return</param>
|
|
virtual void get_pet_by_id(const int64_t &petId, Pistache::Http::ResponseWriter &response) = 0;
|
|
/// <summary>
|
|
/// Update an existing pet
|
|
/// </summary>
|
|
/// <remarks>
|
|
///
|
|
/// </remarks>
|
|
/// <param name="body">Pet object that needs to be added to the store</param>
|
|
virtual void update_pet(const org::openapitools::server::model::Pet &body, Pistache::Http::ResponseWriter &response) = 0;
|
|
/// <summary>
|
|
/// Updates a pet in the store with form data
|
|
/// </summary>
|
|
/// <remarks>
|
|
///
|
|
/// </remarks>
|
|
virtual void update_pet_with_form(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter &response) = 0;
|
|
/// <summary>
|
|
/// uploads an image
|
|
/// </summary>
|
|
/// <remarks>
|
|
///
|
|
/// </remarks>
|
|
virtual void upload_file(const Pistache::Rest::Request &request, Pistache::Http::ResponseWriter &response) = 0;
|
|
|
|
};
|
|
|
|
} // namespace org::openapitools::server::api
|
|
|
|
#endif /* PetApi_H_ */
|
|
|