add: tag post endpoint

This commit is contained in:
Tobias Reisinger 2020-08-11 23:33:04 +02:00
parent 7371c9a84e
commit 505faa6df2
4 changed files with 60 additions and 2 deletions

View file

@ -6,6 +6,9 @@
void
api_v1_tags_GET(struct mg_connection *nc, struct http_message *hm, endpoint_args_t *args, endpoint_response_t *response);
void
api_v1_tags_POST(struct mg_connection *nc, struct http_message *hm, endpoint_args_t *args, endpoint_response_t *response);
void
api_v1_tags_STR_GET(struct mg_connection *nc, struct http_message *hm, endpoint_args_t *args, endpoint_response_t *response);

View file

@ -33,3 +33,57 @@ api_v1_tags_GET(struct mg_connection *nc, struct http_message *hm, endpoint_args
cJSON_Delete(json);
free(all_tags);
}
void
api_v1_tags_POST(struct mg_connection *nc, struct http_message *hm, endpoint_args_t *args, endpoint_response_t *response)
{
(void)args;
(void)nc;
cJSON *json = cJSON_ParseWithLength(hm->body.p, hm->body.len);
if(json == NULL)
{
static const char content[] = "no valid json was supplied";
endpoint_response_text(response, 400, content, STRLEN(content));
return;
}
cJSON *json_tag = cJSON_GetObjectItemCaseSensitive(json, "tag");
if(!cJSON_IsString(json_tag) || (json_tag->valuestring == NULL))
{
LOGGER_DEBUG("no tag provided\n");
cJSON_Delete(json);
static const char content[] = "no tag provided";
endpoint_response_text(response, 400, content, STRLEN(content));
return;
}
if(tag_get_id(json_tag->valuestring))
{
LOGGER_DEBUG("tag existed already\n");
cJSON_Delete(json);
static const char content[] = "tag existed already";
endpoint_response_text(response, 400, content, STRLEN(content));
return;
}
if(tag_save(0, json_tag->valuestring))
{
LOGGER_DEBUG("tag could not be saved\n");
static const char content[] = "tag could not be saved";
endpoint_response_text(response, 500, content, STRLEN(content));
}
else
{
LOGGER_DEBUG("new tag saved\n");
endpoint_response_text(response, 201, json_tag->valuestring, 0);
}
cJSON_Delete(json);
return;
}

View file

@ -28,12 +28,12 @@ tag_save(int id, const char *tag)
if (rc != SQLITE_DONE)
{
LOGGER_ERR("error saving tag: %s\n", sqlite3_errmsg(global_database));
return false;
return 1;
}
sqlite3_finalize(stmt);
return 1;
return 0;
}
char*

View file

@ -86,6 +86,7 @@ router_init()
router_register_endpoint("/api/v1/relays/tag/{str}", HTTP_METHOD_GET, api_v1_relays_tag_STR_GET);
router_register_endpoint("/api/v1/tags/", HTTP_METHOD_GET, api_v1_tags_GET);
router_register_endpoint("/api/v1/tags/", HTTP_METHOD_POST, api_v1_tags_POST);
router_register_endpoint("/api/v1/tags/{str}", HTTP_METHOD_GET, api_v1_tags_STR_GET);
router_register_endpoint("/api/v1/tags/{str}", HTTP_METHOD_DELETE, api_v1_tags_STR_DELETE);