From 61fc0bf79d3941dba6ddd130f2bafd75fa63efea Mon Sep 17 00:00:00 2001 From: Victoria-Reiss <128434811+Victoria-Reiss@users.noreply.github.com> Date: Mon, 10 Jul 2023 23:01:58 -0300 Subject: [PATCH] Update example.cpp --- frontend/example.cpp | 175 +++++++++++++++++++++---------------------- 1 file changed, 86 insertions(+), 89 deletions(-) diff --git a/frontend/example.cpp b/frontend/example.cpp index 17ca5a0..05f4807 100644 --- a/frontend/example.cpp +++ b/frontend/example.cpp @@ -1,94 +1,53 @@ +//include c++ + #include -#include +#include #include +#include // Inclua a biblioteca thread + + +//include crow c++ #include +#include #include -#include #include #include +#include -int main() { - crow::SimpleApp app; +//include acesso ao banco de dados - // Rota para servir o arquivo HTML - CROW_ROUTE(app, "/") - .name("index") - ([]() { - // Abre o arquivo HTML - std::ifstream t("routes/index.html"); - if (!t.is_open()) { - // Se ocorrer algum erro ao abrir o arquivo, retorne uma resposta de erro - return crow::response(500, "Erro ao abrir o arquivo HTML"); - } - - // Lê o conteúdo do arquivo HTML em uma string - std::string html((std::istreambuf_iterator(t)), std::istreambuf_iterator()); - - // Retorna o conteúdo do arquivo HTML como uma resposta HTTP com o tipo de conteúdo correto - return crow::response(html); - }); +#include - //conteúdo url sobre o projeto - CROW_ROUTE(app,"/sobre") - .name("sobre") - ([]{ - // Abre o arquivo HTML - std::ifstream t("routes/sobre.html"); - if (!t.is_open()) { - // Se ocorrer algum erro ao abrir o arquivo, retorne uma resposta de erro - return crow::response(500, "Erro ao abrir o arquivo livro HTML"); - } +// Protótipo da função getLivros +void getLivros(const crow::request& req, crow::response& res); - // Lê o conteúdo do arquivo HTML em uma string - std::string html((std::istreambuf_iterator(t)), std::istreambuf_iterator()); +int main() { + crow::SimpleApp app; - // Retorna o conteúdo do arquivo HTML como uma resposta HTTP com o tipo de conteúdo correto - return crow::response(html); - }); + //abrir db + int sqlite3_close(sqlite3*); - //conteúdo url de ação - CROW_ROUTE(app,"/categoria/acao") - .name("categoria/acao") - ([]{ - // Abre o arquivo HTML - std::ifstream t("routes/pag_acao.html"); - if (!t.is_open()) { - // Se ocorrer algum erro ao abrir o arquivo, retorne uma resposta de erro - return crow::response(500, "Erro ao abrir o arquivo livro HTML"); - } + const char *sqlite3_errmsg(sqlite3*); - // Lê o conteúdo do arquivo HTML em uma string - std::string html((std::istreambuf_iterator(t)), std::istreambuf_iterator()); + sqlite3 *db; + int rc = sqlite3_open("20231-team-3/data/db_bbt.db", &db); - // Retorna o conteúdo do arquivo HTML como uma resposta HTTP com o tipo de conteúdo correto - return crow::response(html); - }); + if (rc) { + std::cerr << "Erro ao abrir o banco de dados: " << sqlite3_errmsg(db) << std::endl; + return 1; + } - //conteúdo url de livros - CROW_ROUTE(app, "/livros") - .name("livros") - ([]() { - // Abre o arquivo HTML - std::ifstream t("routes/pag_livro.html"); - if (!t.is_open()) { - // Se ocorrer algum erro ao abrir o arquivo, retorne uma resposta de erro - return crow::response(500, "Erro ao abrir o arquivo livro HTML"); - } + std::cout << "Banco de dados aberto com sucesso!" << std::endl; - // Lê o conteúdo do arquivo HTML em uma string - std::string html((std::istreambuf_iterator(t)), std::istreambuf_iterator()); + sqlite3_close(db); - // Retorna o conteúdo do arquivo HTML como uma resposta HTTP com o tipo de conteúdo correto - return crow::response(html); - }); - - - CROW_ROUTE(app, "/categoria/romance") - .name("categoria/romance") + // Rota para servir o arquivo HTML + CROW_ROUTE(app, "/") + .name("index") ([]() { // Abre o arquivo HTML - std::ifstream t("routes/pag_romance.html"); + std::ifstream t("index.html"); if (!t.is_open()) { // Se ocorrer algum erro ao abrir o arquivo, retorne uma resposta de erro return crow::response(500, "Erro ao abrir o arquivo HTML"); @@ -101,25 +60,63 @@ int main() { return crow::response(html); }); - CROW_ROUTE(app, "/categoria/suspense") - .name("categoria/suspense") - ([]() { - // Abre o arquivo HTML - std::ifstream t("routes/pag_suspense.html"); - if (!t.is_open()) { - // Se ocorrer algum erro ao abrir o arquivo, retorne uma resposta de erro - return crow::response(500, "Erro ao abrir o arquivo HTML"); - } - - // Lê o conteúdo do arquivo HTML em uma string - std::string html((std::istreambuf_iterator(t)), std::istreambuf_iterator()); - - // Retorna o conteúdo do arquivo HTML como uma resposta HTTP com o tipo de conteúdo correto - return crow::response(html); - }); + // Rota para listar os livros + CROW_ROUTE(app, "/api/livros") + .name("api-livros") + .methods("GET"_method) + (getLivros); - app.port(18080).multithreaded().run(); + app.bindaddr("0.0.0.0").port(8080).multithreaded().run(); return 0; -} \ No newline at end of file +} + +// Função para acessar o banco de dados e recuperar os livros +void getLivros(const crow::request& req, crow::response& res) { + sqlite3* db; + int rc = sqlite3_open("db_bbt.db", &db); + if (rc != SQLITE_OK) { + std::cerr << "Erro ao abrir o banco de dados: " << sqlite3_errmsg(db) << std::endl; + sqlite3_close(db); + res.code = 500; + res.end(); + return; + } + + sqlite3_stmt* stmt = nullptr; + + rc = sqlite3_prepare_v2(db, "SELECT * FROM livros;", -1, &stmt, nullptr); + if (rc != SQLITE_OK) { + std::cerr << "Erro ao preparar a consulta: " << sqlite3_errmsg(db) << std::endl; + sqlite3_finalize(stmt); + sqlite3_close(db); + res.code = 500; + res.end(); + return; + } + + std::string response = "

Livros disponíveis:

    "; + nlohmann::json responseJson = nlohmann::json::array(); + + while (sqlite3_step(stmt) == SQLITE_ROW) { + int id = sqlite3_column_int(stmt, 0); + const unsigned char* titulo = sqlite3_column_text(stmt, 1); + const unsigned char* autor = sqlite3_column_text(stmt, 2); + + nlohmann::json livro; + livro["id"] = id; + livro["titulo"] = std::string(reinterpret_cast(titulo)); + livro["autor"] = std::string(reinterpret_cast(autor)); + + responseJson.push_back(livro); + } + + sqlite3_finalize(stmt); + sqlite3_close(db); + + res.code = 200; + res.set_header("Content-Type", "application/json"); + res.write(responseJson.dump()); + res.end(); +}