feat(relations): add *distances* endpoint
This commit is contained in:
parent
009f6d28ed
commit
82756d0ecf
|
@ -27,6 +27,8 @@ curl -X POST --data "name=Hi from curl!" http://<host>:<port>/entities/create
|
||||||
* read all
|
* read all
|
||||||
```
|
```
|
||||||
curl -X GET http://<host>:<port>/entities/info
|
curl -X GET http://<host>:<port>/entities/info
|
||||||
|
curl -X GET http://<host>:<port>/relations/info
|
||||||
|
curl -X GET http://<host>:<port>/distances/info
|
||||||
```
|
```
|
||||||
|
|
||||||
* read single
|
* read single
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
cfg-sib00_rgncycle.txt
|
cfg-sib00_rgncycle.txt
|
||||||
|
*.o
|
||||||
|
main
|
|
@ -25,24 +25,32 @@
|
||||||
#define ROUTE_HELLO "/hello"
|
#define ROUTE_HELLO "/hello"
|
||||||
#define ROUTE_ENTITIES "/entities"
|
#define ROUTE_ENTITIES "/entities"
|
||||||
#define ROUTE_RELATIONS "/relations"
|
#define ROUTE_RELATIONS "/relations"
|
||||||
|
#define ROUTE_DISTANCES "/distances"
|
||||||
|
|
||||||
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
|
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* callback functions declaration
|
* callback functions declaration
|
||||||
*/
|
*/
|
||||||
|
/* callback for Test*/
|
||||||
int callback_get_hello (const struct _u_request * request, struct _u_response * response, void * user_data);
|
int callback_get_hello (const struct _u_request * request, struct _u_response * response, void * user_data);
|
||||||
|
|
||||||
|
/* callback for Root*/
|
||||||
int callback_default (const struct _u_request * request, struct _u_response * response, void * user_data);
|
int callback_default (const struct _u_request * request, struct _u_response * response, void * user_data);
|
||||||
|
|
||||||
/* callback for Entities*/
|
/* callback for Entities*/
|
||||||
int callback_create_entity (const struct _u_request * request, struct _u_response * response, void * user_data);
|
int callback_create_entity (const struct _u_request * request, struct _u_response * response, void * user_data);
|
||||||
int callback_get_entities (const struct _u_request * request, struct _u_response * response, void * user_data);
|
int callback_get_entities (const struct _u_request * request, struct _u_response * response, void * user_data);
|
||||||
int callback_get_entity (const struct _u_request * request, struct _u_response * response, void * user_data);
|
int callback_get_entity (const struct _u_request * request, struct _u_response * response, void * user_data);
|
||||||
int callback_update_entity (const struct _u_request * request, struct _u_response * response, void * user_data);
|
int callback_update_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);
|
int callback_delete_entity (const struct _u_request * request, struct _u_response * response, void * user_data);
|
||||||
|
|
||||||
/* callback for Relations*/
|
/* callback for Relations*/
|
||||||
int callback_get_relations (const struct _u_request * request, struct _u_response * response, void * user_data);
|
int callback_get_relations (const struct _u_request * request, struct _u_response * response, void * user_data);
|
||||||
|
|
||||||
|
/* callback for Distances*/
|
||||||
|
int callback_get_distances (const struct _u_request * request, struct _u_response * response, void * user_data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* decode a u_map into a string
|
* decode a u_map into a string
|
||||||
*/
|
*/
|
||||||
|
@ -193,6 +201,9 @@ int main(int argc, char *argv[]) {
|
||||||
/* callbacks for Relations*/
|
/* callbacks for Relations*/
|
||||||
ulfius_add_endpoint_by_val(&instance, "GET", ROUTE_RELATIONS, "/info", 0, &callback_get_relations, (void *)conn);
|
ulfius_add_endpoint_by_val(&instance, "GET", ROUTE_RELATIONS, "/info", 0, &callback_get_relations, (void *)conn);
|
||||||
|
|
||||||
|
/* callbacks for Distances*/
|
||||||
|
ulfius_add_endpoint_by_val(&instance, "GET", ROUTE_DISTANCES, "/info", 0, &callback_get_distances, (void *)conn);
|
||||||
|
|
||||||
// default_endpoint declaration
|
// default_endpoint declaration
|
||||||
ulfius_set_default_endpoint(&instance, &callback_default, NULL);
|
ulfius_set_default_endpoint(&instance, &callback_default, NULL);
|
||||||
|
|
||||||
|
@ -279,10 +290,10 @@ int callback_get_entity (const struct _u_request * request, struct _u_response *
|
||||||
conn = (PGconn *)user_data;
|
conn = (PGconn *)user_data;
|
||||||
|
|
||||||
/*define prepared statement*/
|
/*define prepared statement*/
|
||||||
len=snprintf(NULL,0,"SELECT * FROM entities WHERE entity_id=%s;",value);
|
len=snprintf(NULL,0,"SELECT * FROM tbl_entities WHERE entity_id=%s;",value);
|
||||||
prepStmEntities=malloc((size_t)(len+1));
|
prepStmEntities=malloc((size_t)(len+1));
|
||||||
//TODO Release prepStmEntities!
|
//TODO Release prepStmEntities!
|
||||||
snprintf(prepStmEntities,(size_t)(len+1),"SELECT * FROM entities WHERE entity_id=%s;",value);
|
snprintf(prepStmEntities,(size_t)(len+1),"SELECT * FROM tbl_entities WHERE entity_id=%s;",value);
|
||||||
//printf("callback_get_entity() prepStmEntities: %s\n",prepStmEntities);
|
//printf("callback_get_entity() prepStmEntities: %s\n",prepStmEntities);
|
||||||
|
|
||||||
//lock PGconn mutex
|
//lock PGconn mutex
|
||||||
|
@ -340,7 +351,7 @@ int callback_get_entity (const struct _u_request * request, struct _u_response *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
printf("callback_delete_entity() HTTP GET request error!\n");
|
printf("callback_get_entity() HTTP GET request error!\n");
|
||||||
ulfius_set_string_body_response(response, 400, "This is the /entity/:id/info route: HTTP GET request error!");
|
ulfius_set_string_body_response(response, 400, "This is the /entity/:id/info route: HTTP GET request error!");
|
||||||
}
|
}
|
||||||
/*clean up remainings*/
|
/*clean up remainings*/
|
||||||
|
@ -363,7 +374,7 @@ int callback_get_entities (const struct _u_request * request, struct _u_response
|
||||||
conn = (PGconn *)user_data;
|
conn = (PGconn *)user_data;
|
||||||
|
|
||||||
/*define prepared statement*/
|
/*define prepared statement*/
|
||||||
prepStmEntities = "SELECT * FROM entities;";
|
prepStmEntities = "SELECT * FROM tbl_entities;";
|
||||||
|
|
||||||
//lock PGconn mutex
|
//lock PGconn mutex
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
|
@ -436,7 +447,7 @@ int callback_get_relations (const struct _u_request * request, struct _u_respons
|
||||||
conn = (PGconn *)user_data;
|
conn = (PGconn *)user_data;
|
||||||
|
|
||||||
/*define prepared statement*/
|
/*define prepared statement*/
|
||||||
prepStmEntities = "SELECT * FROM relations;";
|
prepStmEntities = "SELECT * FROM tbl_relations;";
|
||||||
|
|
||||||
//lock PGconn mutex
|
//lock PGconn mutex
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
|
@ -486,6 +497,71 @@ int callback_get_relations (const struct _u_request * request, struct _u_respons
|
||||||
return U_CALLBACK_CONTINUE;
|
return U_CALLBACK_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback function to reply all distances
|
||||||
|
*/
|
||||||
|
int callback_get_distances (const struct _u_request * request, struct _u_response * response, void * user_data) {
|
||||||
|
/*declarations*/
|
||||||
|
PGconn *conn;
|
||||||
|
char *prepStmEntities;
|
||||||
|
PGresult *pqRes;
|
||||||
|
int nbRecords,nbFields;
|
||||||
|
json_t *arrayRecords, *arrayFields, *stringField;
|
||||||
|
|
||||||
|
printf("callback_get_distances() Started...\n");
|
||||||
|
conn = (PGconn *)user_data;
|
||||||
|
|
||||||
|
/*define prepared statement*/
|
||||||
|
prepStmEntities = "SELECT * FROM tbl_distances;";
|
||||||
|
|
||||||
|
//lock PGconn mutex
|
||||||
|
pthread_mutex_lock(&mutex);
|
||||||
|
|
||||||
|
/*create prepared statement*/
|
||||||
|
pqRes = PQexecParams(conn, prepStmEntities, 0, NULL, NULL, NULL, NULL, 0);
|
||||||
|
|
||||||
|
//unlock PGconn mutex
|
||||||
|
pthread_mutex_unlock(&mutex);
|
||||||
|
|
||||||
|
if (PQresultStatus(pqRes) != PGRES_TUPLES_OK) {
|
||||||
|
printf("callback_get_distances() No data retrieved\n");
|
||||||
|
/*clean up result*/
|
||||||
|
PQclear(pqRes);
|
||||||
|
//TODO Why this casting?
|
||||||
|
(void)(request);
|
||||||
|
(void)(user_data);
|
||||||
|
ulfius_set_string_body_response(response, 500, "This is the /distances route: Dba error!");
|
||||||
|
printf("callback_get_distances() Done.\n");
|
||||||
|
return U_CALLBACK_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*evaluate result*/
|
||||||
|
nbRecords = PQntuples(pqRes);
|
||||||
|
nbFields = PQnfields(pqRes);
|
||||||
|
arrayRecords=json_array();
|
||||||
|
for(int i=0;i<nbRecords;i++){
|
||||||
|
arrayFields=json_array();
|
||||||
|
for(int j=0;j<nbFields;j++){
|
||||||
|
stringField = json_string(PQgetvalue(pqRes,i,j));
|
||||||
|
json_array_append(arrayFields, stringField);
|
||||||
|
json_decref(stringField);
|
||||||
|
}
|
||||||
|
json_array_append(arrayRecords, arrayFields);
|
||||||
|
json_decref(arrayFields);
|
||||||
|
}
|
||||||
|
/*clean up result*/
|
||||||
|
PQclear(pqRes);
|
||||||
|
/*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);
|
||||||
|
printf("callback_get_distances() Done.\n");
|
||||||
|
return U_CALLBACK_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
int query_db (const PGconn * conn, const char ** queryStr, const char ** valueStr){
|
int query_db (const PGconn * conn, const char ** queryStr, const char ** valueStr){
|
||||||
/*declarations*/
|
/*declarations*/
|
||||||
int res;
|
int res;
|
||||||
|
@ -564,7 +640,7 @@ int callback_delete_entity (const struct _u_request * request, struct _u_respons
|
||||||
//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);
|
||||||
|
|
||||||
//TODO delete entity
|
//TODO delete entity
|
||||||
const char * queryEntities="DELETE FROM entities WHERE entity_id=%s RETURNING *;";
|
const char * queryEntities="DELETE FROM tbl_entities WHERE entity_id=%s RETURNING *;";
|
||||||
int delRes=query_db((PGconn *)user_data,&queryEntities,&value);
|
int delRes=query_db((PGconn *)user_data,&queryEntities,&value);
|
||||||
if(delRes!=0){
|
if(delRes!=0){
|
||||||
//TODO Why this casting?
|
//TODO Why this casting?
|
||||||
|
|
Loading…
Reference in New Issue