Add Workfeed module with routes, configurations, and API integration handling for employees, shifts, and departments. Update OpenAPI spec and include unit tests for endpoint wiring and filtering logic.
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
namespace routes;
|
||||
|
||||
use classes\authentication;
|
||||
use classes\response;
|
||||
use classes\router;
|
||||
use classes\workfeed;
|
||||
use objects\logs_o;
|
||||
use traits\route_t;
|
||||
|
||||
class moduleWorkfeedRoute
|
||||
{
|
||||
use route_t;
|
||||
|
||||
public function run(): void
|
||||
{
|
||||
global /** @var response $response */
|
||||
/** @var router $router */
|
||||
$router, $response;
|
||||
|
||||
$this->get('/modules/workfeed/employees', function () {
|
||||
global $response;
|
||||
self::requirePermission('modules_workfeed_employees_view');
|
||||
$user = (new authentication())->get_user();
|
||||
if (!$user) {
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
|
||||
$filters = $this->filterRequestParameters($_GET, [
|
||||
'search',
|
||||
'departmentId',
|
||||
'includeInactive',
|
||||
'limit',
|
||||
'cursor',
|
||||
]);
|
||||
|
||||
$result = (new workfeed())->listEmployees($filters);
|
||||
(new logs_o())->add('modules_workfeed', 'global', 1, $user->id, 'MODULES_WORKFEED_EMPLOYEES_LIST', 'Listed Workfeed employees');
|
||||
$response->success($result, 200);
|
||||
}, [
|
||||
'modules_workfeed_employees_view' => 'List Workfeed employees',
|
||||
]);
|
||||
|
||||
$this->get('/modules/workfeed/employees/{id}', function () {
|
||||
global $response;
|
||||
self::requirePermission('modules_workfeed_employees_view');
|
||||
$user = (new authentication())->get_user();
|
||||
if (!$user) {
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
|
||||
$result = (new workfeed())->getEmployee((string)$this->fromRoute('id'));
|
||||
(new logs_o())->add('modules_workfeed', 'global', 1, $user->id, 'MODULES_WORKFEED_EMPLOYEE_GET', 'Fetched Workfeed employee');
|
||||
$response->success($result, 200);
|
||||
}, [
|
||||
'modules_workfeed_employees_view' => 'Get a specific Workfeed employee',
|
||||
]);
|
||||
|
||||
$this->get('/modules/workfeed/shifts', function () {
|
||||
global $response;
|
||||
self::requirePermission('modules_workfeed_shifts_view');
|
||||
$user = (new authentication())->get_user();
|
||||
if (!$user) {
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
|
||||
$filters = $this->filterRequestParameters($_GET, [
|
||||
'from',
|
||||
'to',
|
||||
'departmentId',
|
||||
'employeeId',
|
||||
'status',
|
||||
'limit',
|
||||
'cursor',
|
||||
]);
|
||||
|
||||
$result = (new workfeed())->listShifts($filters);
|
||||
(new logs_o())->add('modules_workfeed', 'global', 1, $user->id, 'MODULES_WORKFEED_SHIFTS_LIST', 'Listed Workfeed shifts');
|
||||
$response->success($result, 200);
|
||||
}, [
|
||||
'modules_workfeed_shifts_view' => 'List Workfeed shifts',
|
||||
]);
|
||||
|
||||
$this->get('/modules/workfeed/shifts/{id}', function () {
|
||||
global $response;
|
||||
self::requirePermission('modules_workfeed_shifts_view');
|
||||
$user = (new authentication())->get_user();
|
||||
if (!$user) {
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
|
||||
$result = (new workfeed())->getShift((string)$this->fromRoute('id'));
|
||||
(new logs_o())->add('modules_workfeed', 'global', 1, $user->id, 'MODULES_WORKFEED_SHIFT_GET', 'Fetched Workfeed shift');
|
||||
$response->success($result, 200);
|
||||
}, [
|
||||
'modules_workfeed_shifts_view' => 'Get a specific Workfeed shift',
|
||||
]);
|
||||
|
||||
$this->get('/modules/workfeed/departments', function () {
|
||||
global $response;
|
||||
self::requirePermission('modules_workfeed_departments_view');
|
||||
$user = (new authentication())->get_user();
|
||||
if (!$user) {
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
|
||||
$filters = $this->filterRequestParameters($_GET, [
|
||||
'search',
|
||||
'limit',
|
||||
'cursor',
|
||||
]);
|
||||
|
||||
$result = (new workfeed())->listDepartments($filters);
|
||||
(new logs_o())->add('modules_workfeed', 'global', 1, $user->id, 'MODULES_WORKFEED_DEPARTMENTS_LIST', 'Listed Workfeed departments');
|
||||
$response->success($result, 200);
|
||||
}, [
|
||||
'modules_workfeed_departments_view' => 'List Workfeed departments',
|
||||
]);
|
||||
}
|
||||
|
||||
private function filterRequestParameters(array $parameters, array $allowedKeys): array
|
||||
{
|
||||
$allowed = array_flip($allowedKeys);
|
||||
$filtered = [];
|
||||
|
||||
foreach ($parameters as $key => $value) {
|
||||
if (isset($allowed[$key]) && $value !== '' && $value !== null) {
|
||||
$filtered[$key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $filtered;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user