fix: uuid saving as blob
This commit is contained in:
parent
2b9abff7f1
commit
beea18f70b
10 changed files with 80 additions and 20 deletions
|
@ -1,5 +1,6 @@
|
|||
#include <models/controller_dbo.h>
|
||||
#include <config.h>
|
||||
#include <enums.h>
|
||||
#include "api_v1_controllers.h"
|
||||
using namespace api::v1;
|
||||
|
||||
|
@ -133,7 +134,14 @@ controllers::put_one_by_id(const HttpRequestPtr &req, std::function<void(const H
|
|||
auto resp = HttpResponse::newHttpResponse();
|
||||
if(controllers[0]->update())
|
||||
{
|
||||
controllers[0]->command(config::command_code_set_name, controllers[0]->name);
|
||||
binn *map = binn_map();
|
||||
|
||||
binn_map_set_uint8(map, COMMAND_MAPPING_CODE, config::command_code_set_name);
|
||||
binn_map_set_str(map, COMMAND_MAPPING_NAME, controllers[0]->name);
|
||||
|
||||
controllers[0]->command(map);
|
||||
|
||||
binn_free(map);
|
||||
resp = HttpResponse::newHttpJsonResponse(controllers[0]->to_json());
|
||||
}
|
||||
else
|
||||
|
|
|
@ -120,6 +120,10 @@ void controllers::post_discover(const HttpRequestPtr &req, std::function<void(co
|
|||
if(uuid_compare(known_controllers[i]->id, discovered_id) == 0)
|
||||
{
|
||||
known_controllers[i]->active = true;
|
||||
strncpy(known_controllers[i]->name, discovered_name, 128);
|
||||
known_controllers[i]->name[127] = '\0';
|
||||
known_controllers[i]->port = discovered_command_port;
|
||||
known_controllers[i]->relay_count = discovered_relay_count;
|
||||
known_controllers[i]->update();
|
||||
delete known_controllers[i];
|
||||
found_discovered_in_list = true;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <models/controller_dbo.h>
|
||||
#include <models/schedule_dbo.h>
|
||||
#include <config.h>
|
||||
#include <enums.h>
|
||||
#include "api_v1_controllers.h"
|
||||
|
||||
using namespace api::v1;
|
||||
|
@ -75,6 +76,7 @@ controllers::put_relays_one_by_id_and_num(const HttpRequestPtr &req,
|
|||
uuid_t controller_id;
|
||||
if(uuid_parse(controller_id_str.c_str(), controller_id))
|
||||
{
|
||||
LOG_DEBUG << "bad uuid";
|
||||
auto resp = HttpResponse::newHttpResponse();
|
||||
resp->setStatusCode(k400BadRequest);
|
||||
callback(resp);
|
||||
|
@ -82,6 +84,7 @@ controllers::put_relays_one_by_id_and_num(const HttpRequestPtr &req,
|
|||
}
|
||||
if(!relay_dbo::valid_num_for_controller(controller_id, relay_num))
|
||||
{
|
||||
LOG_DEBUG << "invalid num for controller";
|
||||
auto resp = HttpResponse::newHttpResponse();
|
||||
resp->setStatusCode(k400BadRequest);
|
||||
callback(resp);
|
||||
|
@ -90,8 +93,9 @@ controllers::put_relays_one_by_id_and_num(const HttpRequestPtr &req,
|
|||
|
||||
Json::Value body = *req->getJsonObject();
|
||||
uuid_t active_schedule_id;
|
||||
if(!schedule_dbo::parse_id(body["active_schedule"].asCString(), active_schedule_id))
|
||||
if(schedule_dbo::parse_id(body["active_schedule"].asCString(), active_schedule_id))
|
||||
{
|
||||
LOG_DEBUG << "bad active_schedule uuid";
|
||||
auto resp = HttpResponse::newHttpResponse();
|
||||
resp->setStatusCode(k400BadRequest);
|
||||
callback(resp);
|
||||
|
@ -134,13 +138,23 @@ controllers::put_relays_one_by_id_and_num(const HttpRequestPtr &req,
|
|||
auto schedules = schedule_dbo::get_by_simple("id", active_schedule_id, (intptr_t)&sqlite3_bind_blob, sizeof(uuid_t));
|
||||
auto controllers = controller_dbo::get_by_simple("id", controller_id, (intptr_t)&sqlite3_bind_blob, sizeof(uuid_t));
|
||||
|
||||
Json::Value payload;
|
||||
payload["target"] = relay_num;
|
||||
payload["schedule"] = schedules[0]->to_json();
|
||||
uint16_t *periods = schedules[0]->periods->to_blob();
|
||||
uint16_t periods_count = periods[0];
|
||||
binn *map = binn_map();
|
||||
|
||||
Json::StreamWriterBuilder json_writer;
|
||||
binn_map_set_uint8(map, COMMAND_MAPPING_CODE, config::command_code_set_schedule);
|
||||
binn_map_set_uint8(map, COMMAND_MAPPING_RELAY_NUM, relay_num);
|
||||
binn_map_set_blob(map, COMMAND_MAPPING_SCHEDULE_ID, schedules[0]->id, sizeof(uuid_t));
|
||||
binn_map_set_uint16(map, COMMAND_MAPPING_PERIODS_COUNT, periods_count);
|
||||
|
||||
controllers[0]->command(config::command_code_set_schedule, Json::writeString(json_writer, payload).c_str());
|
||||
// periods + 1 to skip length in periods[0]
|
||||
// periods_count * 2 because each uint16_t is a timestamp. 2 are start and end
|
||||
binn_map_set_blob(map, COMMAND_MAPPING_PERIODS_BLOB, periods + 1, sizeof(uint16_t) * periods_count * 2);
|
||||
|
||||
controllers[0]->command(map);
|
||||
|
||||
binn_free(map);
|
||||
free(periods);
|
||||
|
||||
auto resp = HttpResponse::newHttpJsonResponse(relay->to_json());
|
||||
callback(resp);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue