Files
Training-Team2-Zenvy-Jan26/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h
T
joelthomastrenser 7351186baf Refactor shortlisted candidates access and fix index check
<UserStory> EMP0012 : Employee Management </UserStory>

<Changes>
 - Changed getShorlistedCandidates() to return by value instead of reference
 - Updated controller and service method signatures accordingly
 - Fixed off-by-one error when selecting shortlisted candidate
</Changes>

<Review>
Smitha Mohan
</Review>
2026-04-16 10:16:16 +05:30

65 lines
2.3 KiB
C++

#pragma once
#include <vector>
#include <tuple>
#include <algorithm>
#include <utility>
#include "DataStore.h"
#include "Enums.h"
#include "StringHelper.h"
using Employees = std::vector<std::shared_ptr<const Employee>>;
class EmployeeManagementService
{
private:
DataStore& m_dataStore;
public:
EmployeeManagementService() : m_dataStore(DataStore::getInstance()) {};
void createEmployee(Enums::EmployeeType, Enums::EmployeeDesignation, const std::string&, const std::string&, const std::string&);
bool deactivateEmployee(const std::string&);
bool updateDesignation(const std::string&,Enums::EmployeeDesignation);
void updateProfile(const std::string&,const std::string&);
std::pair<Enums::EmployeeType, std::vector<std::shared_ptr<const Employee>>> searchEmployee(const std::string&);
std::shared_ptr<const Employee> getCurrentEmployee();
std::vector<std::shared_ptr<Candidate>> getShorlistedCandidates();
void loadEmployees();
void saveEmployees();
template<typename... Types>
Employees getEmployees(Types... types)
{
Employees filteredEmployees;
const auto& employees = m_dataStore.getEmployees();
std::vector<Enums::EmployeeType> filterTypes = { types... };
for (const auto& employeePair : employees)
{
const auto& employee = employeePair.second;
if (employee->getEmployeeAccountStatus() != Enums::AccountStatus::ACTIVE)
continue;
auto employeeType = employee->getEmployeeType();
if (filterTypes.empty())
{
if (employeeType == Enums::EmployeeType::ADMIN)
continue;
}
else
{
if (std::find(filterTypes.begin(), filterTypes.end(), employeeType) == filterTypes.end())
continue;
}
filteredEmployees.push_back(employee);
}
std::sort(
filteredEmployees.begin(),
filteredEmployees.end(),
[](const std::shared_ptr<const Employee>& employeeOne,
const std::shared_ptr<const Employee>& employeeTwo)
{
return util::extractNumber(employeeOne->getId()) <
util::extractNumber(employeeTwo->getId());
}
);
return filteredEmployees;
}
};