From 4f977faf8bd2c69db95a566a40ff1f8aef851a88 Mon Sep 17 00:00:00 2001 From: Joel Thomas <1914@trenser.com> Date: Wed, 25 Feb 2026 09:39:35 +0530 Subject: [PATCH] refactor: Modularize load and persist states methods and minor code refactoring - Modularize loadStates() - Modularize persistStates() - Do not convert size_t to int in isEmailValid() - Make non state mutating functions const - Make isPhoneNumberValid and isEmailValid static --- .../FoodDeliveryController.cpp | 76 ++++++++++++++----- .../FoodDeliveryController.h | 11 ++- 2 files changed, 68 insertions(+), 19 deletions(-) diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp index 674f7f0..b4e31a7 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp @@ -237,7 +237,7 @@ static deliveryAssignments::iterator selectDeliveryAssignmentFromList(deliveryAs } -bool isPhoneNumberValid(const std::string& phoneNumber) { +static bool isPhoneNumberValid(const std::string& phoneNumber) { if (phoneNumber.size() != 10) { return false; @@ -250,8 +250,8 @@ bool isPhoneNumberValid(const std::string& phoneNumber) { ); } -bool isEmailValid(const std::string& email) { - int index = email.find('@'); +static bool isEmailValid(const std::string& email) { + size_t index = email.find('@'); if (index == std::string::npos) return false; if (email.find('@', index + 1) != std::string::npos) { @@ -264,17 +264,17 @@ bool isEmailValid(const std::string& email) { return true; } -void FoodDeliveryController::loadStates() +void FoodDeliveryController::loadUsers() { FileDatabase userDatabase(USERS_FILE); + m_users = userDatabase.load(); +} + + +void FoodDeliveryController::loadRestaurants(objects& menuItems) +{ FileDatabase restaurantDatabase(RESTAURANTS_FILE); FileDatabase menuItemDatabase(MENU_ITEMS_FILE); - FileDatabase orderDatabase(ORDERS_FILE); - FileDatabase itemDatabase(ITEMS_FILE); - FileDatabase deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE); - objects menuItems; - objects items; - m_users = userDatabase.load(); m_restaurants = restaurantDatabase.load(); for (const auto& restaurantPair : m_restaurants) { @@ -303,6 +303,13 @@ void FoodDeliveryController::loadStates() throw std::runtime_error("MenuItem has invalid Restaurant ID"); } } +} + +void FoodDeliveryController::loadOrders(objects& menuItems) +{ + FileDatabase orderDatabase(ORDERS_FILE); + FileDatabase itemDatabase(ITEMS_FILE); + objects items = itemDatabase.load(); m_orders = orderDatabase.load(); for (auto& orderPair : m_orders) { @@ -326,7 +333,6 @@ void FoodDeliveryController::loadStates() } restaurantIterator->second->addOrder(orderPair.second); } - items = itemDatabase.load(); for (auto& itemPair : items) { int itemId = itemPair.second->getMenuItemId(); @@ -350,6 +356,11 @@ void FoodDeliveryController::loadStates() throw std::runtime_error("Item has invalid Order ID"); } } +} + +void FoodDeliveryController::loadDeliveryAssignments() +{ + FileDatabase deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE); m_assignments = deliveryAssignmentsDatabase.load(); for (auto& assignmentPair : m_assignments) { @@ -381,18 +392,27 @@ void FoodDeliveryController::loadStates() } } -void FoodDeliveryController::persistStates() +void FoodDeliveryController::loadStates() +{ + loadUsers(); + objects menuItems; + loadRestaurants(menuItems); + loadOrders(menuItems); + loadDeliveryAssignments(); +} + +void FoodDeliveryController::persistUsers() const { FileDatabase userDatabase(USERS_FILE); + userDatabase.save(m_users); +} + +void FoodDeliveryController::persistRestaurants() const +{ FileDatabase restaurantDatabase(RESTAURANTS_FILE); FileDatabase menuItemDatabase(MENU_ITEMS_FILE); - FileDatabase orderDatabase(ORDERS_FILE); - FileDatabase itemDatabase(ITEMS_FILE); - FileDatabase deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE); - userDatabase.save(m_users); - restaurantDatabase.save(m_restaurants); objects allMenuItems; - objects allItems; + restaurantDatabase.save(m_restaurants); for (const auto& restaurantPair : m_restaurants) { for (const auto& menuItemPair : restaurantPair.second->getMenuItems()) @@ -401,6 +421,13 @@ void FoodDeliveryController::persistStates() } } menuItemDatabase.save(allMenuItems); +} + +void FoodDeliveryController::persistOrders() const +{ + FileDatabase orderDatabase(ORDERS_FILE); + FileDatabase itemDatabase(ITEMS_FILE); + objects allItems; orderDatabase.save(m_orders); for (const auto& orderPair : m_orders) { @@ -410,9 +437,22 @@ void FoodDeliveryController::persistStates() } } itemDatabase.save(allItems); +} + +void FoodDeliveryController::persistDeliveryAssignments() const +{ + FileDatabase deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE); deliveryAssignmentsDatabase.save(m_assignments); } +void FoodDeliveryController::persistStates() const +{ + persistUsers(); + persistRestaurants(); + persistOrders(); + persistDeliveryAssignments(); +} + void FoodDeliveryController::run() { bool isMenuActive = true; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h index 471097e..26e708d 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h @@ -22,6 +22,7 @@ using menuItems = std::map>; using items = std::vector>; using orders = std::map>; using deliveryAssignments = std::map>; +template using objects = std::map>; class FoodDeliveryController { @@ -31,8 +32,16 @@ private: orders m_orders; deliveryAssignments m_assignments; std::shared_ptr m_authenticatedUser; + void loadUsers(); + void loadRestaurants(objects&); + void loadOrders(objects&); + void loadDeliveryAssignments(); + void persistUsers() const; + void persistRestaurants() const; + void persistOrders() const; + void persistDeliveryAssignments() const; void loadStates(); - void persistStates(); + void persistStates() const; public: void run(); void login();