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