Spike : QHttpServer + QtSql fonctionnels sur CM5 (routes /ping et /test-db)
This commit is contained in:
+13
@@ -0,0 +1,13 @@
|
||||
build/
|
||||
CMakeFiles/
|
||||
CMakeCache.txt
|
||||
cmake_install.cmake
|
||||
Makefile
|
||||
Testing/
|
||||
.qt/
|
||||
.qtc_clangd/
|
||||
.qtcreator/
|
||||
*.o
|
||||
*.obj
|
||||
*.autosave
|
||||
*~
|
||||
@@ -0,0 +1,22 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(shipheart_api LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core HttpServer Sql)
|
||||
|
||||
add_executable(shipheart_api
|
||||
main.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(shipheart_api PRIVATE
|
||||
Qt6::Core
|
||||
Qt6::HttpServer
|
||||
Qt6::Sql
|
||||
)
|
||||
|
||||
install(TARGETS shipheart_api
|
||||
DESTINATION /home/koriolan/shipheart/versions/current
|
||||
)
|
||||
@@ -0,0 +1,72 @@
|
||||
#include <QCoreApplication>
|
||||
#include <QHttpServer>
|
||||
#include <QTcpServer>
|
||||
#include <QSqlDatabase>
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlError>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonDocument>
|
||||
#include <QDebug>
|
||||
|
||||
// ============================================================================
|
||||
// shipheart_api - SPIKE (Phase 1)
|
||||
// ----------------------------------------------------------------------------
|
||||
// Objectif unique de ce fichier : valider que QHttpServer + QtSql fonctionnent
|
||||
// bien ensemble sur le CM5, avant d'investir dans la conception des vrais
|
||||
// endpoints (cf synthèse, section 20). Pas de logique métier ici.
|
||||
// ============================================================================
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
|
||||
// --- Connexion MariaDB locale ---
|
||||
// TODO : remplacer par les vrais identifiants (mêmes que ceux utilisés par
|
||||
// shipheart_qt/shipheart_appli - cf BDD_USER_NAME/BDD_USER_PWD/BDD_BASE_NAME
|
||||
// dans shipheart.h du projet shipheart_qt).
|
||||
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
|
||||
db.setHostName("localhost");
|
||||
db.setUserName("koriolan");
|
||||
db.setPassword("Mp7Hgf12bV9zm");
|
||||
db.setDatabaseName("shipheart");
|
||||
|
||||
if (!db.open()) {
|
||||
qCritical() << "Connexion MariaDB échouée :" << db.lastError().text();
|
||||
return 1;
|
||||
}
|
||||
qInfo() << "Connexion MariaDB réussie.";
|
||||
|
||||
QHttpServer server;
|
||||
|
||||
// Route de test simple, sans BDD :
|
||||
server.route("/ping", []() {
|
||||
QJsonObject obj;
|
||||
obj["status"] = "ok";
|
||||
obj["message"] = "shipheart_api spike vivant";
|
||||
return QHttpServerResponse(QJsonDocument(obj).toJson());
|
||||
});
|
||||
|
||||
// Route de test avec une vraie requête MariaDB (nombre de circuits en base) :
|
||||
server.route("/test-db", []() {
|
||||
QSqlQuery query("SELECT COUNT(*) FROM TB_Circuits");
|
||||
QJsonObject obj;
|
||||
if (query.next()) {
|
||||
obj["nb_circuits"] = query.value(0).toInt();
|
||||
obj["status"] = "ok";
|
||||
} else {
|
||||
obj["status"] = "erreur";
|
||||
obj["message"] = query.lastError().text();
|
||||
}
|
||||
return QHttpServerResponse(QJsonDocument(obj).toJson());
|
||||
});
|
||||
|
||||
auto tcpServer = new QTcpServer();
|
||||
if (!tcpServer->listen(QHostAddress::Any, 8080) || !server.bind(tcpServer)) {
|
||||
qCritical() << "Impossible de démarrer le serveur HTTP sur le port 8080.";
|
||||
delete tcpServer;
|
||||
return 1;
|
||||
}
|
||||
qInfo() << "shipheart_api spike en écoute sur le port" << tcpServer->serverPort();
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
Reference in New Issue
Block a user