add: controller/..../relays endpoints
add: relay functions remove: drivers
This commit is contained in:
parent
f040cd8b21
commit
0edb16a2d5
15 changed files with 587 additions and 44 deletions
|
@ -280,5 +280,4 @@ controller_get_all()
|
|||
sqlite3_prepare_v2(global_database, "SELECT * FROM controllers;", -1, &stmt, NULL);
|
||||
|
||||
return controller_db_select(stmt);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue