diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.h index a7b2046..d80c137 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Customer.h @@ -24,6 +24,15 @@ public: const std::string& email, const std::string& address) : User(username, name, phone, password, email, address) + {} + Customer(int id, + const std::string& username, + const std::string& name, + const std::string& phone, + const std::string& password, + const std::string& email, + const std::string& address) : + User(id, username, name, phone, password, email, address) {} void addOrder(std::shared_ptr); orders& getOrders(); diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.cpp index 5615038..31df034 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.cpp @@ -3,8 +3,21 @@ Author: Joel Mathew Thomas Date: 18-02-2026 */ +#include #include "DeliveryAssignment.h" +DeliveryAssignment::DeliveryAssignment(int id, DeliveryStatus status, int orderId, int deliveryPartnerId) : + m_id(id), + m_status(status), + m_orderId(orderId), + m_deliveryPartnerId(deliveryPartnerId) +{ + if (id > m_uid) + { + m_uid = id; + } +} + int DeliveryAssignment::m_uid = 0; int DeliveryAssignment::getId() const @@ -22,7 +35,85 @@ void DeliveryAssignment::setStatus(const DeliveryStatus& status) m_status = status; } -Order& DeliveryAssignment::getOrder() +std::shared_ptr DeliveryAssignment::getOrder() { return m_order; } + +void DeliveryAssignment::setOrder(std::shared_ptr order) +{ + m_order = order; +} + +int DeliveryAssignment::getDeliveryPartnerId() const +{ + return m_deliveryPartnerId; +} + +void DeliveryAssignment:: setDeliveryPartnerId(int deliveryPartnerId) +{ + m_deliveryPartnerId = deliveryPartnerId; +} + +int DeliveryAssignment::getOrderId() const +{ + return m_orderId; +} + +std::string DeliveryAssignment::serialize() const +{ + std::ostringstream serializedDeliveryAssignment; + serializedDeliveryAssignment << m_id << '|' + << static_cast(m_status) << '|' + << m_orderId << '|' + << m_deliveryPartnerId; + return serializedDeliveryAssignment.str(); +} + +std::shared_ptr DeliveryAssignment::deserialize(const std::string& record) +{ + int id, orderId, deliveryPartnerId; + DeliveryStatus status; + std::string token; + std::istringstream serializedDeliveryAssignment(record); + getline(serializedDeliveryAssignment, token, '|'); + try { + id = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid DeliveryAssignment ID in snapshot"); + } + getline(serializedDeliveryAssignment, token, '|'); + int statusInt = std::stoi(token); + if (statusInt < static_cast(DeliveryStatus::CREATED) || + statusInt > static_cast(DeliveryStatus::DELIVERED)) + { + throw std::runtime_error("Invalid DeliveryStatus for DeliveryAssignment in snapshot"); + } + status = static_cast(statusInt); + getline(serializedDeliveryAssignment, token, '|'); + try { + orderId = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid Order ID for DeliveryAssignment in snapshot"); + } + getline(serializedDeliveryAssignment, token, '|'); + try { + deliveryPartnerId = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid DeliveryPartner ID for DeliveryAssignment in snapshot"); + } + if (status == DeliveryStatus::CREATED) + { + return std::make_shared(id, status, orderId, 0); + } + else + { + return std::make_shared(id, status, orderId, deliveryPartnerId); + } +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.h index c5a1ddc..0729058 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryAssignment.h @@ -4,6 +4,7 @@ Date: 18-12-2026 */ #pragma once +#include #include "Order.h" enum class DeliveryStatus @@ -18,17 +19,34 @@ class DeliveryAssignment private: static int m_uid; int m_id; - Order& m_order; + std::shared_ptr m_order; DeliveryStatus m_status; + int m_orderId; + int m_deliveryPartnerId; public: - DeliveryAssignment(Order& order) : + DeliveryAssignment() : + m_id(++m_uid), + m_status(DeliveryStatus::CREATED), + m_orderId(0), + m_deliveryPartnerId(0) + {} + DeliveryAssignment(std::shared_ptr order, int orderId) : m_id(++m_uid), m_order(order), - m_status(DeliveryStatus::CREATED) + m_status(DeliveryStatus::CREATED), + m_orderId(orderId), + m_deliveryPartnerId(0) {} int getId() const; DeliveryStatus getStatus() const; void setStatus(const DeliveryStatus&); - Order& getOrder(); + std::shared_ptr getOrder(); + void setOrder(std::shared_ptr); + int getDeliveryPartnerId() const; + void setDeliveryPartnerId(int); + int getOrderId() const; + std::string serialize() const; + static std::shared_ptr deserialize(const std::string&); + DeliveryAssignment(int, DeliveryStatus, int, int); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.h index b6c8c42..029df47 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/DeliveryPartner.h @@ -24,6 +24,15 @@ public: const std::string& email, const std::string& address) : User(username, name, phone, password, email, address) + {} + DeliveryPartner(int id, + const std::string& username, + const std::string& name, + const std::string& phone, + const std::string& password, + const std::string& email, + const std::string& address) : + User(id, username, name, phone, password, email, address) {} void acceptDeliveryAssignment(std::shared_ptr); deliveryAssignments& getAssignedDeliveries(); diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FileDatabase.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FileDatabase.h index 005c7c1..c0d14f7 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FileDatabase.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FileDatabase.h @@ -1,5 +1,55 @@ +/* +Author: Joel Mathew Thomas +Date: 22-12-2026 +*/ + #pragma once +#include +#include +#include +#include +#include +#include +template using objects = std::map>; + +template class FileDatabase { +private: + std::string m_filePath; +public: + FileDatabase() : m_filePath("") {} + FileDatabase(const std::string& filePath) : m_filePath(filePath) {} + objects load(); + void save(const objects&); }; +template +objects FileDatabase::load() +{ + objects records; + std::ifstream file(m_filePath); + if (!file.is_open()) + throw std::runtime_error("Failed to open file " + m_filePath); + + std::string record; + while (std::getline(file, record)) + { + auto object = T::deserialize(record); + records[object->getId()] = object; + } + return records; +} + +template +void FileDatabase::save(const objects& records) +{ + std::ofstream file(m_filePath, std::ios::trunc); + if (!file.is_open()) + throw std::runtime_error("Failed to open file " + m_filePath); + + for (const auto& recordPair : records) + { + file << recordPair.second->serialize() << '\n'; + } +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp index a2528cb..8471621 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.cpp @@ -20,6 +20,7 @@ Date: 19-02-2026 #include "DeliveryAssignment.h" #include "inputHelper.h" #include "outputHelper.h" +#include "FileDatabase.h" static bool checkAccess(std::shared_ptr user, const std::string& userWithAccess) { @@ -37,7 +38,7 @@ static restaurants::iterator pickRestaurantFromRestaurants(restaurants& ownerRes int restaurantIndex = 1, restaurantChoiceIndex; if (ownerRestaurants.empty()) { - std::cout << "You do not own any Restaurants!\n"; + std::cout << "No Restaurants available!\n"; return ownerRestaurants.end(); } std::cout << "Pick a Restaurant\n"; @@ -197,8 +198,8 @@ static deliveryAssignments::iterator pickAssignmentFromDeliveryAssignments(deliv << "\n"; for (auto& assignment : assignments) { - Order& order = assignment.second->getOrder(); - users::const_iterator customer = allUsers.find(order.getCustomerUsername()); + Order& order = *(assignment.second->getOrder()); + users::const_iterator customer = allUsers.find(order.getCustomerId()); if (customer == allUsers.end()) { throw std::runtime_error("Invalid state: Delivery Assignment has no associated Customer."); @@ -223,9 +224,159 @@ static deliveryAssignments::iterator pickAssignmentFromDeliveryAssignments(deliv return assignmentIterator; } +void FoodDeliveryController::loadStates() +{ + FileDatabase userDatabase("users.txt"); + FileDatabase restaurantDatabase("restaurants.txt"); + FileDatabase menuItemDatabase("menuItems.txt"); + FileDatabase orderDatabase("orders.txt"); + FileDatabase itemDatabase("items.txt"); + FileDatabase deliveryAssignmentsDatabase("assignments.txt"); + objects menuItems; + objects items; + m_users = userDatabase.load(); + m_restaurants = restaurantDatabase.load(); + for (const auto& restaurantPair : m_restaurants) + { + Restaurant& restaurant = *(restaurantPair.second); + int ownerId = restaurant.getOwnerId(); + auto userIterator = m_users.find(ownerId); + if (userIterator == m_users.end()) + throw std::runtime_error("Restaurant has invalid owner ID"); + auto owner = std::dynamic_pointer_cast(userIterator->second); + if (!owner) + { + throw std::runtime_error("Restaurant owner is not a RestaurantOwner"); + } + owner->addRestaurant(restaurantPair.second); + } + menuItems = menuItemDatabase.load(); + for (auto& menuItemPair : menuItems) + { + auto restaurantIterator = m_restaurants.find(menuItemPair.second->getRestaurantId()); + if (restaurantIterator != m_restaurants.end()) + { + restaurantIterator->second->addMenuItem(*(menuItemPair.second)); + } + else + { + throw std::runtime_error("MenuItem has invalid Restaurant ID"); + } + } + m_orders = orderDatabase.load(); + for (auto& orderPair : m_orders) + { + int customerId = orderPair.second->getCustomerId(); + int restaurantId = orderPair.second->getRestaurantId(); + auto customerIterator = m_users.find(customerId); + if (customerIterator == m_users.end()) + { + throw std::runtime_error("Order has invalid customer ID"); + } + auto customer = std::dynamic_pointer_cast(customerIterator->second); + if (!customer) + { + throw std::runtime_error("User associated with Order is not a Customer"); + } + customer->addOrder(orderPair.second); + auto restaurantIterator = m_restaurants.find(restaurantId); + if (restaurantIterator == m_restaurants.end()) + { + throw std::runtime_error("Order has invalid restaurant ID"); + } + restaurantIterator->second->addOrder(orderPair.second); + } + items = itemDatabase.load(); + for (auto& itemPair : items) + { + int itemId = itemPair.second->getMenuItemId(); + auto menuItemiterator = menuItems.find(itemId); + if (menuItemiterator != menuItems.end()) + { + itemPair.second->setMenuItem(menuItemiterator->second); + } + else + { + throw std::runtime_error("Item has invalid MenuItem ID"); + } + int orderId = itemPair.second->getOrderId(); + auto orderIterator = m_orders.find(orderId); + if (orderIterator != m_orders.end()) + { + orderIterator->second->addItem(*(itemPair.second)); + } + else + { + throw std::runtime_error("Item has invalid Order ID"); + } + } + m_assignments = deliveryAssignmentsDatabase.load(); + for (auto& assignmentPair : m_assignments) + { + int orderId = assignmentPair.second->getOrderId(); + int deliveryPartnerId = assignmentPair.second->getDeliveryPartnerId(); + auto orderIterator = m_orders.find(orderId); + if (orderIterator != m_orders.end()) + { + assignmentPair.second->setOrder(orderIterator->second); + } + else + { + throw std::runtime_error("Delivery Assignment has invalid Order ID"); + } + if (deliveryPartnerId != 0) + { + auto userIterator = m_users.find(deliveryPartnerId); + if (userIterator == m_users.end()) + { + throw std::runtime_error("Order has invalid Delivery Partner ID"); + } + auto deliveryPartner = std::dynamic_pointer_cast(userIterator->second); + if (!deliveryPartner) + { + throw std::runtime_error("User associated with Order is not a Delivery Partner"); + } + deliveryPartner->acceptDeliveryAssignment(assignmentPair.second); + } + } +} + +void FoodDeliveryController::persistStates() +{ + FileDatabase userDatabase("users.txt"); + FileDatabase restaurantDatabase("restaurants.txt"); + FileDatabase menuItemDatabase("menuItems.txt"); + FileDatabase orderDatabase("orders.txt"); + FileDatabase itemDatabase("items.txt"); + FileDatabase deliveryAssignmentsDatabase("assignments.txt"); + userDatabase.save(m_users); + restaurantDatabase.save(m_restaurants); + objects allMenuItems; + objects allItems; + for (const auto& restaurantPair : m_restaurants) + { + for (const auto& menuItemPair : restaurantPair.second->getMenuItems()) + { + allMenuItems[menuItemPair.first] = menuItemPair.second; + } + } + menuItemDatabase.save(allMenuItems); + orderDatabase.save(m_orders); + for (const auto& orderPair : m_orders) + { + for (const auto& item : orderPair.second->getItems()) + { + allItems[item->getId()] = item; + } + } + itemDatabase.save(allItems); + deliveryAssignmentsDatabase.save(m_assignments); +} + void FoodDeliveryController::run() { bool isMenuActive = true; + loadStates(); while (isMenuActive) { int choice; @@ -262,17 +413,25 @@ void FoodDeliveryController::run() util::pressEnter(); } } + persistStates(); } void FoodDeliveryController::login() { util::clear(); std::string username, password; - std::cout << "Enter username: ";; + std::cout << "Enter username: "; util::readString(username); - std::cout << "Enter password: ";; + std::cout << "Enter password: "; util::readString(password); - users::iterator userIterator = m_users.find(username); + users::iterator userIterator = std::find_if( + m_users.begin(), + m_users.end(), + [&username](const auto& pair) + { + return pair.second->getUsername() == username; + } + ); if (userIterator != m_users.end()) { User& user = *(userIterator->second); @@ -318,7 +477,15 @@ void FoodDeliveryController::registerUser() util::clear(); std::cout << "Enter Username: "; util::readString(username); - if (m_users.find(username) != m_users.end()) + users::iterator userIterator = std::find_if( + m_users.begin(), + m_users.end(), + [&username](const auto& pair) + { + return pair.second->getUsername() == username; + } + ); + if (userIterator != m_users.end()) { std::cout << "User Already Exists!\n"; return; @@ -343,23 +510,29 @@ void FoodDeliveryController::registerUser() "4. Cancel\n" "Choice?: "; util::readValue(choice); - switch (choice) + if (choice == 1) + { + std::shared_ptr user = std::make_shared(username, name, phone, password, email, address); + m_users[user->getId()] = user; + } + else if (choice == 2) + { + std::shared_ptr user = std::make_shared(username, name, phone, password, email, address); + m_users[user->getId()] = user; + } + else if (choice == 3) + { + std::shared_ptr user = std::make_shared(username, name, phone, password, email, address); + m_users[user->getId()] = user; + } + else if (choice == 4) { - case 1: - m_users[username] = std::make_shared(username, name, phone, password, email, address); - break; - case 2: - m_users[username] = std::make_shared(username, name, phone, password, email, address); - break; - case 3: - m_users[username] = std::make_shared(username, name, phone, password, email, address); - break; - case 4: return; - default: + } + else + { util::clear(); std::cout << "Invalid Choice! Try Again\n"; - continue; } break; } @@ -411,7 +584,7 @@ void FoodDeliveryController::addNewRestaurant() RestaurantOwner& restaurantOwner = *(std::dynamic_pointer_cast(m_authenticatedUser)); std::cout << "Enter Restaurant Name: "; util::readString(name); - std::shared_ptr restaurant = std::make_shared(name); + std::shared_ptr restaurant = std::make_shared(name, restaurantOwner.getId()); m_restaurants[restaurant->getId()] = restaurant; restaurantOwner.addRestaurant(restaurant); std::cout << "Restaurant " << restaurant->getName() << " with ID " << restaurant->getId() << " created successfully\n"; @@ -489,7 +662,7 @@ void FoodDeliveryController::listRestaurantOrders() const << "\n"; for (auto& item : orderItems) { - MenuItem& menuItem = item->getMenuItem(); + MenuItem& menuItem = *(item->getMenuItem()); std::cout << std::left << std::setw(25) << menuItem.getName() << std::left << std::setw(10) << menuItem.getPrice() << std::left << std::setw(10) << item->getQuantity() @@ -542,7 +715,7 @@ void FoodDeliveryController::markOrderReady() if (orderStatus == OrderStatus::CREATED) { orderIterator->second->setStatus(OrderStatus::READYFORPICKUP); - std::shared_ptr deliveryAssignment = std::make_shared(*orderIterator->second); + std::shared_ptr deliveryAssignment = std::make_shared(orderIterator->second, orderIterator->second->getId()); m_assignments[deliveryAssignment->getId()] = deliveryAssignment; std::cout << "Order has been marked ready for pickup\n"; } @@ -638,7 +811,7 @@ void FoodDeliveryController::addMenuItem() const util::readString(description); std::cout << "Enter Item Price: "; util::readValue(price); - MenuItem menuItem(name, description, price); + MenuItem menuItem(name, description, price, restaurantIterator->second->getId()); restaurantIterator->second->addMenuItem(menuItem); std::cout << "Added new Menu Item " << menuItem.getName() << " with ID " << menuItem.getId() << " to Restaurant " << restaurantIterator->second->getName() << " successfully\n"; } @@ -728,7 +901,7 @@ void FoodDeliveryController::listCustomerOrders() const << "\n"; for (auto& item : orderItems) { - MenuItem& menuItem = item->getMenuItem(); + MenuItem& menuItem = *(item->getMenuItem()); std::cout << std::left << std::setw(25) << menuItem.getName() << std::left << std::setw(10) << menuItem.getPrice() << std::left << std::setw(10) << item->getQuantity() @@ -794,9 +967,9 @@ void FoodDeliveryController::placeOrder() { if (!order) { - order = std::make_shared(customer->getName()); + order = std::make_shared(restaurantIterator->second->getId(), customer->getId()); } - order->addItem(Item(*(menuItemIterator->second), quantity)); + order->addItem(Item(menuItemIterator->second, menuItemIterator->second->getId(), quantity, order->getId())); std::cout << menuItemIterator->second->getName() << " with quantity " << quantity << " has been added to your Order\n"; } else @@ -820,6 +993,7 @@ void FoodDeliveryController::placeOrder() { customer->addOrder(order); restaurantIterator->second->addOrder(order); + m_orders[order->getId()] = order; std::cout << "Order with ID " << order->getId() << " has been placed successfully\n"; } else @@ -912,8 +1086,8 @@ void FoodDeliveryController::listDeliveryAssignments() << "\n"; for (auto& assignment : assignments) { - Order& order = assignment.second->getOrder(); - users::const_iterator customer = m_users.find(order.getCustomerUsername()); + Order& order = *(assignment.second->getOrder()); + users::const_iterator customer = m_users.find(order.getCustomerId()); if (customer == m_users.end()) { throw std::runtime_error("Invalid state: Delivery Assignment has no associated Customer."); @@ -957,7 +1131,8 @@ void FoodDeliveryController::acceptDeliveryAssignment() if (deliveryStatus == DeliveryStatus::CREATED) { assignmentIterator->second->setStatus(DeliveryStatus::ACCEPTED); - assignmentIterator->second->getOrder().setStatus(OrderStatus::OUTFORDELIVERY); + assignmentIterator->second->setDeliveryPartnerId(deliveryPartner->getId()); + assignmentIterator->second->getOrder()->setStatus(OrderStatus::OUTFORDELIVERY); deliveryPartner->acceptDeliveryAssignment(assignmentIterator->second); std::cout << "Delivery Assignment " << assignmentIterator->second->getId() << " has been accepted successfully!\n"; } @@ -977,9 +1152,8 @@ void FoodDeliveryController::acceptDeliveryAssignment() } } -void FoodDeliveryController::confirmDeliveryAssignment() +void FoodDeliveryController::confirmDeliveryAssignment() const { - try { util::clear(); @@ -1005,7 +1179,7 @@ void FoodDeliveryController::confirmDeliveryAssignment() if (deliveryStatus == DeliveryStatus::ACCEPTED) { assignmentIterator->second->setStatus(DeliveryStatus::DELIVERED); - assignmentIterator->second->getOrder().setStatus(OrderStatus::DELIVERED); + assignmentIterator->second->getOrder()->setStatus(OrderStatus::DELIVERED); std::cout << "Delivery Assignment " << assignmentIterator->second->getId() << " has been completed successfully!\n"; } else @@ -1030,7 +1204,8 @@ void FoodDeliveryController::viewProfile() const { util::clear(); std::cout << "My Profile\n"; - std::cout << std::left << std::setw(10) << "Name " << ": " << m_authenticatedUser->getName() << "\n" + std::cout << std::left << std::setw(10) << "ID " << ": " << m_authenticatedUser->getId() << "\n" + << std::setw(10) << "Name " << ": " << m_authenticatedUser->getName() << "\n" << std::left << std::setw(10) << "Username " << ": " << m_authenticatedUser->getUsername() << "\n" << std::left << std::setw(10) << "Phone " << ": " << m_authenticatedUser->getPhone() << "\n" << std::left << std::setw(10) << "Email " << ": " << m_authenticatedUser->getEmail() << "\n" diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h index b80dbe8..4bf7cb8 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/FoodDeliveryController.h @@ -16,7 +16,7 @@ class Item; class Order; class DeliveryAssignment; -using users = std::map>; +using users = std::map>; using restaurants = std::map>; using menuItems = std::map>; using items = std::vector>; @@ -31,6 +31,8 @@ private: orders m_orders; deliveryAssignments m_assignments; std::shared_ptr m_authenticatedUser; + void loadStates(); + void persistStates(); public: void run(); void login(); @@ -48,7 +50,7 @@ public: void cancelOrder() const; void listDeliveryAssignments(); void acceptDeliveryAssignment(); - void confirmDeliveryAssignment(); + void confirmDeliveryAssignment() const; void viewProfile() const; }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Item.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Item.cpp index 4ac258c..0ed0b5b 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Item.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Item.cpp @@ -3,14 +3,98 @@ Author: Joel Mathew Thomas Date: 18-02-2026 */ +#include +#include #include "Item.h" +Item::Item(int id, std::shared_ptr item, int itemId, int quantity, int orderId) + : m_id(id), m_item(item), m_quantity(quantity), m_orderId(orderId), m_itemId(itemId) +{ + if (id > m_uid) + { + m_uid = id; + } +} + +int Item::m_uid = 0; + +int Item::getId() const +{ + return m_id; +} + int Item::getQuantity() const { return m_quantity; } -MenuItem& Item::getMenuItem() +std::shared_ptr Item::getMenuItem() { return m_item; } + +int Item::getOrderId() const +{ + return m_orderId; +} + +int Item::getMenuItemId() const +{ + return m_itemId; +} + +void Item::setMenuItem(std::shared_ptr menuItem) +{ + m_item = menuItem; +} + +std::string Item::serialize() const +{ + std::ostringstream serializedItem; + serializedItem << m_id << '|' + << m_quantity << '|' + << m_orderId << '|' + << m_itemId; + return serializedItem.str(); +} + +std::shared_ptr Item::deserialize(const std::string& record) +{ + int id, quantity, orderId, itemId; + std::string token; + std::istringstream serializedItem(record); + getline(serializedItem, token, '|'); + try { + id = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid Item ID in snapshot"); + } + getline(serializedItem, token, '|'); + try { + quantity = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid Quantity in Item in snapshot"); + } + getline(serializedItem, token, '|'); + try { + orderId = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid Order ID in Item in snapshot"); + } + getline(serializedItem, token, '|'); + try { + itemId = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid MenuItem ID in Item in snapshot"); + } + return std::make_shared(id, std::make_shared(), itemId, quantity, orderId); +} + diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Item.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Item.h index b8b6e53..c44deb5 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Item.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Item.h @@ -4,18 +4,29 @@ Date: 18-12-2026 */ #pragma once +#include #include "MenuItem.h" class Item { private: - MenuItem& m_item; + static int m_uid; + int m_id; + std::shared_ptr m_item; int m_quantity; - + int m_orderId; + int m_itemId; public: - Item(MenuItem& item, int quantity) - : m_item(item), m_quantity(quantity) - {} + Item() : m_id(++m_uid), m_quantity(0), m_orderId(0), m_itemId(0) {} + Item(std::shared_ptr item, int itemId, int quantity, int orderId) + : m_id(++m_uid), m_item(item), m_quantity(quantity), m_orderId(orderId), m_itemId(itemId) {} + Item(int, std::shared_ptr, int, int, int); + int getId() const; int getQuantity() const; - MenuItem& getMenuItem(); + std::shared_ptr getMenuItem(); + int getOrderId() const; + int getMenuItemId() const; + void setMenuItem(std::shared_ptr); + std::string serialize() const; + static std::shared_ptr deserialize(const std::string&); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/MenuItem.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/MenuItem.cpp index 3a5c967..1220e41 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/MenuItem.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/MenuItem.cpp @@ -3,11 +3,26 @@ Author: Joel Mathew Thomas Date: 18-02-2026 */ +#include #include #include "MenuItem.h" int MenuItem::m_uid = 0; + +MenuItem::MenuItem(int id, const std::string& name, const std::string& description, double price, int restaurantId): + m_id(id), + m_name(name), + m_description(description), + m_price(price), + m_restaurantId(restaurantId) +{ + if (id > m_uid) + { + m_uid = id; + } +} + int MenuItem::getId() const { return m_id; @@ -37,3 +52,51 @@ void MenuItem::setPrice(double price) } m_price = price; } + +int MenuItem::getRestaurantId() const +{ + return m_restaurantId; +} + +std::string MenuItem::serialize() const +{ + std::ostringstream serializedMenuItem; + serializedMenuItem << m_id << '|' + << m_name << '|' + << m_description << '|' + << m_price << '|' + << m_restaurantId; + return serializedMenuItem.str(); +} + +std::shared_ptr MenuItem::deserialize(const std::string& record) +{ + int id, restaurantId; + double price; + std::string name, description, token; + std::istringstream serializedMenuItem(record); + getline(serializedMenuItem, token, '|'); + try { + id = std::stoi(token); + } + catch (...) { + throw std::runtime_error("Invalid MenuItem ID in snapshot"); + } + getline(serializedMenuItem, name, '|'); + getline(serializedMenuItem, description, '|'); + getline(serializedMenuItem, token, '|'); + try { + price = std::stod(token); + } + catch (...) { + throw std::runtime_error("Invalid Price for MenuItem in snapshot"); + } + getline(serializedMenuItem, token, '|'); + try { + restaurantId = std::stoi(token); + } + catch (...) { + throw std::runtime_error("Invalid Restaurant ID for MenuItem in snapshot"); + } + return std::make_shared(id, name, description, price, restaurantId); +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/MenuItem.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/MenuItem.h index 1e646b9..efbe583 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/MenuItem.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/MenuItem.h @@ -5,6 +5,7 @@ Date: 18-12-2026 #pragma once #include +#include class MenuItem { @@ -14,23 +15,29 @@ private: std::string m_name; std::string m_description; double m_price; + int m_restaurantId; public: MenuItem(): m_id(++m_uid), m_name(""), m_description(""), - m_price(0) + m_price(0), + m_restaurantId(0) {} - MenuItem(const std::string& name, const std::string& description, double price): + MenuItem(const std::string& name, const std::string& description, double price, int restaurantId): m_id(++m_uid), m_name(name), m_description(description), - m_price(price) + m_price(price), + m_restaurantId(restaurantId) {} + MenuItem(int, const std::string&, const std::string&, double, int); int getId() const; std::string getName() const; std::string getDescription() const; double getPrice() const; void setPrice(double); + int getRestaurantId() const; + std::string serialize() const; + static std::shared_ptr deserialize(const std::string&); }; - diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.cpp index bcb4e7d..282a5e7 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.cpp @@ -1,7 +1,27 @@ +/* +Author: Joel Mathew Thomas +Date: 18-12-2026 +*/ + +#include +#include #include "Order.h" int Order::m_uid = 0; + +Order::Order(int id, OrderStatus status, int restaurantId,int customerId): + m_id(id), + m_status(status), + m_customerId(customerId), + m_restaurantId(restaurantId) +{ + if (id > m_uid) + { + m_uid = id; + } +} + int Order::getId() const { return m_id; @@ -22,7 +42,7 @@ double Order::getTotal() const double total = 0; for (auto& itemPointer : m_items) { - total += itemPointer->getMenuItem().getPrice() * itemPointer->getQuantity(); + total += itemPointer->getMenuItem()->getPrice() * itemPointer->getQuantity(); } return total; } @@ -37,7 +57,63 @@ void Order::setStatus(const OrderStatus& orderStatus) m_status = orderStatus; } -const std::string& Order::getCustomerUsername() +int Order::getCustomerId() const { - return m_customerUsername; + return m_customerId; +} + +int Order::getRestaurantId() const +{ + return m_restaurantId; +} + +std::string Order::serialize() const +{ + std::ostringstream serializedOrder; + serializedOrder << m_id << '|' + << static_cast(m_status) << '|' + << m_customerId << '|' + << m_restaurantId; + return serializedOrder.str(); +} + +std::shared_ptr Order::deserialize(const std::string& record) +{ + int id, customerId, restaurantId; + OrderStatus status; + std::string token; + std::istringstream serializedOrder(record); + getline(serializedOrder, token, '|'); + try { + id = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid Order ID in snapshot"); + } + getline(serializedOrder, token, '|'); + int statusInt = std::stoi(token); + if (statusInt < static_cast(OrderStatus::CREATED) || + statusInt > static_cast(OrderStatus::CANCELLED)) + { + throw std::runtime_error("Invalid Order Status for Order in snapshot"); + } + status = static_cast(statusInt); + getline(serializedOrder, token, '|'); + try { + customerId = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid Customer ID for Order in snapshot"); + } + getline(serializedOrder, token, '|'); + try { + restaurantId = std::stoi(token); + } + catch (...) + { + throw std::runtime_error("Invalid Restaurant ID for Order in snapshot"); + } + return std::make_shared(id, status, restaurantId, customerId); } diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.h index 440b820..cc16b18 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Order.h @@ -26,22 +26,26 @@ private: static int m_uid; int m_id; items m_items; - double m_totalAmount; OrderStatus m_status; - std::string m_customerUsername; + int m_customerId; + int m_restaurantId; public: - Order(const std::string& customerUsername) : + Order(int restaurantId, int customerId) : m_id(++m_uid), - m_totalAmount(0), m_status(OrderStatus::CREATED), - m_customerUsername(customerUsername) + m_customerId(customerId), + m_restaurantId(restaurantId) {} + Order(int, OrderStatus, int, int); int getId() const; void addItem(const Item&); items& getItems(); double getTotal() const; OrderStatus getStatus() const; void setStatus(const OrderStatus&); - const std::string& getCustomerUsername(); + int getCustomerId() const; + int getRestaurantId() const; + std::string serialize() const; + static std::shared_ptr deserialize(const std::string&); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.cpp index b6494a6..1d06e78 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.cpp @@ -3,10 +3,23 @@ Author: Joel Mathew Thomas Date: 18-02-2026 */ +#include #include "Restaurant.h" int Restaurant::m_uid = 0; +Restaurant::Restaurant(int id, const std::string& name, bool isOpen, int ownerId) : + m_id(id), + m_name(name), + m_isOpen(isOpen), + m_ownerId(ownerId) +{ + if (id > m_uid) + { + m_uid = id; + } +} + int Restaurant::getId() const { return m_id; @@ -52,3 +65,44 @@ void Restaurant::setStatus(bool status) { m_isOpen = status; } + +int Restaurant::getOwnerId() const +{ + return m_ownerId; +} + +std::string Restaurant::serialize() const +{ + std::ostringstream serializedRestaurant; + serializedRestaurant << m_id << '|' + << m_name << '|' + << (m_isOpen ? '1' : '0') << '|' + << m_ownerId; + return serializedRestaurant.str(); +} + +std::shared_ptr Restaurant::deserialize(const std::string& record) +{ + int id, ownerId; + std::string name, token; + bool isOpen; + std::istringstream serializedRestaurant(record); + getline(serializedRestaurant, token, '|'); + try { + id = std::stoi(token); + } + catch (...) { + throw std::runtime_error("Invalid Restaurant ID in snapshot"); + } + getline(serializedRestaurant, name, '|'); + getline(serializedRestaurant, token, '|'); + isOpen = (token == "1"); + getline(serializedRestaurant, token, '|'); + try { + ownerId = std::stoi(token); + } + catch (...) { + throw std::runtime_error("Invalid Owner ID for Restaurant in snapshot"); + } + return std::make_shared(id, name, isOpen, ownerId); +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.h index de264d1..d754241 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Restaurant.h @@ -22,17 +22,21 @@ private: menuItems m_menuItems; orders m_orders; bool m_isOpen; + int m_ownerId; public: Restaurant() : m_id(++m_uid), m_name(""), - m_isOpen(true) + m_isOpen(true), + m_ownerId(0) {} - Restaurant(const std::string& name) : + Restaurant(const std::string& name, int ownerId) : m_id(++m_uid), m_name(name), - m_isOpen(true) + m_isOpen(true), + m_ownerId(ownerId) {} + Restaurant(int, const std::string&, bool, int); int getId() const; void addMenuItem(const MenuItem&); menuItems& getMenuItems(); @@ -41,4 +45,7 @@ public: void addOrder(std::shared_ptr); bool getStatus() const; void setStatus(bool); + int getOwnerId() const; + std::string serialize() const; + static std::shared_ptr deserialize(const std::string&); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.h index e9717c0..620f86d 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/RestaurantOwner.h @@ -25,6 +25,15 @@ public: const std::string& email, const std::string& address) : User(username, name, phone, password, email, address) + {} + RestaurantOwner(int id, + const std::string& username, + const std::string& name, + const std::string& phone, + const std::string& password, + const std::string& email, + const std::string& address) : + User(id, username, name, phone, password, email, address) {} void addRestaurant(std::shared_ptr); restaurants& getRestaurants(); diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp.vcxproj b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp.vcxproj index 32c19c5..5f39e68 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp.vcxproj +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp.vcxproj @@ -161,6 +161,14 @@ + + + + + + + + diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp.vcxproj.filters b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp.vcxproj.filters index ff4b6e1..a8f0860 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp.vcxproj.filters +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp.vcxproj.filters @@ -135,4 +135,22 @@ Utility + + + Files + + + Files + + + Files + + + Files + + + Files + + + \ No newline at end of file diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.cpp b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.cpp index c7c3d3c..660c42c 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.cpp +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.cpp @@ -3,7 +3,40 @@ Author: Joel Mathew Thomas Date: 18-02-2026 */ +#include +#include #include "User.h" +#include "RestaurantOwner.h" +#include "Customer.h" +#include "DeliveryPartner.h" + +int User::m_uid = 0; + +User::User(int id, + const std::string& username, + const std::string& name, + const std::string& phone, + const std::string& password, + const std::string& email, + const std::string& address) : + m_id(id), + m_username(username), + m_name(name), + m_phone(phone), + m_password(password), + m_email(email), + m_address(address) +{ + if (id > m_uid) + { + m_uid = id; + } +} + +int User::getId() const +{ + return m_id; +} std::string User::getUsername() const { @@ -34,3 +67,47 @@ bool User::login(const std::string& password) const { return password == m_password; } + +std::string User::serialize() const +{ + std::ostringstream serializedUser; + serializedUser << m_id << '|' + << m_username << '|' + << m_name << '|' + << m_phone << '|' + << m_password << '|' + << m_email << '|' + << m_address << '|' + << getType(); + return serializedUser.str(); +} + +std::shared_ptr User::deserialize(const std::string& record) +{ + int id; + std::string username, name, phone, password, email, address, type, token; + std::istringstream serializedUser(record); + getline(serializedUser, token, '|'); + try { + id = std::stoi(token); + } + catch (...) { + throw std::runtime_error("Invalid User ID in snapshot"); + } + getline(serializedUser, username, '|'); + getline(serializedUser, name, '|'); + getline(serializedUser, phone, '|'); + getline(serializedUser, password, '|'); + getline(serializedUser, email, '|'); + getline(serializedUser, address, '|'); + getline(serializedUser, type, '|'); + if (type == "RestaurantOwner") + return std::make_shared(id, username, name, phone, password, email, address); + else if (type == "Customer") + return std::make_shared(id, username, name, phone, password, email, address); + else if (type == "DeliveryPartner") + return std::make_shared(id, username, name, phone, password, email, address); + else { + throw std::runtime_error("Cannot deserialize User. Snaphshot is corrupted!"); + } +} diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.h b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.h index 4501881..1ad64b7 100644 --- a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.h +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/User.h @@ -5,10 +5,13 @@ Date: 17-02-2026 #pragma once #include +#include class User { private: + static int m_uid; + int m_id; std::string m_username; std::string m_name; std::string m_phone; @@ -16,7 +19,8 @@ private: std::string m_email; std::string m_address; public: - User(): + User() : + m_id(0), m_username(""), m_name(""), m_phone(""), @@ -30,6 +34,7 @@ public: const std::string& password, const std::string& email, const std::string& address): + m_id(++m_uid), m_username(username), m_name(name), m_phone(phone), @@ -37,7 +42,15 @@ public: m_email(email), m_address(address) {} + User(int, + const std::string&, + const std::string&, + const std::string&, + const std::string&, + const std::string&, + const std::string&); virtual ~User() = default; + int getId() const; std::string getUsername() const; std::string getName() const; std::string getPhone() const; @@ -45,5 +58,7 @@ public: std::string getAddress() const; virtual std::string getType() const = 0; bool login(const std::string&) const; + std::string serialize() const; + static std::shared_ptr deserialize(const std::string&); }; diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/assignments.txt b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/assignments.txt new file mode 100644 index 0000000..e69de29 diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/items.txt b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/items.txt new file mode 100644 index 0000000..e69de29 diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/menuItems.txt b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/menuItems.txt new file mode 100644 index 0000000..8a05113 --- /dev/null +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/menuItems.txt @@ -0,0 +1,150 @@ +1|Grilled Chicken|Classic grilled chicken|12.5|1 +2|Veg Burger|Vegetable patty burger|8|1 +3|Cheese Burger|Beef burger with cheese|10|1 +4|French Fries|Crispy fries|4.5|1 +5|Grilled Sandwich|Toasted sandwich|6|1 +6|Chicken Wrap|Grilled chicken wrap|9|1 +7|Veg Wrap|Vegetable wrap|7.5|1 +8|Cola|Chilled soft drink|2|1 +9|Iced Tea|Cold brewed tea|2.5|1 +10|Brownie|Chocolate brownie|5|1 +11|Pasta Alfredo|Creamy pasta|11|2 +12|Pasta Marinara|Tomato pasta|10|2 +13|Garlic Bread|Toasted garlic bread|4|2 +14|Caesar Salad|Fresh salad|7.5|2 +15|Grilled Veggies|Seasonal vegetables|6.5|2 +16|Chicken Pasta|Pasta with chicken|12.5|2 +17|Soup of the Day|Daily soup|5|2 +18|Coffee|Hot brewed coffee|3|2 +19|Tea|Hot tea|2.5|2 +20|Cheesecake|Classic cheesecake|6|2 +21|Veg Bowl|Healthy veg bowl|9|3 +22|Chicken Bowl|Protein chicken bowl|11.5|3 +23|Quinoa Salad|Quinoa mixed salad|10|3 +24|Fruit Salad|Fresh fruit mix|6|3 +25|Avocado Toast|Toasted avocado bread|7.5|3 +26|Smoothie|Fruit smoothie|5.5|3 +27|Grilled Tofu|Tofu with herbs|9.5|3 +28|Veg Soup|Warm vegetable soup|5|3 +29|Green Juice|Fresh juice|4.5|3 +30|Yogurt Cup|Chilled yogurt|3.5|3 +31|Chicken Wings|Spicy wings|10.5|4 +32|Veg Nuggets|Crispy nuggets|7|4 +33|Loaded Fries|Fries with toppings|8.5|4 +34|Chicken Burger|Burger with chicken|9.5|4 +35|Veg Burger|Classic veg burger|8|4 +36|Onion Rings|Crispy onion rings|5|4 +37|Hot Dog|Grilled hot dog|6.5|4 +38|Milkshake|Vanilla milkshake|4.5|4 +39|Soda|Carbonated drink|2|4 +40|Ice Cream|Vanilla scoop|3.5|4 +41|Breakfast Combo|Eggs and toast|8|5 +42|Pancakes|Fluffy pancakes|6.5|5 +43|Omelette|Cheese omelette|5.5|5 +44|Toast Butter|Buttered toast|3|5 +45|Fruit Plate|Seasonal fruits|4.5|5 +46|Lunch Plate|Daily lunch meal|10|5 +47|Veg Curry|Mixed veg curry|8.5|5 +48|Rice Bowl|Steamed rice|4|5 +49|Tea|Hot tea|2|5 +50|Coffee|Fresh coffee|3|5 +51|Chicken Rice|Rice with chicken|11|6 +52|Veg Rice|Rice with vegetables|9|6 +53|Noodles|Stir fried noodles|8.5|6 +54|Veg Manchurian|Veg balls in sauce|9.5|6 +55|Chicken Manchurian|Chicken in sauce|11.5|6 +56|Spring Rolls|Crispy rolls|6|6 +57|Fried Rice|Classic fried rice|8|6 +58|Hot Soup|Soup bowl|4.5|6 +59|Cold Drink|Chilled beverage|2.5|6 +60|Ice Cream|Chocolate scoop|3.5|6 +61|Chicken Sandwich|Grilled sandwich|8.5|7 +62|Veg Sandwich|Vegetable sandwich|7|7 +63|Club Sandwich|Triple layer sandwich|9.5|7 +64|French Fries|Crispy fries|4|7 +65|Cheese Toast|Toasted cheese|5|7 +66|Soup|Daily soup|4.5|7 +67|Salad|Fresh salad|6|7 +68|Cold Coffee|Iced coffee|3.5|7 +69|Tea|Hot tea|2|7 +70|Brownie|Chocolate brownie|5.5|7 +71|Steak|Grilled steak|15|8 +72|Chicken Steak|Chicken fillet|13|8 +73|Veg Steak|Grilled veg steak|11|8 +74|Mashed Potato|Creamy potato|5.5|8 +75|Grilled Veggies|Mixed vegetables|6.5|8 +76|Soup|Chef special soup|5|8 +77|Garlic Bread|Toasted bread|4.5|8 +78|Soft Drink|Cold beverage|2.5|8 +79|Dessert|Daily dessert|6|8 +80|Ice Cream|Vanilla ice cream|3.5|8 +81|Chicken Pizza|Thin crust pizza|12|9 +82|Veg Pizza|Vegetable pizza|10|9 +83|Cheese Pizza|Cheesy pizza|11|9 +84|Garlic Bread|Garlic breadsticks|4.5|9 +85|Pasta|Italian pasta|9.5|9 +86|Salad|Side salad|5|9 +87|Chicken Wings|Spicy wings|8.5|9 +88|Cola|Cold cola|2|9 +89|Brownie|Chocolate brownie|5.5|9 +90|Ice Cream|Vanilla scoop|3.5|9 +91|Soup Bowl|Warm soup|5|10 +92|Veg Curry|Vegetable curry|8.5|10 +93|Chicken Curry|Spicy chicken curry|10.5|10 +94|Rice|Steamed rice|4|10 +95|Flatbread|Soft flatbread|3|10 +96|Salad|Fresh salad|6|10 +97|Dessert|Sweet dessert|5.5|10 +98|Tea|Hot tea|2|10 +99|Coffee|Fresh coffee|3|10 +100|Ice Cream|Chocolate scoop|3.5|10 +101|Veg Bowl|Healthy veg bowl|9|11 +102|Tofu Stir Fry|Tofu with veggies|10.5|11 +103|Green Salad|Fresh greens|7|11 +104|Veg Soup|Warm soup|5|11 +105|Smoothie|Fruit smoothie|5.5|11 +106|Grilled Veg|Grilled vegetables|8.5|11 +107|Rice Bowl|Steamed rice|4|11 +108|Juice|Fresh juice|4.5|11 +109|Tea|Herbal tea|2.5|11 +110|Fruit Cup|Mixed fruits|3.5|11 +111|BBQ Chicken|Grilled BBQ chicken|13|12 +112|BBQ Veg|Grilled veg platter|11|12 +113|Roasted Potatoes|Herb potatoes|6|12 +114|Grilled Corn|Butter corn|5.5|12 +115|Chicken Skewers|Skewered chicken|12|12 +116|Veg Skewers|Vegetable skewers|9.5|12 +117|Soup|Hot soup|4.5|12 +118|Soft Drink|Cold drink|2.5|12 +119|Dessert|Sweet dish|5.5|12 +120|Ice Cream|Vanilla ice cream|3.5|12 +121|Chicken Burger|Fast chicken burger|9.5|13 +122|Veg Burger|Quick veg burger|8|13 +123|French Fries|Golden fries|4|13 +124|Chicken Nuggets|Crispy nuggets|7|13 +125|Veg Nuggets|Veg nuggets|6.5|13 +126|Wrap|Quick wrap|7.5|13 +127|Soft Drink|Cold beverage|2.5|13 +128|Milkshake|Chocolate shake|4.5|13 +129|Ice Cream|Vanilla scoop|3.5|13 +130|Cookie|Choco cookie|2.5|13 +131|Veg Platter|Mixed veg platter|10|14 +132|Chicken Platter|Chicken platter|12.5|14 +133|Soup|Warm soup|5|14 +134|Salad|Fresh salad|6|14 +135|Rice Bowl|Rice bowl|4.5|14 +136|Flatbread|Soft bread|3|14 +137|Dessert|Sweet dessert|5.5|14 +138|Tea|Hot tea|2|14 +139|Coffee|Fresh coffee|3|14 +140|Ice Cream|Vanilla ice cream|3.5|14 +141|Chicken Wrap|Spicy chicken wrap|9.5|15 +142|Veg Wrap|Veggie wrap|8|15 +143|Rice Bowl|Rice bowl|4.5|15 +144|Noodles|Stir noodles|8.5|15 +145|Soup|Hot soup|5|15 +146|Grilled Chicken|Herb grilled chicken|12|15 +147|Salad|Fresh salad|6|15 +148|Soft Drink|Cold drink|2.5|15 +149|Dessert|Sweet dessert|5.5|15 +150|Ice Cream|Chocolate ice cream|3.5|15 diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/orders.txt b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/orders.txt new file mode 100644 index 0000000..e69de29 diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/restaurants.txt b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/restaurants.txt new file mode 100644 index 0000000..744bc7d --- /dev/null +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/restaurants.txt @@ -0,0 +1,15 @@ +1|Urban Grill|1|1 +2|Corner Bistro|1|1 +3|Fresh Plate|1|1 +4|The Food Spot|0|1 +5|Daily Dine|1|1 +6|Metro Kitchen|1|2 +7|Central Eats|1|2 +8|Prime Bites|1|2 +9|Kitchen Square|0|2 +10|Table & Spoon|1|2 +11|Green Fork|1|3 +12|Open Flame|1|3 +13|Quick Serve|1|3 +14|Urban Table|0|3 +15|Flavor Hub|1|3 diff --git a/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/users.txt b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/users.txt new file mode 100644 index 0000000..906daef --- /dev/null +++ b/Trenser.FoodDeliveryApp/Trenser.FoodDeliveryApp/users.txt @@ -0,0 +1,9 @@ +1|alex|Alex Miller|100000001|alex|alex@mail.com|CityOne|RestaurantOwner +2|jordan|Jordan Smith|100000002|jordan|jordan@mail.com|CityTwo|RestaurantOwner +3|taylor|Taylor Brown|100000003|taylor|taylor@mail.com|CityThree|RestaurantOwner +4|emma|Emma Wilson|100000004|emma|emma@mail.com|CityOne|Customer +5|liam|Liam Johnson|100000005|liam|liam@mail.com|CityTwo|Customer +6|olivia|Olivia Davis|100000006|olivia|olivia@mail.com|CityThree|Customer +7|noah|Noah Anderson|100000007|noah|noah@mail.com|CityOne|DeliveryPartner +8|ava|Ava Martinez|100000008|ava|ava@mail.com|CityTwo|DeliveryPartner +9|ethan|Ethan Thomas|100000009|ethan|ethan@mail.com|CityThree|DeliveryPartner