33#define ServiceComponent_hpp
44
55#include " dto/ConfigDto.hpp"
6-
7- #include " db/Database.hpp"
6+ #include " ErrorHandler.hpp"
87
98#include " oatpp/web/server/HttpConnectionHandler.hpp"
109#include " oatpp/web/server/HttpRouter.hpp"
1110#include " oatpp/network/tcp/server/ConnectionProvider.hpp"
1211
1312#include " oatpp/parser/json/mapping/ObjectMapper.hpp"
14-
1513#include " oatpp/core/macro/component.hpp"
1614
1715class ServiceComponent {
18- public:
19-
20- class ErrorHandler : public oatpp ::web::server::handler::ErrorHandler {
21- public:
22- typedef oatpp::web::protocol::http::outgoing::Response OutgoingResponse;
23- typedef oatpp::web::protocol::http::Status Status;
24- typedef oatpp::web::protocol::http::outgoing::ResponseFactory ResponseFactory;
25- private:
26- std::shared_ptr<oatpp::data::mapping::ObjectMapper> m_objectMapper;
27- public:
28-
29- ErrorHandler (const std::shared_ptr<oatpp::data::mapping::ObjectMapper>& objectMapper)
30- : m_objectMapper(objectMapper)
31- {}
32-
33- OATPP_COMPONENT (std::shared_ptr<oatpp::data::mapping::ObjectMapper>, objectMapper);
34-
35-
36- std::shared_ptr<OutgoingResponse> handleError (const Status& status, const oatpp::String& message, const Headers& headers) override {
37-
38- auto error = ErrorDto::createShared ();
39- error->code = 500 ;
40- error->error = " Unhandled Error" ;
41- error->message = message;
42-
43- auto response = ResponseFactory::createResponse (Status::CODE_500, error, m_objectMapper);
44-
45- for (const auto & pair : headers.getAll ()) {
46- response->putHeader (pair.first .toString (), pair.second .toString ());
47- }
48-
49- return response;
50-
51- }
52-
53- };
54-
5516public:
5617
5718 /* *
5819 * Create ObjectMapper component to serialize/deserialize DTOs in Contoller's API
5920 */
6021 OATPP_CREATE_COMPONENT (std::shared_ptr<oatpp::data::mapping::ObjectMapper>, apiObjectMapper)([] {
61- return oatpp::parser::json::mapping::ObjectMapper::createShared ();
22+ auto mapper = oatpp::parser::json::mapping::ObjectMapper::createShared ();
23+ mapper->getSerializer ()->getConfig ()->useBeautifier = true ;
24+ return mapper;
6225 }());
6326
6427 /* *
6528 * Create ConnectionProvider component which listens on the port
6629 */
6730 OATPP_CREATE_COMPONENT (std::shared_ptr<oatpp::network::ServerConnectionProvider>, serverConnectionProvider)([] {
6831 OATPP_COMPONENT (oatpp::Object<ConfigDto>, config); // Get config component
69- return oatpp::network::tcp::server::ConnectionProvider::createShared ({" localhost" , config->port });
32+ return oatpp::network::tcp::server::ConnectionProvider::createShared ({" localhost" , config->port , oatpp::network::Address::IP_4 });
7033 }());
7134
7235 /* *
@@ -82,18 +45,11 @@ class ServiceComponent {
8245 OATPP_CREATE_COMPONENT (std::shared_ptr<oatpp::network::ConnectionHandler>, serverConnectionHandler)([] {
8346 OATPP_COMPONENT (std::shared_ptr<oatpp::web::server::HttpRouter>, router); // get Router component
8447 OATPP_COMPONENT (std::shared_ptr<oatpp::data::mapping::ObjectMapper>, objectMapper); // get ObjectMapper component
48+
8549 auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared (router);
8650 connectionHandler->setErrorHandler (std::make_shared<ErrorHandler>(objectMapper));
8751 return connectionHandler;
8852 }());
89-
90- OATPP_CREATE_COMPONENT (std::shared_ptr<Database>, database)([] {
91- OATPP_COMPONENT (oatpp::Object<ConfigDto>, config); // Get config component
92- auto db = std::make_shared<Database>(config->dbHost , config->dbUser , config->dbPass , config->dbName );
93- db->connect ();
94- db->init ();
95- return db;
96- }());
9753
9854};
9955
0 commit comments