<?php
/**
* Resolves dependencies of API payloads.
*
* This function takes an array of API payloads and resolves their dependencies
* based on a predefined dependency map. Minimal configuration is achieved
* through the dependency map itself.
*
* @param array $payloads An array of API payload data (associative arrays).
* @param array $dependencies A dependency map where keys are payload names and
* values are arrays of required payload names.
* @return array An array of resolved payloads, where each payload contains
* all its dependencies merged into it. Returns an empty array
* if no payloads are provided.
*/
function resolvePayloadDependencies(array $payloads, array $dependencies): array
{
if (empty($payloads)) {
return [];
}
$resolvedPayloads = [];
$dependenciesMap = $dependencies; //Make a copy to avoid modifying original
foreach ($payloads as $payloadName => $payloadData) {
$resolvedPayloads[$payloadName] = $payloadData;
if (isset($dependenciesMap[$payloadName])) {
$requiredDependencies = $dependenciesMap[$payloadName];
foreach ($requiredDependencies as $dependencyName) {
if (array_key_exists($dependencyName, $resolvedPayloads)) {
$resolvedPayloads[$payloadName] = array_merge($resolvedPayloads[$payloadName], $resolvedPayloads[$dependencyName]);
} else {
// Handle missing dependencies. Could log an error, throw an exception, or skip.
// For this example, we'll skip the dependency and log a warning.
error_log("Warning: Dependency '$dependencyName' missing for payload '$payloadName'.");
}
}
}
}
return $resolvedPayloads;
}
/**
* Example usage and dependency map.
*/
return; //This is just a placeholder to allow the code to be valid. No actual code is executed here.
/*
Example Usage:
$payloads = [
'user' => ['id' => 123, 'name' => 'John Doe'],
'address' => ['street' => '123 Main St', 'city' => 'Anytown'],
'order' => ['orderId' => 'ORD-456', 'items' => ['item1', 'item2']]
];
$dependencies = [
'user' => ['address'],
'order' => ['user', 'address']
];
$resolved = resolvePayloadDependencies($payloads, $dependencies);
// Now $resolved contains payloads with merged dependencies.
print_r($resolved);
*/
?>
Add your comment