From 33cbb1dac3fc3aeff912e367f06cb17b60fae0ae Mon Sep 17 00:00:00 2001 From: Avinash Rajesh Date: Tue, 26 May 2026 20:03:02 +0530 Subject: [PATCH] Fix Update Profile and User Validation Issues - Included Validator.h in UserManagementService.cpp for duplicate checks. - Enhanced updateUserDetails in UserManagementService to validate: - Throw error if user does not exist. - Throw error if email already exists among active users. - Throw error if phone number already exists among active users. - Implemented new duplicate validation functions in Validator.cpp: - isUsernameDuplicate - isPhoneDuplicate - isEmailDuplicate - Declared new duplicate validation functions in Validator.h. - Updated CustomerMenu::updateDetails: - Added "Update Details" header for clarity. - Improved error messages with newline formatting. - Added success message with newline formatting. Fixes #1746 --- .../services/UserManagementService.cpp | 10 +++++- .../utilities/Validator.cpp | 35 ++++++++++++++++++- .../views/CustomerMenu.cpp | 8 +++-- 3 files changed, 48 insertions(+), 5 deletions(-) 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(); }