Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
GetResolvedPreferenceHandler
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 handle
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5/** @license For full copyright and license information, please see the LICENSE.md file. */
6
7namespace App\Core\Preference\Application\Query;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11use App\Core\Preference\Domain\Service\ConfigurationCascadeResolverInterface;
12
13/**
14 * Query Handler for resolving hierarchical preferences.
15 *
16 * @package App\Core\Preference\Application\Query
17 */
18final readonly class GetResolvedPreferenceHandler
19{
20    /**
21     * GetResolvedPreferenceHandler constructor.
22     *
23     * @param ConfigurationCascadeResolverInterface $resolver Cascade resolution service.
24     */
25    public function __construct(
26        private ConfigurationCascadeResolverInterface $resolver,
27    ) {
28    }
29
30    /**
31     * Handles GetResolvedPreferenceQuery execution.
32     *
33     * @param GetResolvedPreferenceQuery $query Query parameters.
34     * @return mixed Resolved preference value.
35     */
36    public function handle(GetResolvedPreferenceQuery $query): mixed
37    {
38        return $this->resolver->resolve($query->scope, $query->key, $query->fallbackDefault);
39    }
40}