Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update example.cpp #13

Open
wants to merge 1 commit into
base: alexandria
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
175 changes: 86 additions & 89 deletions frontend/example.cpp
Original file line number Diff line number Diff line change
@@ -1,94 +1,53 @@
//include c++

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <thread> // Inclua a biblioteca thread


//include crow c++
#include <crow.h>
#include <fstream>
#include <cstdlib>
#include <vector>
#include <boost/filesystem.hpp>
#include <streambuf>
#include <nlohmann/json.hpp>

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<char>(t)), std::istreambuf_iterator<char>());

// Retorna o conteúdo do arquivo HTML como uma resposta HTTP com o tipo de conteúdo correto
return crow::response(html);
});
#include <sqlite3.h>


//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<char>(t)), std::istreambuf_iterator<char>());
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<char>(t)), std::istreambuf_iterator<char>());
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<char>(t)), std::istreambuf_iterator<char>());
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");
Expand All @@ -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<char>(t)), std::istreambuf_iterator<char>());

// 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;
}
}

// 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 = "<html><body><h1>Livros disponíveis:</h1><ul>";
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<const char*>(titulo));
livro["autor"] = std::string(reinterpret_cast<const char*>(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();
}