diff --git a/CMakeLists.txt b/CMakeLists.txt index fd9c31d..04337c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,5 @@ cmake_minimum_required(VERSION 3.16) +cmake_policy(SET CMP0167 OLD) project(short-link VERSION 1.0 LANGUAGES CXX) @@ -14,7 +15,7 @@ add_executable(Application src/main.cpp src/request_handler.cpp ) -find_package(Boost REQUIRED COMPONENTS filesystem system) +find_package(Boost REQUIRED filesystem system) if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) diff --git a/includes/database_service.hpp b/includes/database_service.hpp new file mode 100644 index 0000000..4d997e3 --- /dev/null +++ b/includes/database_service.hpp @@ -0,0 +1,28 @@ +#ifndef DATABASE_SERVICE_HPP +#define DATABASE_SERVICE_HPP + +#include +#include +#include +#include + +class DatabaseService { +public: + static DatabaseService& getInstance(boost::asio::io_context& io_context, std::size_t pool_size); + + +private: + std::shared_ptr getConnection(); //retrive a connection from the connection pool + + DatabaseService(boost::asio::io_context& io_context, std::size_t pool_size = 4); + ~DatabaseService(); + DatabaseService(DatabaseService const&); + void operator=(DatabaseService const&); + + boost::asio::io_context& io_context_; + std::size_t pool_size_; + std::vector> connection_pool_; + std::size_t current_index_ = 0; //index used for round robin selection +}; + +#endif \ No newline at end of file diff --git a/src/database_connection.cpp b/src/database_connection.cpp new file mode 100644 index 0000000..194bf2b --- /dev/null +++ b/src/database_connection.cpp @@ -0,0 +1,16 @@ +#include "../includes/database_service.hpp" +#include + + +DatabaseService& DatabaseService::getInstance(boost::asio::io_context &io_context, std::size_t pool_size) { + static DatabaseService INSTANCE; + return INSTANCE; +} + +DatabaseService::DatabaseService(boost::asio::io_context& io_context, std::size_t pool_size) : io_context_(io_context), pool_size_(pool_size) { + +} + +DatabaseService::~DatabaseService() { + +} \ No newline at end of file diff --git a/src/request_handler.cpp b/src/request_handler.cpp index a9c328e..3bedadf 100644 --- a/src/request_handler.cpp +++ b/src/request_handler.cpp @@ -1,14 +1,31 @@ #include "../includes/request_handler.hpp" #include +#include #include #include #include http::response RequestHandler::handle(const http::request& request) { - http::response response{http::status::ok, request.version()}; - response.set(http::field::server, "Beast"); - response.set(http::field::content_type, "text/plain"); - response.body() = "Hello, World!"; - response.prepare_payload(); - return response; + string_view target = request.target(); + + if (target == "/") { + //case 1: "/" -> serve angular frontend or static frontend what ever + http::response response; + response.result(http::status::ok); + response.version(request.version()); + response.set(http::field::server, "Beast"); + response.set(http::field::content_type, "text/html"); + response.keep_alive(); + + //todo: load angular application / plain html & js + response.body() = "

TEST

"; + + response.prepare_payload(); + return response; + } + + //case 2: "/url" -> redirect to expanded url + //case 3: neither -> redirect to 404 + + return http::response{http::status::bad_request, request.version()}; } \ No newline at end of file