Skip to content

Commit

Permalink
change docker compose and response
Browse files Browse the repository at this point in the history
  • Loading branch information
skript023 committed Jun 11, 2024
1 parent c76a4bd commit 096dc50
Show file tree
Hide file tree
Showing 29 changed files with 1,023 additions and 962 deletions.
8 changes: 4 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ services:
context: .
dockerfile: Dockerfile
container_name: gaboot-shop-server
restart: on-failure
restart: unless-stopped
init: true
ports:
- 5000:8080
env_file:
- path: .env
required: true
networks:
- gaboot
- database_gaboot
volumes:
- ./container/uploads:/home/skript023/gbt-backend/Linux/uploads/
- ./container/DrogonLog:/home/skript023/gbt-backend/Linux/DrogonLog/
- ./container/Service:/var/log/
networks:
gaboot:
driver: bridge
database_gaboot:
external: true
16 changes: 16 additions & 0 deletions src/benchmark.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,24 @@ namespace gaboot
{
m_start = high_resolution_clock::now();
}

static void execute(std::function<void()> cb)
{
benchmark bench;
cb();
bench.get_runtime();
bench.reset();
}
private:
high_resolution_clock::time_point m_start;
std::string m_name;
};
}

#define BENCHMARK(name, code)\
{\
gaboot::benchmark bench(name);\
code;\
bench.get_runtime(); \
bench.reset(); \
}
9 changes: 9 additions & 0 deletions src/module/banner/controllers/banner.cc
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
#include "banner.h"
#include "exception/exception.hpp"

// Add definition of your processing function here
namespace gaboot
{
void banner::findAll(HttpRequestPtr const& req, response_t&& callback)
{
TRY_CLAUSE
callback(m_banner_service.findAll(req));
EXCEPT_CLAUSE
}
void banner::findOne(HttpRequestPtr const& req, response_t&& callback, std::string&& id)
{
TRY_CLAUSE
callback(m_banner_service.findOne(req, std::move(id)));
EXCEPT_CLAUSE
}
void banner::getImage(HttpRequestPtr const& req, response_t&& callback, std::string&& id)
{
TRY_CLAUSE
callback(m_banner_service.getImage(req, std::move(id)));
EXCEPT_CLAUSE
}
void banner::getThumbnail(HttpRequestPtr const& req, response_t&& callback, std::string&& id)
{
TRY_CLAUSE
callback(m_banner_service.getThumbnail(req, std::move(id)));
EXCEPT_CLAUSE
}
}
137 changes: 64 additions & 73 deletions src/module/banner/services/banner_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,125 +5,116 @@

