From e517022fa354d4dd170ad4dea0e4ea32b472e476 Mon Sep 17 00:00:00 2001 From: Wessel Tip Date: Thu, 2 Oct 2025 10:00:04 +0200 Subject: [PATCH] fix(final_grade_determinator): Various PR fixes --- .../src/database/StudentCourse.hpp | 4 +- .../nodes/FinalGradeDeterminator.cpp | 52 ++++++++++++------- .../nodes/FinalGradeDeterminator.hpp | 20 ++++--- 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/g2_2025_grade_calculator_pkg/src/database/StudentCourse.hpp b/src/g2_2025_grade_calculator_pkg/src/database/StudentCourse.hpp index ef7e81e..66d1843 100644 --- a/src/g2_2025_grade_calculator_pkg/src/database/StudentCourse.hpp +++ b/src/g2_2025_grade_calculator_pkg/src/database/StudentCourse.hpp @@ -20,7 +20,9 @@ struct StudentCourse { } bool operator<(const StudentCourse& other) const{ - return student_name < other.student_name || (student_name == other.student_name && course_name < other.course_name); + return student_name < other.student_name + || (student_name == other.student_name + && course_name < other.course_name); } }; diff --git a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.cpp b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.cpp index b506be7..bcf753d 100644 --- a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.cpp +++ b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.cpp @@ -4,11 +4,14 @@ namespace assignments::one::final_grade_determinator { FinalGradeDeterminator::FinalGradeDeterminator() : Node("final_grade_determinator") { this->declare_parameter("grade_collection_amount", 5); - grade_collection_ammount_ = this->get_parameter("grade_collection_amount").as_int(); + grade_collection_amount_ = this->get_parameter("grade_collection_amount").as_int(); + db_manager_ = std::make_unique(this->get_logger()); // Create publisher for exam results - student_publisher_ = this->create_publisher("student_course_management", 10); + student_publisher_ = this->create_publisher( + "student_course_management", 10 + ); // Create subscriber for adding/removing student/course combinations exam_subscriber_ = this->create_subscription( @@ -23,18 +26,21 @@ FinalGradeDeterminator::FinalGradeDeterminator() : Node("final_grade_determinato exam_service_client_= this->create_client("grade_calculator_service"); } -void FinalGradeDeterminator::exam_results_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg){ - studentCourseCombo_.student_name = msg->student_name; - studentCourseCombo_.course_name = msg->course_name; - - dataMap_[studentCourseCombo_].push_back(msg->result); - if (dataMap_[studentCourseCombo_].size() == static_cast(grade_collection_ammount_)) - { +void FinalGradeDeterminator::exam_results_callback( + const g2_2025_interfaces::msg::Exam::SharedPtr msg +) { + student_course_combo_.student_name = msg->student_name; + student_course_combo_.course_name = msg->course_name; + + data_map_[student_course_combo_].push_back(msg->result); + + auto grade_collection_as_ulong = static_cast(grade_collection_amount_); + if (data_map_[student_course_combo_].size() == grade_collection_as_ulong) { RCLCPP_INFO(this->get_logger(), - "%s // %s: results sent to calculator", - msg->student_name.c_str(), msg->course_name.c_str() + "%s // %s: results sent to calculator", + msg->student_name.c_str(), msg->course_name.c_str() ); - grade_calculator_request(studentCourseCombo_); + grade_calculator_request(student_course_combo_); } } @@ -47,20 +53,25 @@ void FinalGradeDeterminator::grade_calculator_request(StudentCourse combo) { auto request = std::make_shared(); request->course_name = combo.course_name; request->student_name = combo.student_name; - request->exam_grades = dataMap_[combo]; - - auto callback = [this, combo](rclcpp::Client::SharedFuture future) { + request->exam_grades = data_map_[combo]; + + // Callback is used due to ros2 not liking passing multiple arguments in async calls + auto callback = [this, combo](rclcpp::Client::SharedFuture future) + { this->grade_calculator_response(future, combo); }; exam_service_client_->async_send_request(request, callback); } -void FinalGradeDeterminator::grade_calculator_response(rclcpp::Client::SharedFuture future, StudentCourse studentCourseCombo){ +void FinalGradeDeterminator::grade_calculator_response( + rclcpp::Client::SharedFuture future, + StudentCourse studentCourseCombo +) { if (!db_manager_ || !db_manager_->is_connected()) { RCLCPP_WARN(this->get_logger(), "no database connection"); return; } - + auto response = future.get(); auto student_message = g2_2025_interfaces::msg::Student(); @@ -73,7 +84,12 @@ void FinalGradeDeterminator::grade_calculator_response(rclcpp::Clientresult ); - db_manager_->store_final_course_result(studentCourseCombo, grade_collection_ammount_, response->result); + + db_manager_->store_final_course_result( + studentCourseCombo, + grade_collection_amount_, + response->result + ); } } // namespace assignments::one::final_grade_determinator diff --git a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.hpp b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.hpp index ee00a39..8703bc7 100644 --- a/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.hpp +++ b/src/g2_2025_grade_calculator_pkg/src/final_grade_determinator/nodes/FinalGradeDeterminator.hpp @@ -24,17 +24,21 @@ private: rclcpp::Publisher::SharedPtr student_publisher_; rclcpp::Client::SharedPtr exam_service_client_; - + std::unique_ptr db_manager_; - StudentCourse studentCourseCombo_; - StudentCourseResultMap dataMap_; + StudentCourse student_course_combo_; + StudentCourseResultMap data_map_; + + // Params + int grade_collection_amount_; - //Params: - int grade_collection_ammount_; - //Functions: void grade_calculator_request(StudentCourse combo); void exam_results_callback(const g2_2025_interfaces::msg::Exam::SharedPtr msg); - void grade_calculator_response(rclcpp::Client::SharedFuture future, StudentCourse studentCourseCombo); + void grade_calculator_response( + rclcpp::Client::SharedFuture future, + StudentCourse studentCourseCombo + ); }; -} // namespace assignments::one::final_grade_determinator \ No newline at end of file + +} // namespace assignments::one::final_grade_determinator