Spike : QHttpServer + QtSql fonctionnels sur CM5 (routes /ping et /test-db)

This commit is contained in:
2026-08-13 12:12:17 +02:00
commit 3d3b998972
3 changed files with 107 additions and 0 deletions
+72
View File
@@ -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();
}