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