diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.cpp index 3709753..7b6645d 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.cpp @@ -9,3 +9,8 @@ orders& Customer::getOrders() { return m_orders; } + +std::string Customer::getType() const +{ + return "Customer"; +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.h index 2814111..fc01dd4 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.h @@ -17,5 +17,6 @@ class Customer : public User private: void addOrder(std::shared_ptr); orders& getOrders(); + std::string getType() const override; }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/CustomerMenu.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/CustomerMenu.cpp index 3b4464d..7ff94f5 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/CustomerMenu.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/CustomerMenu.cpp @@ -51,7 +51,6 @@ bool CustomerMenu::handleOperation(char choice) m_foodDeliveryController.viewProfile(); break; case '5': - m_foodDeliveryController.logout(); isMenuActive = false; break; } diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.cpp index ed251f5..f698e44 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.cpp @@ -9,3 +9,8 @@ void DeliveryPartner::acceptDeliveryAssignment(std::shared_ptrgetId()] = deliveryAssignmentPointer; } + +std::string DeliveryPartner::getType() const +{ + return "DeliveryPartner"; +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.h index a789f25..0497193 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.h @@ -18,5 +18,6 @@ private: public: void acceptDeliveryAssignment(std::shared_ptr); deliveryAssignments& getAssignedDeliveries(); + std::string getType() const override; }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartnerMenu.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartnerMenu.cpp index 6699b09..074bfab 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartnerMenu.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartnerMenu.cpp @@ -51,7 +51,6 @@ bool DeliveryPartnerMenu::handleOperation(char choice) m_foodDeliveryController.viewProfile(); break; case '5': - m_foodDeliveryController.logout(); isMenuActive = false; break; } diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp index daeeae3..8b14b35 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp @@ -1 +1,56 @@ +/* +Author: Joel Mathew Thomas +Date: 19-02-2026 +*/ + +#include #include "FoodDeliveryController.h" +#include "Menu.h" +#include "RestaurantOwnerMenu.h" +#include "CustomerMenu.h" +#include "DeliveryPartnerMenu.h" +#include "User.h" +#include "inputHelper.h" +#include "outputHelper.h" + +void FoodDeliveryController::login() +{ + util::clear(); + std::string username, password; + std::cout << "Enter username: ";; + util::readString(username); + std::cout << "Enter password: ";; + util::readString(password); + users::iterator userIterator = m_users.find(username); + if (userIterator != m_users.end()) + { + User& user = *(userIterator->second); + std::unique_ptr menu; + if (user.login(password)) + { + if (user.getType() == "RestaurantOwner") + { + menu = std::make_unique(*this, user.getUsername()); + } + else if (user.getType() == "Customer") + { + menu = std::make_unique(*this, user.getUsername()); + } + else if (user.getType() == "DeliveryPartner") + { + menu = std::make_unique(*this, user.getUsername()); + } + else + { + throw std::runtime_error("Invalid User"); + } + m_authenticatedUser = userIterator->second; + menu->showMenu(); + m_authenticatedUser.reset(); + } + } + else + { + std::cout << "User Not Found!\n"; + } +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h index f6584b4..bc3300f 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h @@ -4,12 +4,22 @@ Date: 18-02-2026 */ #pragma once +#include +#include +#include + +class User; + +using users = std::map>; -class Menu; class FoodDeliveryController { +private: + users m_users; + std::shared_ptr m_authenticatedUser; public: + void login(); void listRestaurants(); void updateRestaurantStatus(); void listRestaurantOrders(); @@ -24,6 +34,5 @@ public: void acceptDeliveryAssignment(); void confirmDeliveryAssignment(); void viewProfile(); - void logout(); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.cpp index 468805f..ccc6802 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.cpp @@ -14,3 +14,8 @@ restaurants& RestaurantOwner::getRestaurants() { return m_restaurants; } + +std::string RestaurantOwner::getType() const +{ + return "RestaurantOwner"; +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.h index 6ee4a25..15f08fa 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.h @@ -19,4 +19,5 @@ private: public: void addRestaurant(std::shared_ptr); restaurants& getRestaurants(); + std::string getType() const override; }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwnerMenu.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwnerMenu.cpp index 5088343..b8ce122 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwnerMenu.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwnerMenu.cpp @@ -67,7 +67,6 @@ bool RestaurantOwnerMenu::handleOperation(char choice) m_foodDeliveryController.viewProfile(); break; case '9': - m_foodDeliveryController.logout(); isMenuActive = false; break; } diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.h index dd4be74..deddb55 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.h @@ -14,7 +14,6 @@ private: std::string m_phone; std::string m_password; std::string m_email; - public: User(): m_username(""), @@ -39,6 +38,7 @@ public: std::string getName() const; std::string getPhone() const; std::string getEmail() const; + virtual std::string getType() const = 0; bool login(const std::string&) const; };