Add vehicle caching methods to XLVask: interface and implementation updates for handling vehicle cache.
This commit is contained in:
@@ -132,4 +132,90 @@ class xlvask_cache implements xlvask_cache_i
|
||||
}
|
||||
throw new Exception("Customer with number $customer_number is not cached.");
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getVehicleCache(string $registration): xlvask_vehicle
|
||||
{
|
||||
if (self::isVehicleCached($registration)) {
|
||||
$vehicle_data = (object)json_decode(redis->get('xlvask_vehicle_' . $registration), true);
|
||||
$tmp = new xlvask_vehicle();
|
||||
// Assign the properties shared by the xlvask_vehicle class.
|
||||
foreach ( $vehicle_data as $key => $value ) {
|
||||
if (property_exists($tmp, $key)) {
|
||||
$tmp->{$key} = $value;
|
||||
}
|
||||
}
|
||||
return $tmp; // Return the xlvask_vehicle object
|
||||
}
|
||||
throw new Exception("Vehicle with registration $registration is not cached.");
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function isVehicleCached(string $registration): bool
|
||||
{
|
||||
return (redis->exists('xlvask_vehicle_' . $registration));
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @throws Exception If there is an error encoding the vehicle data to JSON.
|
||||
* @see xlvask_vehicle
|
||||
*/
|
||||
public function setVehicleCache(string $registration, xlvask_vehicle $vehicle): void
|
||||
{
|
||||
$vehicle_data = json_encode($vehicle, JSON_THROW_ON_ERROR);
|
||||
redis->set('xlvask_vehicle_' . $registration, $vehicle_data);
|
||||
redis->expire('xlvask_vehicle_' . $registration, 3600); // Set cache expiration to 1 hour
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function clearVehicleCache(string $registration): void
|
||||
{
|
||||
if (self::isVehicleCached($registration)) {
|
||||
redis->delete('xlvask_vehicle_' . $registration);
|
||||
} else {
|
||||
throw new Exception("Vehicle with registration $registration is not cached.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function clearAllVehicleCache(): void
|
||||
{
|
||||
$keys = redis->get_keys('xlvask_vehicle_*');
|
||||
redis->clear_keys($keys);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getAllCachedVehicles(): array
|
||||
{
|
||||
$keys = redis->get_keys('xlvask_vehicle_*');
|
||||
$vehicles = [];
|
||||
foreach ( $keys as $key ) {
|
||||
$vehicle_data = redis->get($key);
|
||||
if ($vehicle_data) {
|
||||
$vehicle_data = json_decode($vehicle_data, true);
|
||||
$tmp = new xlvask_vehicle();
|
||||
// Assign the properties shared by the xlvask_vehicle class.
|
||||
foreach ( $vehicle_data as $property => $value ) {
|
||||
if (property_exists($tmp, $property)) {
|
||||
$tmp->{$property} = $value;
|
||||
}
|
||||
}
|
||||
$vehicles[] = $tmp; // Add the xlvask_vehicle object to the array
|
||||
} else {
|
||||
throw new Exception("Failed to retrieve vehicle data for key: $key");
|
||||
}
|
||||
}
|
||||
return $vehicles;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ namespace xlvask\interfaces;
|
||||
|
||||
use Exception;
|
||||
use helpers\xlvask_customer;
|
||||
use helpers\xlvask_vehicle;
|
||||
|
||||
interface xlvask_cache_i
|
||||
{
|
||||
@@ -63,4 +64,46 @@ interface xlvask_cache_i
|
||||
* @example [xlvask_customer, xlvask_customer, ...]
|
||||
*/
|
||||
public function getCachedCustomersByCustomerNumbers(array $customer_numbers, bool $allow_missing = false): array;
|
||||
|
||||
/**
|
||||
* Check if a vehicle is cached by its registration number.
|
||||
* @param string $registration The vehicle registration number to check.
|
||||
* @return bool True if the vehicle is cached, false otherwise.
|
||||
*/
|
||||
public function isVehicleCached(string $registration): bool;
|
||||
|
||||
/**
|
||||
* Get the cached vehicle object by its registration number.
|
||||
* @param string $registration The vehicle registration number to retrieve.
|
||||
* @return xlvask_vehicle The cached vehicle object.
|
||||
* @throws Exception If the vehicle is not cached.
|
||||
*/
|
||||
public function getVehicleCache(string $registration): xlvask_vehicle;
|
||||
|
||||
/**
|
||||
* Set the cache for a specific vehicle.
|
||||
* @param string $registration The vehicle registration number to cache.
|
||||
* @param xlvask_vehicle $vehicle The vehicle object to cache.
|
||||
*/
|
||||
public function setVehicleCache(string $registration, xlvask_vehicle $vehicle): void;
|
||||
|
||||
/**
|
||||
* Clear the cache for a specific vehicle.
|
||||
* @param string $registration The vehicle registration number to clear the cache for.
|
||||
*/
|
||||
public function clearVehicleCache(string $registration): void;
|
||||
|
||||
/**
|
||||
* Clear all cached vehicles.
|
||||
* This will remove all vehicle caches, so use with caution.
|
||||
*/
|
||||
public function clearAllVehicleCache(): void;
|
||||
|
||||
/**
|
||||
* Get all cached vehicles.
|
||||
* @return array<xlvask_vehicle> An array of all cached vehicle objects.
|
||||
* @example [xlvask_vehicle, xlvask_vehicle, ...]
|
||||
* @see xlvask_vehicle
|
||||
*/
|
||||
public function getAllCachedVehicles(): array;
|
||||
}
|
||||
Reference in New Issue
Block a user