diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp index 613a3d2..28263e8 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/services/UserManagementService.cpp @@ -111,7 +111,15 @@ void UserManagementService::updateUserDetails(const std::string& userID, const s int index = usersMap.find(userID); if (index == -1) { - throw std::runtime_error("User does not exist!"); + throw std::runtime_error("User does not exist!\n"); + } + if (util::isEmailDuplicate(email, usersMap)) + { + throw std::runtime_error("Email already exists!\n"); + } + if (util::isPhoneDuplicate(phone, usersMap)) + { + throw std::runtime_error("Phone number already exists!\n"); } User* user = usersMap.getValueAt(index); user->setEmail(email); diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Validator.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Validator.cpp index cdba432..f56d660 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Validator.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/utilities/Validator.cpp @@ -108,6 +108,17 @@ bool util::isPasswordValid(const std::string& password) return hasUpper && hasLower && hasDigit && hasSpecial; } +/* + * Function: isUsernameDuplicate + * Description: Checks if the given username already exists among active users. + * Parameters: + * username - string containing the username to validate + * usersMap - map of user objects keyed by identifier + * Returns: + * bool - true if the username is already in use by an active user, false otherwise + * Notes: + * - Only considers users with state util::State::ACTIVE + */ bool util::isUsernameDuplicate(const std::string& username, const util::Map& usersMap) { int index = usersMap.findIf( @@ -119,6 +130,17 @@ bool util::isUsernameDuplicate(const std::string& username, const util::Map& usersMap) { int index = usersMap.findIf( @@ -130,6 +152,17 @@ bool util::isPhoneDuplicate(const std::string& phone, const util::Map& usersMap) { int index = usersMap.findIf( @@ -139,4 +172,4 @@ bool util::isEmailDuplicate(const std::string& email, const util::Map userList = m_controller.getUsers(); util::clear(); + std::cout << "Update Details\n"; std::cout << "Enter new email: "; util::read(email); if (!util::isEmailValid(email)) { - std::cout << "Error: Email is invalid!"; + std::cout << "Error: Email is invalid!\n"; util::pressEnter(); return; } @@ -156,12 +158,12 @@ void CustomerMenu::updateDetails() util::read(phone); if (!util::isPhoneNumberValid(phone)) { - std::cout << "Error: Phone number is invalid!"; + std::cout << "Error: Phone number is invalid!\n"; util::pressEnter(); return; } m_controller.updateUserDetails(email, phone); - std::cout << "Profile details updated successfully"; + std::cout << "Profile details updated successfully\n"; util::pressEnter(); }