Files
Training-Team2-Zenvy-Jan26/Trenser.Zenvy/Trenser.Zenvy/services/EmployeeManagementService.h
T
2026-04-17 12:01:48 +05:30

81 lines
2.9 KiB
C++

/*
* File: EmployeeManagementService.h
* Description: Provides services for managing employees, including creation, deactivation,
* designation updates, profile modifications, searching, and retrieval of
* shortlisted candidates.
* Author: Trenser
* Created: 07-Apr-2026
*/
#pragma once
#include <vector>
#include <tuple>
#include <algorithm>
#include <utility>
#include "DataStore.h"
#include "Enums.h"
#include "StringHelper.h"
using Employees = std::vector<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<const Employee*>> searchEmployee(const std::string&);
const Employee* getCurrentEmployee();
std::vector<Candidate*> getShorlistedCandidates();
void loadEmployees();
void saveEmployees();
/*
* Function: getEmployees (template)
* Description: Retrieves active employees filtered by specified types. Excludes admin employees
* if no filter is provided.
* Parameters:
* types... - variadic list of employee types
* Returns:
* Employees - vector of pointers to filtered employees
*/
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 Employee* employeeOne,
const Employee* employeeTwo)
{
return util::extractNumber(employeeOne->getId()) <
util::extractNumber(employeeTwo->getId());
}
);
return filteredEmployees;
}
};