first thoughts about database
This commit is contained in:
parent
1b9d5e4a7b
commit
03f38387e2
14 changed files with 255 additions and 20 deletions
|
@ -12,13 +12,13 @@ void Router::addRoute(const std::string& path, const Handler& handler) {
|
|||
std::cerr << "could'not add route " + path + " to the routing table";
|
||||
}
|
||||
|
||||
void Router::route(const std::string& path, std::unique_ptr<Request> request) {
|
||||
void Router::route(const std::string& path, std::unique_ptr<Request> request, Server* server) {
|
||||
auto itr = table.find(path);
|
||||
if (itr == table.end())
|
||||
return handleNotFound(path, std::move(request));
|
||||
|
||||
try {
|
||||
bool result = itr->second(request.get());
|
||||
bool result = itr->second(request.get(), server);
|
||||
if (!result)
|
||||
handleInternalError(std::runtime_error("handler failed to handle the request"), std::move(request));
|
||||
} catch (const std::exception& e) {
|
||||
|
|
|
@ -8,14 +8,16 @@
|
|||
#include "request/request.h"
|
||||
#include "response/response.h"
|
||||
|
||||
class Server;
|
||||
|
||||
class Router {
|
||||
public:
|
||||
using Handler = std::function<bool(Request*)>;
|
||||
using Handler = std::function<bool(Request*, Server*)>;
|
||||
|
||||
Router();
|
||||
|
||||
void addRoute(const std::string& path, const Handler& handler);
|
||||
void route(const std::string& path, std::unique_ptr<Request> request);
|
||||
void route(const std::string& path, std::unique_ptr<Request> request, Server* server);
|
||||
|
||||
private:
|
||||
void handleNotFound(const std::string& path, std::unique_ptr<Request> request);
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
#include "server.h"
|
||||
|
||||
constexpr static const char* REQUEST_URI("REQUEST_URI");
|
||||
|
||||
constexpr static const char* DOCUMENT_URI("DOCUMENT_URI");
|
||||
constexpr static const char* DOCUMENT_ROOT("DOCUMENT_ROOT");
|
||||
|
||||
constexpr static const char* SCRIPT_NAME("SCRIPT_NAME");
|
||||
constexpr static const char* SCRIPT_FILENAME("SCRIPT_FILENAME");
|
||||
|
||||
Server::Server():
|
||||
terminating(false),
|
||||
requestCount(0),
|
||||
serverName(std::nullopt),
|
||||
router()
|
||||
router(),
|
||||
db()
|
||||
{
|
||||
std::cout << "Startig pica..." << std::endl;
|
||||
|
||||
db = DBInterface::create(DBInterface::Type::mysql);
|
||||
std::cout << "Database type: MySQL" << std::endl;
|
||||
|
||||
db->setCredentials("pica", "pica");
|
||||
db->setDatabase("pica");
|
||||
db->connect("/run/mysqld/mysqld.sock");
|
||||
|
||||
router.addRoute("info", Server::info);
|
||||
router.addRoute("env", Server::printEnvironment);
|
||||
}
|
||||
|
@ -54,7 +56,7 @@ void Server::handleRequest(std::unique_ptr<Request> request) {
|
|||
|
||||
try {
|
||||
std::string path = request->getPath(serverName.value());
|
||||
router.route(path.data(), std::move(request));
|
||||
router.route(path.data(), std::move(request), this);
|
||||
} catch (const std::exception e) {
|
||||
Response error(Response::Status::internalError);
|
||||
error.setBody(std::string(e.what()));
|
||||
|
@ -62,7 +64,8 @@ void Server::handleRequest(std::unique_ptr<Request> request) {
|
|||
}
|
||||
}
|
||||
|
||||
bool Server::printEnvironment(Request* request) {
|
||||
bool Server::printEnvironment(Request* request, Server* server) {
|
||||
(void)server;
|
||||
nlohmann::json body = nlohmann::json::object();
|
||||
request->printEnvironment(body);
|
||||
|
||||
|
@ -73,7 +76,8 @@ bool Server::printEnvironment(Request* request) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Server::info(Request* request) {
|
||||
bool Server::info(Request* request, Server* server) {
|
||||
(void)server;
|
||||
Response res;
|
||||
nlohmann::json body = nlohmann::json::object();
|
||||
body["type"] = "Pica";
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "request/request.h"
|
||||
#include "response/response.h"
|
||||
#include "router.h"
|
||||
#include "database/dbinterface.h"
|
||||
|
||||
class Server {
|
||||
public:
|
||||
|
@ -28,12 +29,13 @@ public:
|
|||
private:
|
||||
void handleRequest(std::unique_ptr<Request> request);
|
||||
|
||||
static bool info(Request* request);
|
||||
static bool printEnvironment(Request* request);
|
||||
static bool info(Request* request, Server* server);
|
||||
static bool printEnvironment(Request* request, Server* server);
|
||||
|
||||
private:
|
||||
bool terminating;
|
||||
uint64_t requestCount;
|
||||
std::optional<std::string> serverName;
|
||||
Router router;
|
||||
std::unique_ptr<DBInterface> db;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue