#include #include "ServiceManagementService.h" #include "AuthenticationManagementService.h" #include "Service.h" #include "ServiceBooking.h" #include "Factory.h" void ServiceManagementService::purchaseService(const util::Vector& serviceIDs, const std::string& vehicleNumber, const std::string& vehicleBrand, const std::string& vehicleModel) { AuthenticationManagementService m_authenticationManagementService; auto authenticatedUser = m_authenticationManagementService.getAuthenticatedUser(); if (authenticatedUser == nullptr) { throw std::runtime_error("No user is currently logged in!"); } auto& servicesMap = m_dataStore.getServices(); auto& serviceBookingMap = m_dataStore.getServiceBookings(); util::Map selectedServices; int selectedServicesCount = serviceIDs.getSize(); for (int index = 0; index < selectedServicesCount; index++) { int serviceIndex = servicesMap.find(serviceIDs[index]); if (serviceIndex == -1) { throw std::runtime_error("Service not found!"); } Service* service = servicesMap.getValueAt(serviceIndex); selectedServices[service->getId()] = service; } ServiceBooking* serviceBooking = Factory::getObject(util::ServiceJobStatus::STARTED, selectedServices, authenticatedUser->getId(), authenticatedUser, vehicleNumber, vehicleBrand, vehicleModel, 0); if (serviceBooking == nullptr) { throw std::runtime_error("Failed to create service booking"); } serviceBookingMap[serviceBooking->getId()] = serviceBooking; sendNotification(authenticatedUser, "Service Booking succeeded", "Your service booking has been successfully placed with ID " + serviceBooking->getId()); }