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
This commit is contained in:
@@ -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)
|
if (phoneNumber.size() != 10)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@@ -250,8 +250,8 @@ bool isPhoneNumberValid(const std::string& phoneNumber) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isEmailValid(const std::string& email) {
|
static bool isEmailValid(const std::string& email) {
|
||||||
int index = email.find('@');
|
size_t index = email.find('@');
|
||||||
if (index == std::string::npos) return false;
|
if (index == std::string::npos) return false;
|
||||||
if (email.find('@', index + 1) != std::string::npos)
|
if (email.find('@', index + 1) != std::string::npos)
|
||||||
{
|
{
|
||||||
@@ -264,17 +264,17 @@ bool isEmailValid(const std::string& email) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FoodDeliveryController::loadStates()
|
void FoodDeliveryController::loadUsers()
|
||||||
{
|
{
|
||||||
FileDatabase<User> userDatabase(USERS_FILE);
|
FileDatabase<User> userDatabase(USERS_FILE);
|
||||||
|
m_users = userDatabase.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FoodDeliveryController::loadRestaurants(objects<MenuItem>& menuItems)
|
||||||
|
{
|
||||||
FileDatabase<Restaurant> restaurantDatabase(RESTAURANTS_FILE);
|
FileDatabase<Restaurant> restaurantDatabase(RESTAURANTS_FILE);
|
||||||
FileDatabase<MenuItem> menuItemDatabase(MENU_ITEMS_FILE);
|
FileDatabase<MenuItem> menuItemDatabase(MENU_ITEMS_FILE);
|
||||||
FileDatabase<Order> orderDatabase(ORDERS_FILE);
|
|
||||||
FileDatabase<Item> itemDatabase(ITEMS_FILE);
|
|
||||||
FileDatabase<DeliveryAssignment> deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE);
|
|
||||||
objects<MenuItem> menuItems;
|
|
||||||
objects<Item> items;
|
|
||||||
m_users = userDatabase.load();
|
|
||||||
m_restaurants = restaurantDatabase.load();
|
m_restaurants = restaurantDatabase.load();
|
||||||
for (const auto& restaurantPair : m_restaurants)
|
for (const auto& restaurantPair : m_restaurants)
|
||||||
{
|
{
|
||||||
@@ -303,6 +303,13 @@ void FoodDeliveryController::loadStates()
|
|||||||
throw std::runtime_error("MenuItem has invalid Restaurant ID");
|
throw std::runtime_error("MenuItem has invalid Restaurant ID");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::loadOrders(objects<MenuItem>& menuItems)
|
||||||
|
{
|
||||||
|
FileDatabase<Order> orderDatabase(ORDERS_FILE);
|
||||||
|
FileDatabase<Item> itemDatabase(ITEMS_FILE);
|
||||||
|
objects<Item> items = itemDatabase.load();
|
||||||
m_orders = orderDatabase.load();
|
m_orders = orderDatabase.load();
|
||||||
for (auto& orderPair : m_orders)
|
for (auto& orderPair : m_orders)
|
||||||
{
|
{
|
||||||
@@ -326,7 +333,6 @@ void FoodDeliveryController::loadStates()
|
|||||||
}
|
}
|
||||||
restaurantIterator->second->addOrder(orderPair.second);
|
restaurantIterator->second->addOrder(orderPair.second);
|
||||||
}
|
}
|
||||||
items = itemDatabase.load();
|
|
||||||
for (auto& itemPair : items)
|
for (auto& itemPair : items)
|
||||||
{
|
{
|
||||||
int itemId = itemPair.second->getMenuItemId();
|
int itemId = itemPair.second->getMenuItemId();
|
||||||
@@ -350,6 +356,11 @@ void FoodDeliveryController::loadStates()
|
|||||||
throw std::runtime_error("Item has invalid Order ID");
|
throw std::runtime_error("Item has invalid Order ID");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::loadDeliveryAssignments()
|
||||||
|
{
|
||||||
|
FileDatabase<DeliveryAssignment> deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE);
|
||||||
m_assignments = deliveryAssignmentsDatabase.load();
|
m_assignments = deliveryAssignmentsDatabase.load();
|
||||||
for (auto& assignmentPair : m_assignments)
|
for (auto& assignmentPair : m_assignments)
|
||||||
{
|
{
|
||||||
@@ -381,18 +392,27 @@ void FoodDeliveryController::loadStates()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FoodDeliveryController::persistStates()
|
void FoodDeliveryController::loadStates()
|
||||||
|
{
|
||||||
|
loadUsers();
|
||||||
|
objects<MenuItem> menuItems;
|
||||||
|
loadRestaurants(menuItems);
|
||||||
|
loadOrders(menuItems);
|
||||||
|
loadDeliveryAssignments();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistUsers() const
|
||||||
{
|
{
|
||||||
FileDatabase<User> userDatabase(USERS_FILE);
|
FileDatabase<User> userDatabase(USERS_FILE);
|
||||||
|
userDatabase.save(m_users);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistRestaurants() const
|
||||||
|
{
|
||||||
FileDatabase<Restaurant> restaurantDatabase(RESTAURANTS_FILE);
|
FileDatabase<Restaurant> restaurantDatabase(RESTAURANTS_FILE);
|
||||||
FileDatabase<MenuItem> menuItemDatabase(MENU_ITEMS_FILE);
|
FileDatabase<MenuItem> menuItemDatabase(MENU_ITEMS_FILE);
|
||||||
FileDatabase<Order> orderDatabase(ORDERS_FILE);
|
|
||||||
FileDatabase<Item> itemDatabase(ITEMS_FILE);
|
|
||||||
FileDatabase<DeliveryAssignment> deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE);
|
|
||||||
userDatabase.save(m_users);
|
|
||||||
restaurantDatabase.save(m_restaurants);
|
|
||||||
objects<MenuItem> allMenuItems;
|
objects<MenuItem> allMenuItems;
|
||||||
objects<Item> allItems;
|
restaurantDatabase.save(m_restaurants);
|
||||||
for (const auto& restaurantPair : m_restaurants)
|
for (const auto& restaurantPair : m_restaurants)
|
||||||
{
|
{
|
||||||
for (const auto& menuItemPair : restaurantPair.second->getMenuItems())
|
for (const auto& menuItemPair : restaurantPair.second->getMenuItems())
|
||||||
@@ -401,6 +421,13 @@ void FoodDeliveryController::persistStates()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
menuItemDatabase.save(allMenuItems);
|
menuItemDatabase.save(allMenuItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistOrders() const
|
||||||
|
{
|
||||||
|
FileDatabase<Order> orderDatabase(ORDERS_FILE);
|
||||||
|
FileDatabase<Item> itemDatabase(ITEMS_FILE);
|
||||||
|
objects<Item> allItems;
|
||||||
orderDatabase.save(m_orders);
|
orderDatabase.save(m_orders);
|
||||||
for (const auto& orderPair : m_orders)
|
for (const auto& orderPair : m_orders)
|
||||||
{
|
{
|
||||||
@@ -410,9 +437,22 @@ void FoodDeliveryController::persistStates()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
itemDatabase.save(allItems);
|
itemDatabase.save(allItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistDeliveryAssignments() const
|
||||||
|
{
|
||||||
|
FileDatabase<DeliveryAssignment> deliveryAssignmentsDatabase(DELIVERY_ASSIGNMENTS_FILE);
|
||||||
deliveryAssignmentsDatabase.save(m_assignments);
|
deliveryAssignmentsDatabase.save(m_assignments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FoodDeliveryController::persistStates() const
|
||||||
|
{
|
||||||
|
persistUsers();
|
||||||
|
persistRestaurants();
|
||||||
|
persistOrders();
|
||||||
|
persistDeliveryAssignments();
|
||||||
|
}
|
||||||
|
|
||||||
void FoodDeliveryController::run()
|
void FoodDeliveryController::run()
|
||||||
{
|
{
|
||||||
bool isMenuActive = true;
|
bool isMenuActive = true;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ using menuItems = std::map<int, std::shared_ptr<MenuItem>>;
|
|||||||
using items = std::vector<std::shared_ptr<Item>>;
|
using items = std::vector<std::shared_ptr<Item>>;
|
||||||
using orders = std::map<int, std::shared_ptr<Order>>;
|
using orders = std::map<int, std::shared_ptr<Order>>;
|
||||||
using deliveryAssignments = std::map<int, std::shared_ptr<DeliveryAssignment>>;
|
using deliveryAssignments = std::map<int, std::shared_ptr<DeliveryAssignment>>;
|
||||||
|
template <typename T> using objects = std::map<int, std::shared_ptr<T>>;
|
||||||
|
|
||||||
class FoodDeliveryController
|
class FoodDeliveryController
|
||||||
{
|
{
|
||||||
@@ -31,8 +32,16 @@ private:
|
|||||||
orders m_orders;
|
orders m_orders;
|
||||||
deliveryAssignments m_assignments;
|
deliveryAssignments m_assignments;
|
||||||
std::shared_ptr<User> m_authenticatedUser;
|
std::shared_ptr<User> m_authenticatedUser;
|
||||||
|
void loadUsers();
|
||||||
|
void loadRestaurants(objects<MenuItem>&);
|
||||||
|
void loadOrders(objects<MenuItem>&);
|
||||||
|
void loadDeliveryAssignments();
|
||||||
|
void persistUsers() const;
|
||||||
|
void persistRestaurants() const;
|
||||||
|
void persistOrders() const;
|
||||||
|
void persistDeliveryAssignments() const;
|
||||||
void loadStates();
|
void loadStates();
|
||||||
void persistStates();
|
void persistStates() const;
|
||||||
public:
|
public:
|
||||||
void run();
|
void run();
|
||||||
void login();
|
void login();
|
||||||
|
|||||||
Reference in New Issue
Block a user