From ebecf0825759178a9afcfad70ae3e0f151848699 Mon Sep 17 00:00:00 2001 From: Ichiro Date: Mon, 21 Feb 2022 04:35:19 +0900 Subject: [PATCH] Update user --- controllers/UserCtrl.cc | 76 +++++++++++++++++++++++++++++++++++++++++ controllers/UserCtrl.h | 30 ++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 controllers/UserCtrl.cc create mode 100644 controllers/UserCtrl.h diff --git a/controllers/UserCtrl.cc b/controllers/UserCtrl.cc new file mode 100644 index 0000000..35b6af6 --- /dev/null +++ b/controllers/UserCtrl.cc @@ -0,0 +1,76 @@ +#include "UserCtrl.h" + +// Add definition of your processing function here + +#include "models/Users.h" + +using User = drogon_model::web_rinphone::Users; + +void UserCtrl::get(const HttpRequestPtr &req, std::function &&callback) +{ + auto dbClient = app().getDbClient(); + orm::Mapper usrMap(dbClient); + + Json::Value resJson; + auto& resMsg = resJson["message"]; + HttpStatusCode httpRetCode = HttpStatusCode::k200OK; + + orm::Criteria cnd(User::Cols::_deleted_at, orm::CompareOperator::IsNull); + + try + { + size_t page; + size_t limit = 24; + + try + { + page = std::stoul(req->getParameter("page")); + page = (page < 1) ? 1 : page; + } + catch (...) + { + page = 1; + } + + const auto &usrs = usrMap + .orderBy(User::Cols::_created_at, orm::SortOrder::DESC) + .paginate(page, limit) + .findBy(cnd); + auto &retData = resJson["data"]; + retData = Json::Value(Json::arrayValue); + for (const auto &usr : usrs) + { + // app_helpers::stockJsonRow(dbClient, stk, retData.append(stk.toJson())); + retData.append(usr.toJson()); + } + + resJson["total"] = static_cast(usrMap.count(cnd)); + resJson["current_page"] = static_cast(page); + resJson["per_page"] = static_cast(limit); + } + catch (const std::exception &e) + { + LOG_ERROR << e.what(); + + httpRetCode = HttpStatusCode::k500InternalServerError; + } + + auto res = HttpResponse::newHttpJsonResponse(resJson); + res->setStatusCode(httpRetCode); + callback(res); +} + +void UserCtrl::getOne(const HttpRequestPtr &req, std::function &&callback, uint64_t id) +{ + +} + +void UserCtrl::create(const HttpRequestPtr &req, std::function &&callback) +{ + +} + +void UserCtrl::updateOne(const HttpRequestPtr &req, std::function &&callback, uint64_t id) +{ + +} diff --git a/controllers/UserCtrl.h b/controllers/UserCtrl.h new file mode 100644 index 0000000..8c2a101 --- /dev/null +++ b/controllers/UserCtrl.h @@ -0,0 +1,30 @@ +#pragma once + +#include + +using namespace drogon; + +class UserCtrl : public drogon::HttpController +{ + public: + METHOD_LIST_BEGIN + // use METHOD_ADD to add your custom processing function here; + // METHOD_ADD(UserCtrl::get, "/{2}/{1}", Get); // path is /UserCtrl/{arg2}/{arg1} + // METHOD_ADD(UserCtrl::your_method_name, "/{1}/{2}/list", Get); // path is /UserCtrl/{arg1}/{arg2}/list + // ADD_METHOD_TO(UserCtrl::your_method_name, "/absolute/path/{1}/{2}/list", Get); // path is /absolute/path/{arg1}/{arg2}/list + + ADD_METHOD_TO(UserCtrl::get, "/users", Get); + ADD_METHOD_TO(UserCtrl::getOne, "/users/{1}", Get); + ADD_METHOD_TO(UserCtrl::create, "/users", Post); + ADD_METHOD_TO(UserCtrl::updateOne, "/users/{1}", Post); + + METHOD_LIST_END + // your declaration of processing function maybe like this: + // void get(const HttpRequestPtr& req, std::function &&callback, int p1, std::string p2); + // void your_method_name(const HttpRequestPtr& req, std::function &&callback, double p1, int p2) const; + + void get(const HttpRequestPtr &req, std::function &&callback); + void getOne(const HttpRequestPtr &req, std::function &&callback, uint64_t id); + void create(const HttpRequestPtr &req, std::function &&callback); + void updateOne(const HttpRequestPtr &req, std::function &&callback, uint64_t id); +};