Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
48 / 48
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
UserModuleServiceProvider
100.00% covered (success)
100.00%
47 / 47
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 getDefinitions
100.00% covered (success)
100.00%
46 / 46
100.00% covered (success)
100.00%
1 / 1
1
 getExtensions
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\Modules\User\Config;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11use App\Core\Preference\Application\Command\ResetUserPreferencesHandler;
12use App\Core\Preference\Application\Command\SaveUserPreferenceHandler;
13use App\Core\Preference\Domain\Service\ConfigurationCascadeResolver;
14use App\Core\Preference\Infrastructure\Repository\SqlUserPreferenceRepository;
15use App\Core\Preference\Presentation\Api\UserPreferencesApiController;
16use App\Modules\User\Infrastructure\Repository\SqlUserRepository;
17use App\Modules\User\Presentation\Api\AuthApiController;
18use App\Modules\User\Presentation\Web\AuthController;
19use Nyholm\Psr7\Factory\Psr17Factory;
20use PDO;
21use Twig\Environment as TwigEnvironment;
22use Yiisoft\Di\ServiceProviderInterface;
23use Yiisoft\Session\SessionInterface;
24use Yiisoft\User\CurrentUser;
25
26/**
27 * UserModuleServiceProvider.
28 *
29 * Configures and registers user identity, authentication, and preference services.
30 *
31 * @package App\Modules\User\Config
32 */
33final class UserModuleServiceProvider implements ServiceProviderInterface
34{
35    /**
36     * @return array<string, mixed> Definitions mapping for PSR-11 container.
37     */
38    public function getDefinitions(): array
39    {
40        return [
41            SqlUserRepository::class => static fn(PDO $pdo): SqlUserRepository => new SqlUserRepository($pdo),
42
43            AuthApiController::class => static fn(
44                Psr17Factory $psr17,
45                SqlUserRepository $userRepo
46            ): AuthApiController => new AuthApiController(
47                $psr17,
48                $userRepo,
49                dirname(__DIR__, 4) . '/storage/logs'
50            ),
51
52            AuthController::class => static fn(
53                Psr17Factory $psr17,
54                TwigEnvironment $twig,
55                AuthApiController $api,
56                CurrentUser $currentUser,
57                SessionInterface $session
58            ): AuthController => new AuthController(
59                $psr17,
60                $twig,
61                $api,
62                $currentUser,
63                $session
64            ),
65
66            SqlUserPreferenceRepository::class => static fn(
67                PDO $pdo
68            ): SqlUserPreferenceRepository => new SqlUserPreferenceRepository($pdo),
69
70            SaveUserPreferenceHandler::class => static fn(
71                SqlUserPreferenceRepository $r
72            ): SaveUserPreferenceHandler => new SaveUserPreferenceHandler($r),
73
74            ResetUserPreferencesHandler::class => static fn(
75                SqlUserPreferenceRepository $r
76            ): ResetUserPreferencesHandler => new ResetUserPreferencesHandler($r),
77
78            UserPreferencesApiController::class => static fn(
79                Psr17Factory $psr17,
80                SqlUserPreferenceRepository $repo,
81                ConfigurationCascadeResolver $cascade,
82                SaveUserPreferenceHandler $saveHandler,
83                ResetUserPreferencesHandler $resetHandler
84            ): UserPreferencesApiController => new UserPreferencesApiController(
85                $psr17,
86                $repo,
87                $cascade,
88                $saveHandler,
89                $resetHandler
90            ),
91        ];
92    }
93
94    /**
95     * @return array<string, mixed> Service extensions mapping.
96     */
97    public function getExtensions(): array
98    {
99        return [];
100    }
101}