#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(); }