From 3d3b998972e611e8b3071d34e8b573fb594c4ccf Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 13 Aug 2026 12:12:17 +0200 Subject: [PATCH] Spike : QHttpServer + QtSql fonctionnels sur CM5 (routes /ping et /test-db) --- .gitignore | 13 +++++++++ CMakeLists.txt | 22 +++++++++++++++ main.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 main.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8303fe1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +build/ +CMakeFiles/ +CMakeCache.txt +cmake_install.cmake +Makefile +Testing/ +.qt/ +.qtc_clangd/ +.qtcreator/ +*.o +*.obj +*.autosave +*~ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..37724e3 --- /dev/null +++ b/CMakeLists.txt @@ -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 +) diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..8d75fcb --- /dev/null +++ b/main.cpp @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ============================================================================ +// 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(); +}