Files
Training-1914-Jan26/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp
T
Joel Thomas c5e4ecbe02 Implement Controller run()
- Implement Controller run()
- Remove Do you want to continue prompts for util::pressEnter
- change type of choice from char -> int
- Display Invalid Password on bad login
- Create empty controller method definitions
2026-02-19 15:39:37 +05:30

219 lines
3.9 KiB
C++

/*
Author: Joel Mathew Thomas
Date: 19-02-2026
*/
#include <stdexcept>
#include "FoodDeliveryController.h"
#include "Menu.h"
#include "RestaurantOwnerMenu.h"
#include "CustomerMenu.h"
#include "DeliveryPartnerMenu.h"
#include "User.h"
#include "RestaurantOwner.h"
#include "Customer.h"
#include "DeliveryPartner.h"
#include "inputHelper.h"
#include "outputHelper.h"
void FoodDeliveryController::run()
{
bool isMenuActive = true;
while (isMenuActive)
{
char choice;
util::clear();
std::cout << "Food Delivery App\n"
"1. Login\n"
"2. Register\n"
"3. Exit\n"
"Choice?: ";
util::readValue<char>(choice);
if (choice == '1')
{
login();
}
else if (choice == '2')
{
registerUser();
}
else if (choice == '3')
{
break;
}
else
{
std::cout << "Invalid Choice!\n";
}
util::pressEnter();
}
}
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> menu;
if (user.login(password))
{
if (user.getType() == "RestaurantOwner")
{
menu = std::make_unique<RestaurantOwnerMenu>(*this, user.getUsername());
}
else if (user.getType() == "Customer")
{
menu = std::make_unique<CustomerMenu>(*this, user.getUsername());
}
else if (user.getType() == "DeliveryPartner")
{
menu = std::make_unique<DeliveryPartnerMenu>(*this, user.getUsername());
}
else
{
throw std::runtime_error("Invalid User");
}
m_authenticatedUser = userIterator->second;
menu->showMenu();
m_authenticatedUser.reset();
}
else
{
std::cout << "Invalid Password! Try Again\n";
}
}
else
{
std::cout << "User Not Found!\n";
}
}
void FoodDeliveryController::registerUser()
{
std::string username, password, phone, name, email;
util::clear();
std::cout << "Enter Username: ";
util::readString(username);
if (m_users.find(username) != m_users.end())
{
std::cout << "User Already Exists!\n";
return;
}
std::cout << "Enter Password: ";
util::readString(password);
std::cout << "Enter Full Name: ";
util::readString(name);
std::cout << "Enter Phone: ";
util::readString(phone);
std::cout << "Enter Email: ";
util::readString(email);
while (true)
{
int choice;
std::cout << "Select User Type\n"
"1. Restaurant Owner\n"
"2. Customer\n"
"3. Delivery Partner\n"
"4. Cancel\n"
"Choice?: ";
util::readValue<int>(choice);
switch (choice)
{
case 1:
m_users[username] = std::make_shared<RestaurantOwner>(username, name, phone, password, email);
break;
case 2:
m_users[username] = std::make_shared<Customer>(username, name, phone, password, email);
break;
case 3:
m_users[username] = std::make_shared<DeliveryPartner>(username, name, phone, password, email);
break;
case 4:
return;
default:
util::clear();
std::cout << "Invalid Choice! Try Again\n";
continue;
}
break;
}
std::cout << "User Registration Successful\n";
}
void FoodDeliveryController::listRestaurants()
{
}
void FoodDeliveryController::updateRestaurantStatus()
{
}
void FoodDeliveryController::listRestaurantOrders()
{
}
void FoodDeliveryController::markOrderReady()
{
}
void FoodDeliveryController::listMenuItems()
{
}
void FoodDeliveryController::addMenuItem()
{
}
void FoodDeliveryController::removeMenuItem()
{
}
void FoodDeliveryController::listCustomerOrders()
{
}
void FoodDeliveryController::placeOrder()
{
}
void FoodDeliveryController::cancelOrder()
{
}
void FoodDeliveryController::listDeliveryAssignments()
{
}
void FoodDeliveryController::acceptDeliveryAssignment()
{
}
void FoodDeliveryController::confirmDeliveryAssignment()
{
}
void FoodDeliveryController::viewProfile()
{
}