add: put controller api endpoint
This commit is contained in:
		
							parent
							
								
									0247031a3d
								
							
						
					
					
						commit
						831291cdac
					
				
					 4 changed files with 88 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -66,3 +66,41 @@ controllers::delete_one_by_id(const HttpRequestPtr &req, std::function<void(cons
 | 
			
		|||
    }
 | 
			
		||||
    controller_dbo::free_list(controllers);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
controllers::put_one_by_id(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback,
 | 
			
		||||
                           const std::string &controller_id)
 | 
			
		||||
{
 | 
			
		||||
    Json::Value body = *req->getJsonObject();
 | 
			
		||||
 | 
			
		||||
    controller_dbo **controllers = controller_dbo::get_by_simple("id", controller_id.c_str(), (intptr_t) &sqlite3_bind_text);
 | 
			
		||||
 | 
			
		||||
    if(controllers[0])
 | 
			
		||||
    {
 | 
			
		||||
        strncpy(controllers[0]->name, body["name"].asCString(), 128);
 | 
			
		||||
        strncpy(controllers[0]->ip, body["ip"].asCString(), 17);
 | 
			
		||||
 | 
			
		||||
        controllers[0]->name[127] = '\0';
 | 
			
		||||
        controllers[0]->ip[16] = '\0';
 | 
			
		||||
 | 
			
		||||
        auto resp = HttpResponse::newHttpResponse();
 | 
			
		||||
        if(controllers[0]->update())
 | 
			
		||||
        {
 | 
			
		||||
            resp = HttpResponse::newHttpJsonResponse(controllers[0]->to_json());
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            resp->setStatusCode(k500InternalServerError);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        callback(resp);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        auto resp = HttpResponse::newHttpResponse();
 | 
			
		||||
        resp->setStatusCode(k404NotFound);
 | 
			
		||||
 | 
			
		||||
        callback(resp);
 | 
			
		||||
    }
 | 
			
		||||
    controller_dbo::free_list(controllers);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +13,7 @@ namespace api
 | 
			
		|||
            METHOD_ADD(controllers::get_all, "/", Get);
 | 
			
		||||
            METHOD_ADD(controllers::get_one_by_id, "/{1}", Get);
 | 
			
		||||
            METHOD_ADD(controllers::delete_one_by_id, "/{1}", Delete);
 | 
			
		||||
            METHOD_ADD(controllers::put_one_by_id, "/{1}", Put, "filters::json_required", "filters::controllers::valid_json");
 | 
			
		||||
 | 
			
		||||
            METHOD_ADD(controllers::get_relays_all, "/{1}/relays/", Get);
 | 
			
		||||
            METHOD_ADD(controllers::get_relays_one_by_id_and_num, "/{1}/relays/{2}", Get);
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +24,7 @@ namespace api
 | 
			
		|||
            static void get_all(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback);
 | 
			
		||||
            static void get_one_by_id(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, const std::string& controller_id);
 | 
			
		||||
            static void delete_one_by_id(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, const std::string& controller_id);
 | 
			
		||||
            static void put_one_by_id(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, const std::string& controller_id);
 | 
			
		||||
 | 
			
		||||
            static void get_relays_all(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, const std::string& controller_id);
 | 
			
		||||
            static void get_relays_one_by_id_and_num(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback, const std::string& controller_id, int relay_num);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										28
									
								
								filters/controllers_valid_json.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								filters/controllers_valid_json.cc
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
#include <models/relay_dbo.h>
 | 
			
		||||
#include "controllers_valid_json.h"
 | 
			
		||||
 | 
			
		||||
using namespace drogon;
 | 
			
		||||
using namespace filters::controllers;
 | 
			
		||||
 | 
			
		||||
void valid_json::doFilter(const HttpRequestPtr &req,
 | 
			
		||||
                         FilterCallback &&fcb,
 | 
			
		||||
                         FilterChainCallback &&fccb)
 | 
			
		||||
{
 | 
			
		||||
    Json::Value body = *req->jsonObject();
 | 
			
		||||
 | 
			
		||||
    bool is_valid = true;
 | 
			
		||||
 | 
			
		||||
    is_valid &= body["name"].type() == Json::ValueType::stringValue;
 | 
			
		||||
    is_valid &= body["ip"].type() == Json::ValueType::stringValue;
 | 
			
		||||
 | 
			
		||||
    if(is_valid)
 | 
			
		||||
    {
 | 
			
		||||
        //Passed
 | 
			
		||||
        fccb();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    //Check failed
 | 
			
		||||
    auto res = drogon::HttpResponse::newHttpResponse();
 | 
			
		||||
    res->setStatusCode(k400BadRequest);
 | 
			
		||||
    fcb(res);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										20
									
								
								filters/controllers_valid_json.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								filters/controllers_valid_json.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <drogon/HttpFilter.h>
 | 
			
		||||
using namespace drogon;
 | 
			
		||||
namespace filters
 | 
			
		||||
{
 | 
			
		||||
    namespace controllers
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        class valid_json : public HttpFilter<valid_json>
 | 
			
		||||
        {
 | 
			
		||||
        public:
 | 
			
		||||
            valid_json() = default;
 | 
			
		||||
            void doFilter(const HttpRequestPtr &req,
 | 
			
		||||
                          FilterCallback &&fcb,
 | 
			
		||||
                          FilterChainCallback &&fccb) override;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue