From ec312064370d4303a4c59e934cd9cd9f3e95900f Mon Sep 17 00:00:00 2001 From: Joel Thomas <1914@trenser.com> Date: Thu, 19 Feb 2026 19:16:23 +0530 Subject: [PATCH] Implement Controller updateRestaurantStatus() - Implement Controller updateRestaurantStatus() - Avoid unecessary copies, keep ownerRestaurant reference --- .../FoodDeliveryController.cpp | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp index d85cc31..456c8cf 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp @@ -167,7 +167,7 @@ void FoodDeliveryController::listRestaurants() return; } RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast(m_authenticatedUser)); - restaurants ownerRestaurants = restaurantOwner.getRestaurants(); + restaurants& ownerRestaurants = restaurantOwner.getRestaurants(); if (ownerRestaurants.empty()) { std::cout << "You do not own any Restaurants!\n"; @@ -207,7 +207,56 @@ void FoodDeliveryController::addNewRestaurant() void FoodDeliveryController::updateRestaurantStatus() { - + util::clear(); + if (!checkAccess(m_authenticatedUser, "RestaurantOwner")) + { + return; + } + RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast(m_authenticatedUser)); + restaurants& ownerRestaurants = restaurantOwner.getRestaurants(); + int restaurantChoiceIndex; + if (ownerRestaurants.empty()) + { + std::cout << "You do not own any Restaurants!\n"; + return; + } + std::cout << "Pick a Restaurant to Open/Close\n"; + std::cout << std::left << std::setw(8) << "Index" + << std::left << std::setw(5) << "ID" + << std::left << std::setw(25) << "Name" + << std::left << std::setw(10) << "Status" + << "\n"; + int restaurantIndex = 1; + for (restaurants::iterator restaurantIterator = ownerRestaurants.begin(); restaurantIterator != ownerRestaurants.end(); restaurantIterator++, restaurantIndex++) + { + auto& restaurant = *(restaurantIterator->second); + std::cout + << std::left << std::setw(8) << restaurantIndex + << std::left << std::setw(5) << restaurant.getId() + << std::left << std::setw(25) << restaurant.getName() + << std::left << std::setw(10) << (restaurant.getStatus() ? "Open" : "Closed") + << "\n"; + } + std::cout << "\nSelect Index: "; + util::readValue(restaurantChoiceIndex); + restaurantChoiceIndex--; + if (restaurantChoiceIndex < 0 || restaurantChoiceIndex >= ownerRestaurants.size()) + { + std::cout << "Invalid Index. Cannot update Restaurant status!\n"; + return; + } + restaurants::iterator restaurantIterator = ownerRestaurants.begin(); + std::advance(restaurantIterator, restaurantChoiceIndex); + if (restaurantIterator->second->getStatus() == true) + { + restaurantIterator->second->setStatus(false); + } + else + { + restaurantIterator->second->setStatus(true); + } + listRestaurants(); + std::cout << "Updated Restaurant " << restaurantIterator->second->getName() << " successfully\n"; } void FoodDeliveryController::listRestaurantOrders()