Advertisement
dimon-torchila

Untitled

May 9th, 2023
753
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1. #include "set_couriers.hpp"
  2.  
  3. #include <fmt/format.h>
  4.  
  5. #include <userver/server/handlers/http_handler_base.hpp>
  6. #include <userver/storages/postgres/cluster.hpp>
  7. #include <userver/storages/postgres/component.hpp>
  8. #include <userver/utils/assert.hpp>
  9. #include <userver/formats/json/value.hpp>
  10.  
  11. namespace enrollment_couriers{
  12. namespace {
  13. class Couriers final : public userver::server::handlers::HttpHandlerBase{
  14.  public:
  15.   static constexpr std::string_view kName = "handler-set-couriers";
  16.  
  17.   Couriers(const userver::components::ComponentConfig& config,
  18.        const userver::components::ComponentContext& component_context)
  19.       : HttpHandlerBase(config, component_context),
  20.         pg_cluster_(
  21.             component_context
  22.                 .FindComponent<userver::components::Postgres>("postgres-db-1")
  23.                 .GetCluster()) {}
  24.  
  25.   std::string HandleRequestThrow(
  26.     const userver::server::http::HttpRequest& request,
  27.         userver::server::request::RequestContext&) const override {
  28.       const auto& courier_list = userver::formats::json::FromString(request.RequestBody());
  29.       int courier_count = 0;
  30.       if(courier_list.IsEmpty())
  31.         return "Nothing to add...";
  32.       else{
  33.         for(const auto& value : courier_list){
  34.           ++courier_count;
  35.           const auto& regions = value["regions"].As<std::vector<int>>();
  36.           std::string type = value["courier_type"].As<std::string>();
  37.           std::vector<std::string> hours = value["working_hours"].As<std::vector<std::string>>();
  38.           std::vector<std::vector<std::string>> working_hours;
  39.           for(auto& hour : hours){
  40.               std::string hour1(hour.begin(), hour.begin() + hour.find('-')), hour2(hour.begin() + hour.find('-') + 1, hour.end());
  41.               working_hours.push_back({hour1, hour2});
  42.            }
  43.            
  44.           auto result = pg_cluster_->Execute(
  45.               userver::storages::postgres::ClusterHostType::kMaster,
  46.               "INSERT INTO hello_schema.couriers(courier_type, regions, working_hours)"
  47.               "VALUES ($1, $2, $3)", type, regions, working_hours);
  48.         }
  49.         return SayAddCourier(courier_count);
  50.       }
  51.   }
  52.   userver::storages::postgres::ClusterPtr pg_cluster_;
  53.  
  54. };
  55. }
  56.  
  57.   std::string SayAddCourier(int value){
  58.     return fmt::format("Added {} couriers", value);
  59.   }
  60.  
  61.   void AppendCouriers(userver::components::ComponentList& component_list) {
  62.     component_list.Append<Couriers>();
  63.   }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement