Files
joelthomastrenser 9533a74d87 Implement Create Customer functionality
<UserStory> CUS004: Register Customer Account </UserStory>

<Changes>
    1. Added customer registration flow in UserInterface to collect username, name, email, password, and phone inputs.
    2. Added validation for email, password, and phone number before proceeding with registration.
    3. Updated Controller::createCustomer() and UserManagementService::createUser() to support customer registration with full user details including name.
    4. Added duplicate username validation in UserManagementService using map predicate search.
    5. Added user creation and insertion logic in UserManagementService to store newly registered customer records in DataStore.
    6. Added observer attachment for newly registered users to inventory(only for admins), payment, and service notification services.
    7. Added registration confirmation message display after successful customer creation.
</Changes>

<Test>

  Precondition:
  1. Application is running and user is on the main login/register menu.
  2. DataStore is initialized and available for storing user records.
  3. Existing customer records may already be present in the system.

  Steps:
  1. Select the Register Customer option.
  2. Enter valid username, name, email, password, and phone number.
  3. Submit the registration request.
     - Verify that the system accepts valid inputs and creates the customer account.
  4. Attempt registration using an already existing username.
     - Verify that the duplicate registration is rejected.
  5. Register again with valid unique details.
     - Verify that the registration confirmation message is displayed.
  6. Re-access application data after registration.
     - Verify that the customer data is stored persistently.

</Test>

<Review>
Sreeja Reghukumar, please review
</Review>
2026-05-20 17:45:02 +05:30

150 lines
3.7 KiB
C++

#include "Controller.h"
#include "Enums.h"
bool Controller::login(const std::string& username, const std::string& password)
{
return false;
}
void Controller::logout()
{
}
void Controller::changePassword(const std::string& newPassword)
{
}
void Controller::createCustomer(const std::string& username, const std::string& name, const std::string& password, const std::string& email, const std::string& phone)
{
m_userManagementService.createUser(username, name, password, email, phone, util::UserType::CUSTOMER);
}
const User* Controller::getAuthenticatedUser()
{
return nullptr;
}
void Controller::createTechnician(const std::string& username, const std::string& password, const std::string& email, const std::string& phone)
{
}
void Controller::updateUserDetails(const std::string& email, const std::string& phone)
{
}
util::Map<std::string, const Service*> Controller::getServices()
{
return util::Map<std::string, const Service*>();
}
util::Map<std::string, const ComboPackage*> Controller::getComboPackages()
{
return util::Map<std::string, const ComboPackage*>();
}
void Controller::purchaseService(const util::Vector<std::string>& serviceIDs, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel)
{
}
void Controller::purchaseComboPackage(const std::string& comboPackageID, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel)
{
}
util::Map<std::string, const InventoryItem*> Controller::getInventoryItems()
{
return util::Map<std::string, const InventoryItem*>();
}
const InventoryItem* Controller::getInventoryItem(const std::string& inventoryItemID)
{
return nullptr;
}
void Controller::addInventoryItem(const std::string& partName, int quantity, double price)
{
}
void Controller::removeInventoryItem(const std::string& inventoryItemID)
{
}
util::Map<std::string, const ServiceBooking*> Controller::getServiceBookings()
{
return util::Map<std::string, const ServiceBooking*>();
}
util::Map<std::string, const ServiceBooking*> Controller::getServiceBookingsByUser(const std::string userID)
{
return util::Map<std::string, const ServiceBooking*>();
}
util::Map<std::string, const User*> Controller::getUsers()
{
return util::Map<std::string, const User*>();
}
util::Map<std::string, const User*> Controller::getUsers(util::UserType userType)
{
return util::Map<std::string, const User*>();
}
void Controller::createJobCard(const std::string& bookingID, const std::string& technicianID, const std::string& serviceID)
{
}
void Controller::createService(const std::string& name, const util::Vector<std::string>& inventoryItemIDs, double laborCost)
{
}
void Controller::removeService(const std::string& serviceID)
{
}
util::Map<std::string, const JobCard*> Controller::getJobCardsByUser()
{
return util::Map<std::string, const JobCard*>();
}
void Controller::completeJob(const std::string& jobID)
{
}
void Controller::removeUser(const std::string& userID)
{
}
void Controller::createComboPackage(const std::string& name, const util::Vector<std::string>& serviceIDs, double discountPercentage)
{
}
void Controller::removeComboPackage(const std::string& comboPackageID)
{
}
util::Map<std::string, const Invoice*> Controller::getInvoicesByUser()
{
return util::Map<std::string, const Invoice*>();
}
void Controller::completePayment(const std::string& invoiceID, util::PaymentMode paymentMode)
{
}
util::Vector<const Notification*> Controller::getNotifications()
{
return util::Vector<const Notification*>();
}
void Controller::deleteNotification(const std::string& notificationID)
{
}
void Controller::configureNotifications(const std::string& userID, bool paymentNotifications, bool serviceNotifications)
{
}
void Controller::runSystemChecks()
{
}