Add endpoints for unknown customer vehicles and suggestions
Introduced two new endpoints: one for listing unknown customer vehicles and another for fetching customer suggestions based on a vehicle registration. These changes include authentication, input validation, and proper logging for each new route.
This commit is contained in:
@@ -5,6 +5,7 @@ namespace routes;
|
||||
use classes\authentication;
|
||||
use objects\customer_vehicles_o;
|
||||
use objects\logs_o;
|
||||
use objects\orders_o;
|
||||
use objects\products_o;
|
||||
use objects\users_o;
|
||||
use traits\route_t;
|
||||
@@ -59,6 +60,37 @@ class vehiclesRoute
|
||||
]
|
||||
);
|
||||
|
||||
$this->get('/department/vehicles/unknown-customer', function () {
|
||||
// Require the user to be logged in
|
||||
global $response;
|
||||
$this->requirePermission('list_unknown_customer_vehicles');
|
||||
// Get the user object
|
||||
$user = (new authentication())->get_user();
|
||||
// Check if the request was successful
|
||||
if ($user) {
|
||||
// Log the incident
|
||||
(new logs_o())->add('vehicles', 'global', 1, $user->id, 'LIST_UNKNOWN_CUSTOMER_VEHICLES', 'Successfully listed unknown customer vehicles');
|
||||
// Return the list of the user's vehicles
|
||||
$vehicles_o = new orders_o();
|
||||
$vehicles_o->setView('unique_order_reg_1');
|
||||
$response->success($vehicles_o
|
||||
->setSearchableFields([
|
||||
'reg_1'
|
||||
])
|
||||
->listObjectsWithPaginationIfSet()
|
||||
);
|
||||
} else {
|
||||
// Log the incident
|
||||
(new logs_o())->add('vehicles', 'global', 1, 0, 'LIST_UNKNOWN_CUSTOMER_VEHICLES', 'No user found, or invalid session');
|
||||
// Return an error
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
},
|
||||
[
|
||||
'list_unknown_customer_vehicles' => 'List unknown customer vehicles',
|
||||
]
|
||||
);
|
||||
|
||||
$this->post('/vehicles', function () {
|
||||
// Require the user to be logged in
|
||||
global $response;
|
||||
@@ -279,6 +311,67 @@ class vehiclesRoute
|
||||
'delete_vehicle_other' => 'Remove (delete) a vehicle from another user'
|
||||
]
|
||||
);
|
||||
|
||||
$this->get('/department/vehicle/customer-suggestions', function () {
|
||||
// Require the user to be logged in
|
||||
global $response;
|
||||
$this->requirePermission('list_vehicle_customer_suggestions');
|
||||
// Get the user object
|
||||
$user = (new authentication())->get_user();
|
||||
// Check if the request was successful
|
||||
if ($user) {
|
||||
self::requireParameters(['reg_1']);
|
||||
self::requireType((string)self::getParameter('reg_1'), self::type_string());
|
||||
$plate = (string)self::getParameter('reg_1');
|
||||
self::requireMinLength('reg_1', 1);
|
||||
self::requireMaxLength('reg_1', 12);
|
||||
// Return the list of the user's vehicles
|
||||
$orders_o = new orders_o();
|
||||
// Check if the user is allowed to list other user's vehicles
|
||||
// Get all the customer_ids that has orders with the same plate
|
||||
$customer_ids = $orders_o->getFieldsWhere([
|
||||
'reg_1' => $plate,
|
||||
'deleted_at' => null,
|
||||
], [
|
||||
'customer_id',
|
||||
]);
|
||||
// Get all the customer_ids that has orders with the same plate
|
||||
$customer_ids = array_map(function ($customer_id) {
|
||||
return (int)$customer_id['customer_id'];
|
||||
}, $customer_ids);
|
||||
// Remove duplicates
|
||||
$customer_ids = array_unique($customer_ids);
|
||||
// Get all the customers that has orders with the same plate
|
||||
$customers = [];
|
||||
foreach ( $customer_ids as $customer_id ) {
|
||||
$customers[] = (new users_o())->getUserByCustomerNumber($customer_id);
|
||||
}
|
||||
// Log the incident
|
||||
(new logs_o())->add('vehicles', 'global', 1, $user->id, 'LIST_VEHICLE_CUSTOMER_SUGGESTIONS', 'Successfully listed customer suggestions for a vehicle');
|
||||
// Format the response
|
||||
$response->success(
|
||||
array_map(function ($customer) {
|
||||
/** @var users_o $customer */
|
||||
$customer_number = (int)$customer->customer_number->value();
|
||||
return [
|
||||
'id' => (int)$customer->id,
|
||||
'customer_name' => (string)$customer->getCustomerName((int)$customer_number),
|
||||
'customer_number' => (int)$customer_number,
|
||||
];
|
||||
}, $customers)
|
||||
);
|
||||
|
||||
} else {
|
||||
// Log the incident
|
||||
(new logs_o())->add('vehicles', 'global', 1, 0, 'LIST_VEHICLE_CUSTOMER_SUGGESTIONS', 'No user found, or invalid session');
|
||||
// Return an error
|
||||
$response->error('Invalid session', 400);
|
||||
}
|
||||
},
|
||||
[
|
||||
'list_vehicle_customer_suggestions' => 'List customer suggestions for a vehicle',
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
private function getData(mixed $data, $response)
|
||||
|
||||
Reference in New Issue
Block a user