namespace gaboot
{
banner_service::banner_service()
banner_service::banner_service():
m_database(std::make_unique<Mapper<Banners>>(DATABASE_CLIENT)),
m_response(std::make_unique<response_data<BannerResponse>>())
{

LOG(INFO) << "Category service registered.";
}
banner_service::~banner_service()
{

m_database.reset();
m_response.reset();
}
HttpResponsePtr banner_service::findAll(HttpRequestPtr const& req)
{
TRY_CLAUSE
{
auto & limitParam = req->getParameter("limit");
auto& pageParam = req->getParameter("page");
auto& limitParam = req->getParameter("limit");
auto& pageParam = req->getParameter("page");

const size_t limit = limitParam.empty() && !util::is_numeric(limitParam) ? 10 : stoull(limitParam);
const size_t page = pageParam.empty() && !util::is_numeric(pageParam) ? 0 : stoull(pageParam) - 1;
const size_t limit = limitParam.empty() && !util::is_numeric(limitParam) ? 10 : stoull(limitParam);
const size_t page = pageParam.empty() && !util::is_numeric(pageParam) ? 0 : stoull(pageParam) - 1;

const auto banners = db().orderBy(Banners::Cols::_name).limit(limit).offset(page * limit).findAll();
const auto banners = m_database->orderBy(Banners::Cols::_name).limit(limit).offset(page * limit).findAll();

if (banners.empty())
{
m_response.m_message = "0 banner found";
m_response.m_success = true;
if (banners.empty())
{
m_response->m_message = "0 banner found";
m_response->m_success = true;

return HttpResponse::newHttpJsonResponse(m_response.to_json());
}
return HttpResponse::newHttpJsonResponse(m_response->to_json());
}

Json::Value data(Json::arrayValue);
Json::Value data(Json::arrayValue);


const size_t lastPage = (banners.size() / (limit + (banners.size() % limit))) == 0 ? 0 : 1;
const size_t lastPage = (banners.size() / (limit + (banners.size() % limit))) == 0 ? 0 : 1;

m_response.m_message = "Success retreive banners data";
m_response.m_data = banners;
m_response.m_success = true;
m_response.m_last_page = lastPage;
m_response->m_message = "Success retrieve banners data";
m_response->m_data = banners;
m_response->m_success = true;
m_response->m_last_page = lastPage;

return HttpResponse::newHttpJsonResponse(m_response.to_json());
} EXCEPT_CLAUSE
return HttpResponse::newHttpJsonResponse(m_response->to_json());
}
HttpResponsePtr banner_service::findOne(HttpRequestPtr const& req, std::string&& id)
{
TRY_CLAUSE
if (id.empty())
{
if (id.empty())
{
throw BadRequestException("Requirement doesn't match");
}
throw BadRequestException("Requirement doesn't match");
}

auto banner = db().findByPrimaryKey(id);
auto banner = m_database->findByPrimaryKey(id);

m_response.m_message = "Success retrieve banner data";
m_response.m_success = true;
m_response.m_data = banner;
m_response->m_message = "Success retrieve banner data";
m_response->m_success = true;
m_response->m_data = banner;

return HttpResponse::newHttpJsonResponse(m_response.to_json());
} EXCEPT_CLAUSE
return HttpResponse::newHttpJsonResponse(m_response->to_json());
}
HttpResponsePtr banner_service::getImage(HttpRequestPtr const& req, std::string&& id)
{
TRY_CLAUSE
if (id.empty())
{
if (id.empty())
{
LOG(WARNING) << "ID is empty or ID is not numeric";
LOG(WARNING) << "ID is empty or ID is not numeric";

throw BadRequestException("Parameters requirement doesn't match");
}
throw BadRequestException("Parameters requirement doesn't match");
}

Banners banner = db().findByPrimaryKey(id);
Banners banner = m_database->findByPrimaryKey(id);

std::filesystem::path file(*banner.getImagePath());
std::filesystem::path file(*banner.getImagePath());

if (!std::filesystem::exists(file))
{
LOG(WARNING) << "File at " << file.lexically_normal() << " doesn't exist in server";
if (!std::filesystem::exists(file))
{
LOG(WARNING) << "File at " << file.lexically_normal() << " doesn't exist in server";

m_response.m_message = "Unable to retreive banner picture, please upload your banner picture";
m_response.m_success = false;
m_response->m_message = "Unable to retreive banner picture, please upload your banner picture";
m_response->m_success = false;

auto response = HttpResponse::newHttpJsonResponse(m_response.to_json());
response->setStatusCode(k404NotFound);
auto response = HttpResponse::newHttpJsonResponse(m_response->to_json());
response->setStatusCode(k404NotFound);

return response;
}
return response;
}

return HttpResponse::newFileResponse(*banner.getImagePath());
} EXCEPT_CLAUSE
return HttpResponse::newFileResponse(*banner.getImagePath());
}
HttpResponsePtr banner_service::getThumbnail(HttpRequestPtr const& req, std::string&& id)
{
TRY_CLAUSE
if (id.empty())
{
if (id.empty())
{
LOG(WARNING) << "ID is empty or ID is not numeric";
LOG(WARNING) << "ID is empty or ID is not numeric";

throw BadRequestException("Parameters requirement doesn't match");
}
throw BadRequestException("Parameters requirement doesn't match");
}

Banners banner = db().findByPrimaryKey(id);
Banners banner = m_database->findByPrimaryKey(id);

std::filesystem::path file(*banner.getThumbnailPath());
std::filesystem::path file(*banner.getThumbnailPath());

if (!std::filesystem::exists(file))
{
LOG(WARNING) << "File at " << file.lexically_normal() << " doesn't exist in server";
if (!std::filesystem::exists(file))
{
LOG(WARNING) << "File at " << file.lexically_normal() << " doesn't exist in server";

m_response.m_message = "Unable to retreive banner picture, please upload your banner picture";
m_response.m_success = false;
m_response->m_message = "Unable to retreive banner picture, please upload your banner picture";
m_response->m_success = false;

auto response = HttpResponse::newHttpJsonResponse(m_response.to_json());
response->setStatusCode(k404NotFound);
auto response = HttpResponse::newHttpJsonResponse(m_response->to_json());
response->setStatusCode(k404NotFound);

return response;
}
return response;
}

return HttpResponse::newFileResponse(*banner.getThumbnailPath());
} EXCEPT_CLAUSE
return HttpResponse::newFileResponse(*banner.getThumbnailPath());
}
}
10 changes: 4 additions & 6 deletions src/module/banner/services/banner_service.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ namespace gaboot
{
class banner_service
{
Mapper<Banners> db() { return Mapper<Banners>(DATABASE_CLIENT); }
public:
explicit banner_service();
~banner_service() noexcept;
Expand All @@ -36,18 +35,17 @@ namespace gaboot
{
if (m_cache_banner.empty() || m_cache_banner.expired())
{
auto banners = db().orderBy(Banners::Cols::_name).findFutureAll().get();
auto banners = m_database->orderBy(Banners::Cols::_name).findFutureAll().get();
m_cache_banner.cache_duration(5min);

std::ranges::for_each(banners.begin(), banners.end(), [this](Banners category) {
m_cache_banner.insert(*category.getId(), &category);
});
});
}
}
private:
response_data<BannerResponse> m_response;
std::string m_error;
Json::Value m_data;
std::unique_ptr<response_data<BannerResponse>> m_response;
cache_handler<Banners> m_cache_banner;
std::unique_ptr<Mapper<Banners>> m_database;
};
}
11 changes: 11 additions & 0 deletions src/module/cart/controllers/cart.cc
Original file line number Diff line number Diff line change
@@ -1,26 +1,37 @@
#include "cart.h"
#include "exception/exception.hpp"

