1. <?php
  2. /**
  3. * Resolves dependencies of API payloads.
  4. *
  5. * This function takes an array of API payloads and resolves their dependencies
  6. * based on a predefined dependency map. Minimal configuration is achieved
  7. * through the dependency map itself.
  8. *
  9. * @param array $payloads An array of API payload data (associative arrays).
  10. * @param array $dependencies A dependency map where keys are payload names and
  11. * values are arrays of required payload names.
  12. * @return array An array of resolved payloads, where each payload contains
  13. * all its dependencies merged into it. Returns an empty array
  14. * if no payloads are provided.
  15. */
  16. function resolvePayloadDependencies(array $payloads, array $dependencies): array
  17. {
  18. if (empty($payloads)) {
  19. return [];
  20. }
  21. $resolvedPayloads = [];
  22. $dependenciesMap = $dependencies; //Make a copy to avoid modifying original
  23. foreach ($payloads as $payloadName => $payloadData) {
  24. $resolvedPayloads[$payloadName] = $payloadData;
  25. if (isset($dependenciesMap[$payloadName])) {
  26. $requiredDependencies = $dependenciesMap[$payloadName];
  27. foreach ($requiredDependencies as $dependencyName) {
  28. if (array_key_exists($dependencyName, $resolvedPayloads)) {
  29. $resolvedPayloads[$payloadName] = array_merge($resolvedPayloads[$payloadName], $resolvedPayloads[$dependencyName]);
  30. } else {
  31. // Handle missing dependencies. Could log an error, throw an exception, or skip.
  32. // For this example, we'll skip the dependency and log a warning.
  33. error_log("Warning: Dependency '$dependencyName' missing for payload '$payloadName'.");
  34. }
  35. }
  36. }
  37. }
  38. return $resolvedPayloads;
  39. }
  40. /**
  41. * Example usage and dependency map.
  42. */
  43. return; //This is just a placeholder to allow the code to be valid. No actual code is executed here.
  44. /*
  45. Example Usage:
  46. $payloads = [
  47. 'user' => ['id' => 123, 'name' => 'John Doe'],
  48. 'address' => ['street' => '123 Main St', 'city' => 'Anytown'],
  49. 'order' => ['orderId' => 'ORD-456', 'items' => ['item1', 'item2']]
  50. ];
  51. $dependencies = [
  52. 'user' => ['address'],
  53. 'order' => ['user', 'address']
  54. ];
  55. $resolved = resolvePayloadDependencies($payloads, $dependencies);
  56. // Now $resolved contains payloads with merged dependencies.
  57. print_r($resolved);
  58. */
  59. ?>

Add your comment