Adds an endpoint to add books
- Changed the release version for ISBN-lookup because it was out of date and broke a feature - Added an endpoint for adding books with robust error handling
This commit is contained in:
parent
ba8d911ddf
commit
00ac999983
@ -1,9 +1,10 @@
|
||||
#include <cinttypes>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "isbn-interaction.h"
|
||||
#include "csv.h"
|
||||
@ -14,6 +15,7 @@ std::string book_vec_to_json(std::vector<std::string> headers, std::vector<std::
|
||||
{
|
||||
int i;
|
||||
std::string out = "{";
|
||||
|
||||
for (i = 0; i < book.size(); i++) {
|
||||
out += "\"" + headers[i] + "\":";
|
||||
out += "\"" + book[i] + "\",";
|
||||
@ -30,6 +32,7 @@ std::string get_all_books()
|
||||
std::vector<std::string> book_vec;
|
||||
std::vector<std::string> header_vec;
|
||||
|
||||
|
||||
file.open(BOOK_FILENAME);
|
||||
|
||||
if (!file.good()) {
|
||||
@ -45,25 +48,42 @@ std::string get_all_books()
|
||||
total_lines = "{";
|
||||
while (std::getline(file, line)) {
|
||||
book_vec = get_csv_as_vector(line);
|
||||
|
||||
total_lines += book_vec_to_json(header_vec, book_vec) + ",";
|
||||
}
|
||||
|
||||
|
||||
return total_lines + "}";
|
||||
}
|
||||
|
||||
void add_new_book(std::string isbn)
|
||||
std::string add_new_book(std::string isbn)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
int exec_status;
|
||||
|
||||
std::string program_name = "./isbn";
|
||||
std::string write = "w";
|
||||
const char* args[] = {program_name.c_str(), isbn.c_str(), write.c_str()};
|
||||
char* args[] = {(char*) program_name.c_str(), (char*) isbn.c_str(), (char*) write.c_str(), NULL};
|
||||
|
||||
pid = fork();
|
||||
if (0 == pid) { //
|
||||
// this is the child
|
||||
}
|
||||
if (0 == pid) {
|
||||
execvp(args[0], args);
|
||||
exit(EXIT_SUCCESS);
|
||||
} else if (pid < 0) {
|
||||
perror("Adding book, failed to fork");
|
||||
return "Book lookup failed!";
|
||||
} else {
|
||||
wait(&exec_status);
|
||||
|
||||
//TODO execvp the args blah blah
|
||||
if (!WIFEXITED(exec_status)) {
|
||||
perror("ISBN exited unexpectedly!");
|
||||
return "Book lookup failed!";
|
||||
}
|
||||
|
||||
if (0 != WEXITSTATUS(exec_status)) {
|
||||
return "Invalid ISBN submitted!";
|
||||
}
|
||||
|
||||
return "Book added successfully!";
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,6 @@ std::string book_vec_to_json(std::vector<std::string> headers, std::vector<std::
|
||||
*/
|
||||
std::string get_all_books();
|
||||
|
||||
void add_new_book(std::string isbn);
|
||||
std::string add_new_book(std::string isbn);
|
||||
|
||||
#endif
|
||||
|
11
api/main.cpp
11
api/main.cpp
@ -1,8 +1,8 @@
|
||||
#include <crow.h>
|
||||
#include <crow/app.h>
|
||||
|
||||
#include <fstream>
|
||||
|
||||
|
||||
#include "csv.h"
|
||||
#include "isbn-interaction.h"
|
||||
|
||||
@ -23,6 +23,15 @@ int main()
|
||||
return crow::response(get_all_books());
|
||||
});
|
||||
|
||||
CROW_ROUTE(app, "/add/<string>")
|
||||
([](std::string isbn)
|
||||
{
|
||||
return crow::response(add_new_book(isbn));
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
app.port(18080).run();
|
||||
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ make
|
||||
|
||||
cd bin/
|
||||
|
||||
wget https://github.com/SuperNovaa41/isbn-lookup/releases/download/release/isbn
|
||||
wget https://github.com/SuperNovaa41/isbn-lookup/releases/download/0.0.2/isbn
|
||||
chmod +x isbn
|
||||
|
||||
cd ..
|
||||
|
Loading…
x
Reference in New Issue
Block a user