From 150c55dd5af166fe55e8ce291aa80919f884511b Mon Sep 17 00:00:00 2001 From: "Begerad, Stefan" Date: Tue, 4 Apr 2023 11:05:29 +0200 Subject: [PATCH] feat(http-delete): adjust HTTP DELETE request --- http-delete/main.c | 89 +++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/http-delete/main.c b/http-delete/main.c index 5d51b7c..e8033f9 100644 --- a/http-delete/main.c +++ b/http-delete/main.c @@ -324,8 +324,10 @@ int callback_get_entity (const struct _u_request * request, struct _u_response * (void)(user_data); } } + }else{ + printf("callback_delete_entity() HTTP GET request error!\n"); + ulfius_set_string_body_response(response, 400, "This is the /entity/:id/info route: HTTP GET request error!"); } - /*clean up remainings*/ free(url_params); free(response_body); @@ -401,17 +403,20 @@ int callback_get_entities (const struct _u_request * request, struct _u_response return U_CALLBACK_CONTINUE; } -int delete_entity (const PGconn * conn,const char * query,const char *value;){ +int query_db (const PGconn * conn, const char ** queryStr, const char ** valueStr){ /*declarations*/ int res; PGresult *pqRes; char *prepStmEntities; + int len; + int nbRecords; + printf("query_db() Started...\n"); /*define prepared statement*/ - len=snprintf(NULL,0,query,value); + len=snprintf(NULL,0,*queryStr,*valueStr); prepStmEntities=malloc((size_t)(len+1)); //TODO Release prepStmEntities! - snprintf(prepStmEntities,(size_t)(len+1),query,value); - printf("delete_entity() prepStmEntities: %s\n",prepStmEntities); + snprintf(prepStmEntities,(size_t)(len+1),*queryStr,*valueStr); + //printf("query_db() prepStmEntities: %s\n",prepStmEntities); /*create prepared statement*/ /*conn:connection*/ /*stm:statement*/ @@ -422,21 +427,22 @@ int delete_entity (const PGconn * conn,const char * query,const char *value;){ /*NULL:relevant for binary parameters*/ /*0:obtain result in text format*/ //TODO How to pass params? - pqRes = PQexecParams(conn, prepStmEntities, 0, NULL, NULL, NULL, NULL, 0); + pqRes = PQexecParams((PGconn *)conn, prepStmEntities, 0, NULL, NULL, NULL, NULL, 0); if(PQresultStatus(pqRes) != PGRES_TUPLES_OK) { /*handle error*/ - printf("delete_entity() No data retrieved\n"); + printf("query_db() No data retrieved\n"); /*clean up result*/ PQclear(pqRes); res=1; }else{ /*evaluate result*/ nbRecords = PQntuples(pqRes); - printf("callback_delete_entity() nbRecords: %d\n",nbRecords); + //printf("query_db() nbRecords: %d\n",nbRecords); /*clean up result*/ PQclear(pqRes); res=0; } + printf("query_db() Done.\n"); return res; }; @@ -445,25 +451,13 @@ int delete_entity (const PGconn * conn,const char * query,const char *value;){ */ int callback_delete_entity (const struct _u_request * request, struct _u_response * response, void * user_data) { /*declarations*/ - char *url_params; - char *response_body; int r; + //TODO Does this mem need to be deallocated? const char **keys; + //TODO Does this mem need to be deallocated? const char *value; - char *line; - int len; - int i; - PGconn *conn; - int nbRecords,nbFields; - json_t *arrayRecords, *arrayFields, *stringField; printf("callback_delete_entity() Started...\n"); - url_params = print_map(request->map_url); - r=asprintf( - &response_body, - "parameters from the url are \n%s\n\n", - url_params); - //printf("callback_delete_entity() %d characters generated\n",r); if(request->map_url != NULL){ keys=u_map_enum_keys(request->map_url); @@ -476,34 +470,49 @@ int callback_delete_entity (const struct _u_request * request, struct _u_respons ulfius_set_string_body_response(response, 500, "This is the /entity/:id/delete route: Param error!"); }else{ value = u_map_get(request->map_url, keys[0]); - printf("callback_delete_entity() key is %s, value is %s\n", keys[0], value); + //printf("callback_delete_entity() key is %s, value is %s\n", keys[0], value); - conn = (PGconn *)user_data; - - //TODO delete from relation - int delRes=delete_entity (conn,"DELETE FROM relations WHERE from_entity=1 RETURNING *;"); + //TODO delete from entity + const char * queryFromEntity="DELETE FROM relations WHERE from_entity=%s RETURNING *;"; + int delRes=query_db((PGconn *)user_data,&queryFromEntity,&value); if(delRes!=0){ //TODO Why this casting? (void)(request); (void)(user_data); ulfius_set_string_body_response(response, 500, "This is the /entity/:id/delete route: Dba from_entity error!"); + }else{ + //TODO delete to entity + const char * queryToEntity="DELETE FROM relations WHERE to_entity=%s RETURNING *;"; + delRes=query_db((PGconn *)user_data,&queryToEntity,&value); + if(delRes!=0){ + //TODO Why this casting? + (void)(request); + (void)(user_data); + ulfius_set_string_body_response(response, 500, "This is the /entity/:id/delete route: Dba to_entity error!"); + }else{ + //TODO delete entity + const char * queryEntities="DELETE FROM entities WHERE id=%s RETURNING *;"; + delRes=query_db((PGconn *)user_data,&queryEntities,&value); + if(delRes!=0){ + //TODO Why this casting? + (void)(request); + (void)(user_data); + ulfius_set_string_body_response(response, 500, "This is the /entity/:id/delete route: Dba entity error!"); + }else{ + //printf("callback_delete_entity() Juhu! Everything deleted!\n"); + //TODO Why this casting? + (void)(request); + (void)(user_data); + ulfius_set_string_body_response(response, 200, "Done.\n"); + } + } } - //TODO delete to relation - delRes=delete_entity (conn,"DELETE FROM relations WHERE to_entity=1 RETURNING *;"); - //TODO delete entity - delRes=delete_entity (conn,"DELETE FROM entities WHERE id=1 RETURNING *;"); - /*set response body*/ - ulfius_set_json_body_response(response, 200, arrayRecords); - /*clean up JSON*/ - json_decref(arrayRecords); - //TODO Why this casting? - (void)(request); - (void)(user_data); } + }else{ + printf("callback_delete_entity() HTTP DELETE request error!\n"); + ulfius_set_string_body_response(response, 400, "This is the /entity/:id/delete route: HTTP DELETE request error!"); } /*clean up remainings*/ - free(url_params); - free(response_body); printf("callback_delete_entity() Done.\n"); return U_CALLBACK_CONTINUE; };