c5e4ecbe02
- 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
219 lines
3.9 KiB
C++
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()
|
|
{
|
|
|
|
}
|