add: controller/..../relays endpoints

add: relay functions
remove: drivers
This commit is contained in:
Tobias Reisinger 2020-05-06 22:49:22 +02:00
parent f040cd8b21
commit 0edb16a2d5
15 changed files with 587 additions and 44 deletions

View file

@ -280,5 +280,4 @@ controller_get_all()
sqlite3_prepare_v2(global_database, "SELECT * FROM controllers;", -1, &stmt, NULL);
return controller_db_select(stmt);
}

View file

@ -71,6 +71,7 @@ relay_db_select_mapper(sqlite3_stmt *stmt)
int schedule_id = junction_relay_schedule_get_schedule_id(i, new_relay->id);
new_relay->schedules[i] = schedule_get_by_id_or_off(schedule_id);
}
relay_reload_active_schedule(new_relay);
return new_relay;
}
@ -165,10 +166,15 @@ relay_remove(relay_t *relay)
return rc != SQLITE_DONE;
}
void
relay_reload_active_schedule(relay_t *relay)
{
relay->active_schedule = relay->schedules[helper_get_weekday(time(NULL))];
}
void
relay_free(relay_t *relay)
{
schedule_free(relay->active_schedule);
for(int i = 0; i < 7; ++i)
{
schedule_free(relay->schedules[i]);
@ -189,11 +195,14 @@ relay_free_list(relay_t **relays)
cJSON*
relay_to_json(relay_t *relay)
{
relay_reload_active_schedule(relay);
cJSON *json = cJSON_CreateObject();
cJSON *json_number = cJSON_CreateNumber(relay->number);
if(json_number == NULL)
{
LOG_DEBUG("failed to make number\n");
cJSON_Delete(json);
return NULL;
}
@ -202,27 +211,41 @@ relay_to_json(relay_t *relay)
cJSON *json_name = cJSON_CreateString(relay->name);
if(json_name == NULL)
{
LOG_DEBUG("failed to make name\n");
cJSON_Delete(json);
return NULL;
}
cJSON_AddItemToObject(json, "name", json_name);
controller_t *controller = controller_get_by_id(relay->id);
controller_t *controller = controller_get_by_id(relay->controller_id);
if(!controller)
{
LOG_DEBUG("failed to get controller\n");
cJSON_Delete(json);
return NULL;
}
char uuid_str[UUID_STR_LEN];
uuid_unparse(controller->uid, uuid_str);
cJSON *json_id = cJSON_CreateString(uuid_str);
if(json_name == NULL)
cJSON *json_controller_id = cJSON_CreateString(uuid_str);
if(json_controller_id == NULL)
{
LOG_DEBUG("failed to make controller id\n");
cJSON_Delete(json);
return NULL;
}
cJSON_AddItemToObject(json, "id", json_id);
cJSON_AddItemToObject(json, "controller_id", json_controller_id);
controller_free(controller);
cJSON_AddItemToObject(json, "active_schedule", schedule_to_json(relay->active_schedule));
cJSON *json_schedules = cJSON_CreateArray();
for(int i = 0; i < 7; ++i)
{
cJSON_AddItemToArray(json_schedules, schedule_to_json(relay->schedules[i]));
}
cJSON_AddItemToObject(json, "schedules", json_schedules);
cJSON *json_tags = cJSON_CreateArray();
int *tags_ids = junction_tag_get_tags_for_relay_id(relay->id);
@ -295,12 +318,30 @@ relay_get_all()
return relay_db_select(stmt);
}
relay_t*
relay_get_for_controller(int controller_id, int relay_num)
{
sqlite3_stmt *stmt;
sqlite3_prepare_v2(global_database, "SELECT * FROM relays WHERE controller_id = ?1 AND number = ?2;", -1, &stmt, NULL);
sqlite3_bind_int(stmt, 1, controller_id);
sqlite3_bind_int(stmt, 2, relay_num);
relay_t **sql_result = relay_db_select(stmt);
relay_t *result = sql_result[0];
free(sql_result);
return result;
}
relay_t**
relay_get_by_controller_id(int controller_id)
{
sqlite3_stmt *stmt;
sqlite3_prepare_v2(global_database, "SELECT * FROM relays WHERE controller_id;", -1, &stmt, NULL);
sqlite3_prepare_v2(global_database, "SELECT * FROM relays WHERE controller_id = ?1;", -1, &stmt, NULL);
sqlite3_bind_int(stmt, 1, controller_id);
return relay_db_select(stmt);

View file

@ -347,6 +347,31 @@ schedule_get_by_id(int id)
return result;
}
schedule_t*
schedule_get_by_uid_or_off(uuid_t uid)
{
sqlite3_stmt *stmt;
sqlite3_prepare_v2(global_database, "SELECT * FROM schedules WHERE uid = ?1;", -1, &stmt, NULL);
sqlite3_bind_blob(stmt, 1, uid, sizeof(uuid_t), SQLITE_STATIC);
schedule_t **sql_result = schedule_db_select(stmt);
schedule_t *result = sql_result[0];
free(sql_result);
if(result)
{
return result;
}
uuid_t tmp_uuid;
memset(tmp_uuid, 0, sizeof(uuid_t));
memcpy(tmp_uuid, "off", 3);
return schedule_get_by_uid(tmp_uuid);
}
schedule_t*
schedule_get_by_uid(uuid_t uid)
{