add: cache (WIP)

This commit is contained in:
Tobias Reisinger 2020-08-13 16:29:26 +02:00
parent f167f9caec
commit 6d37bd9734
26 changed files with 365 additions and 61 deletions
src/models

View file

@ -2,6 +2,7 @@
#include <string.h>
#include <sqlite3.h>
#include <cache.h>
#include <cJSON.h>
#include <logger.h>
#include <database.h>
@ -161,7 +162,9 @@ relay_save(relay_t *relay)
junction_relay_schedule_insert(i, relay->id, relay->schedules[i]->id);
}
cache_invalidate_relay(relay->id);
status_reload_entry(relay->id);
return result;
}
@ -193,9 +196,15 @@ relay_free_list(relay_t **relays)
free(relays);
}
cJSON*
char*
relay_to_json(relay_t *relay)
{
char *cached = cache_get_json_relay(relay->id);
if(cached)
{
return cached;
}
controller_t *controller = controller_get_by_id(relay->controller_id);
if(!controller)
{
@ -255,12 +264,14 @@ relay_to_json(relay_t *relay)
}
cJSON_AddItemToObject(json, "is_on", json_is_on);
cJSON_AddItemToObject(json, "active_schedule", schedule_to_json(relay->active_schedule));
cJSON *json_active_schedule = cJSON_CreateRaw(schedule_to_json(relay->active_schedule));
cJSON_AddItemToObject(json, "active_schedule", json_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 *json_schedule = cJSON_CreateRaw(schedule_to_json(relay->schedules[i]));
cJSON_AddItemToArray(json_schedules, json_schedule);
}
cJSON_AddItemToObject(json, "schedules", json_schedules);
@ -290,20 +301,27 @@ relay_to_json(relay_t *relay)
}
cJSON_AddItemToObject(json, "tags", json_tags);
return json;
char *result = cJSON_Print(json);
cJSON_Delete(json);
cache_put_json_relay(relay->id, result);
return result;
}
cJSON*
char*
relay_list_to_json(relay_t **relays)
{
cJSON *json = cJSON_CreateArray();
for(int i = 0; relays[i] != NULL; ++i)
{
cJSON *json_relay = relay_to_json(relays[i]);
cJSON *json_relay = cJSON_CreateRaw(relay_to_json(relays[i]));
cJSON_AddItemToArray(json, json_relay);
}
return json;
char *result = cJSON_Print(json);
cJSON_Delete(json);
return result;
}
relay_t*