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:
Jeppe Bundgaard
2026-03-24 10:33:17 +01:00
parent ac164a5e81
commit 48a74ad34d
12 changed files with 892 additions and 0 deletions
@@ -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;
}
}