// Add definition of your processing function here
namespace gaboot
{
void cart::create(HttpRequestPtr const &req, response_t &&callback)
{
TRY_CLAUSE
callback(m_cart_service.create(req));
EXCEPT_CLAUSE
}
void cart::findAll(HttpRequestPtr const &req, response_t &&callback)
{
TRY_CLAUSE
callback(m_cart_service.findAll(req));
EXCEPT_CLAUSE
}
void cart::findOne(HttpRequestPtr const &req, response_t &&callback, std::string &&id)
{
TRY_CLAUSE
callback(m_cart_service.findOne(req, std::move(id)));
EXCEPT_CLAUSE
}
void cart::update(HttpRequestPtr const &req, response_t &&callback, std::string &&id)
{
TRY_CLAUSE
callback(m_cart_service.update(req, std::move(id)));
EXCEPT_CLAUSE
}
void cart::remove(HttpRequestPtr const &req, response_t &&callback, std::string &&id)
{
TRY_CLAUSE
callback(m_cart_service.remove(req, std::move(id)));
EXCEPT_CLAUSE
}
}
46 changes: 23 additions & 23 deletions src/module/cart/controllers/cart.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,28 @@ using namespace drogon;

namespace gaboot
{
class cart : public drogon::HttpController<cart>
{
cart_service m_cart_service;
class cart : public drogon::HttpController<cart>
{
cart_service m_cart_service;
public:
METHOD_LIST_BEGIN
// use METHOD_ADD to add your custom processing function here;
// METHOD_ADD(cart::get, "/{2}/{1}", Get); // path is /cart/{arg2}/{arg1}
// METHOD_ADD(cart::your_method_name, "/{1}/{2}/list", Get); // path is /cart/{arg1}/{arg2}/list
// ADD_METHOD_TO(cart::your_method_name, "/absolute/path/{1}/{2}/list", Get); // path is /absolute/path/{arg1}/{arg2}/list
ADD_METHOD_TO(cart::create, "/cart", Post);
ADD_METHOD_TO(cart::findAll, "/cart", Get);
ADD_METHOD_TO(cart::findOne, "/cart/{id}", Get);
ADD_METHOD_TO(cart::update, "/cart/{id}", Patch);
ADD_METHOD_TO(cart::remove, "/cart/{id}", Delete);
METHOD_LIST_END
// your declaration of processing function maybe like this:
// void get(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, int p1, std::string p2);
// void your_method_name(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, double p1, int p2) const;
void create(HttpRequestPtr const& req, response_t&& callback);
void findAll(HttpRequestPtr const& req, response_t&& callback);
void findOne(HttpRequestPtr const& req, response_t&& callback, std::string&& id);
void update(HttpRequestPtr const& req, response_t&& callback, std::string&& id);
void remove(HttpRequestPtr const& req, response_t&& callback, std::string&& id);
};
METHOD_LIST_BEGIN
// use METHOD_ADD to add your custom processing function here;
// METHOD_ADD(cart::get, "/{2}/{1}", Get); // path is /cart/{arg2}/{arg1}
// METHOD_ADD(cart::your_method_name, "/{1}/{2}/list", Get); // path is /cart/{arg1}/{arg2}/list
// ADD_METHOD_TO(cart::your_method_name, "/absolute/path/{1}/{2}/list", Get); // path is /absolute/path/{arg1}/{arg2}/list
ADD_METHOD_TO(cart::create, "/cart", Post);
ADD_METHOD_TO(cart::findAll, "/cart", Get);
ADD_METHOD_TO(cart::findOne, "/cart/{id}", Get);
ADD_METHOD_TO(cart::update, "/cart/{id}", Patch);
ADD_METHOD_TO(cart::remove, "/cart/{id}", Delete);
METHOD_LIST_END
// your declaration of processing function maybe like this:
// void get(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, int p1, std::string p2);
// void your_method_name(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, double p1, int p2) const;
void create(HttpRequestPtr const& req, response_t&& callback);
void findAll(HttpRequestPtr const& req, response_t&& callback);
void findOne(HttpRequestPtr const& req, response_t&& callback, std::string&& id);
void update(HttpRequestPtr const& req, response_t&& callback, std::string&& id);
void remove(HttpRequestPtr const& req, response_t&& callback, std::string&& id);
};
}
Loading

0 comments on commit 096dc50

Please sign in to comment.