feat(http-delete): adjust HTTP DELETE request

This commit is contained in:
dancingCycle 2023-04-04 11:05:29 +02:00
parent e1832cd0f3
commit 150c55dd5a
1 changed files with 49 additions and 40 deletions

View File

@ -324,8 +324,10 @@ int callback_get_entity (const struct _u_request * request, struct _u_response *
(void)(user_data); (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*/ /*clean up remainings*/
free(url_params); free(url_params);
free(response_body); free(response_body);
@ -401,17 +403,20 @@ int callback_get_entities (const struct _u_request * request, struct _u_response
return U_CALLBACK_CONTINUE; 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*/ /*declarations*/
int res; int res;
PGresult *pqRes; PGresult *pqRes;
char *prepStmEntities; char *prepStmEntities;
int len;
int nbRecords;
printf("query_db() Started...\n");
/*define prepared statement*/ /*define prepared statement*/
len=snprintf(NULL,0,query,value); len=snprintf(NULL,0,*queryStr,*valueStr);
prepStmEntities=malloc((size_t)(len+1)); prepStmEntities=malloc((size_t)(len+1));
//TODO Release prepStmEntities! //TODO Release prepStmEntities!
snprintf(prepStmEntities,(size_t)(len+1),query,value); snprintf(prepStmEntities,(size_t)(len+1),*queryStr,*valueStr);
printf("delete_entity() prepStmEntities: %s\n",prepStmEntities); //printf("query_db() prepStmEntities: %s\n",prepStmEntities);
/*create prepared statement*/ /*create prepared statement*/
/*conn:connection*/ /*conn:connection*/
/*stm:statement*/ /*stm:statement*/
@ -422,21 +427,22 @@ int delete_entity (const PGconn * conn,const char * query,const char *value;){
/*NULL:relevant for binary parameters*/ /*NULL:relevant for binary parameters*/
/*0:obtain result in text format*/ /*0:obtain result in text format*/
//TODO How to pass params? //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) { if(PQresultStatus(pqRes) != PGRES_TUPLES_OK) {
/*handle error*/ /*handle error*/
printf("delete_entity() No data retrieved\n"); printf("query_db() No data retrieved\n");
/*clean up result*/ /*clean up result*/
PQclear(pqRes); PQclear(pqRes);
res=1; res=1;
}else{ }else{
/*evaluate result*/ /*evaluate result*/
nbRecords = PQntuples(pqRes); nbRecords = PQntuples(pqRes);
printf("callback_delete_entity() nbRecords: %d\n",nbRecords); //printf("query_db() nbRecords: %d\n",nbRecords);
/*clean up result*/ /*clean up result*/
PQclear(pqRes); PQclear(pqRes);
res=0; res=0;
} }
printf("query_db() Done.\n");
return res; 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) { int callback_delete_entity (const struct _u_request * request, struct _u_response * response, void * user_data) {
/*declarations*/ /*declarations*/
char *url_params;
char *response_body;
int r; int r;
//TODO Does this mem need to be deallocated?
const char **keys; const char **keys;
//TODO Does this mem need to be deallocated?
const char *value; 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"); 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){ if(request->map_url != NULL){
keys=u_map_enum_keys(request->map_url); 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!"); ulfius_set_string_body_response(response, 500, "This is the /entity/:id/delete route: Param error!");
}else{ }else{
value = u_map_get(request->map_url, keys[0]); 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 entity
const char * queryFromEntity="DELETE FROM relations WHERE from_entity=%s RETURNING *;";
//TODO delete from relation int delRes=query_db((PGconn *)user_data,&queryFromEntity,&value);
int delRes=delete_entity (conn,"DELETE FROM relations WHERE from_entity=1 RETURNING *;");
if(delRes!=0){ if(delRes!=0){
//TODO Why this casting? //TODO Why this casting?
(void)(request); (void)(request);
(void)(user_data); (void)(user_data);
ulfius_set_string_body_response(response, 500, "This is the /entity/:id/delete route: Dba from_entity error!"); 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*/ /*clean up remainings*/
free(url_params);
free(response_body);
printf("callback_delete_entity() Done.\n"); printf("callback_delete_entity() Done.\n");
return U_CALLBACK_CONTINUE; return U_CALLBACK_CONTINUE;
}; };