From a1220b45f2fb8af92199114f99d25a5c4a4d0db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Fri, 1 Mar 2024 13:43:11 +0100 Subject: [PATCH] Add StepService class for subscription handling --- app/Services/Subscription/StepService.php | 61 +++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 app/Services/Subscription/StepService.php diff --git a/app/Services/Subscription/StepService.php b/app/Services/Subscription/StepService.php new file mode 100644 index 000000000000..25d4027df5b6 --- /dev/null +++ b/app/Services/Subscription/StepService.php @@ -0,0 +1,61 @@ +mapWithKeys(fn($dependency, $class) => [$dependency['id'] => $class])->toArray(); + + return array_map(fn($step) => $classes[$step], explode(',', $steps)); + } + + public static function check(array $steps): array + { + $dependencies = Purchase::$dependencies; + $step_order = array_flip($steps); + $errors = []; + + foreach ($steps as $step) { + $dependent = $dependencies[$step]['dependencies'] ?? []; + + if (!empty($dependent) && !array_intersect($dependent, $steps)) { + $errors[] = ctrans('texts.step_dependency_fail', [ + 'step' => ctrans('texts.' . self::mapClassNameToString($step)), + 'dependencies' => implode(', ', array_map(fn($dependency) => ctrans('texts.' . self::mapClassNameToString($dependency)), $dependent)), + ]); + } + + foreach ($dependent as $dependency) { + if (in_array($dependency, $steps) && $step_order[$dependency] > $step_order[$step]) { + $errors[] = ctrans('texts.step_dependency_order_fail', [ + 'step' => ctrans('texts.' . self::mapClassNameToString($step)), + 'dependency' => implode(', ', array_map(fn($dependency) => ctrans('texts.' . self::mapClassNameToString($dependency)), $dependent)), + ]); + } + } + } + + return $errors; + } + + public static function mapClassNameToString(string $class): string + { + $classes = collect(Purchase::$dependencies)->mapWithKeys(fn($dependency, $class) => [$class => $dependency['id']])->toArray(); + + return $classes[$class]; + } +} \ No newline at end of file