diff --git a/src/Command/SyncBaseUsersCommand.php b/src/Command/SyncBaseUsersCommand.php index fed6edf..22a95b6 100644 --- a/src/Command/SyncBaseUsersCommand.php +++ b/src/Command/SyncBaseUsersCommand.php @@ -7,10 +7,12 @@ use AnzuSystems\CommonBundle\Domain\User\UserSyncFacade; use AnzuSystems\CommonBundle\Exception\ValidationException; use AnzuSystems\CommonBundle\Model\User\UserDto; +use AnzuSystems\Contracts\AnzuApp; use AnzuSystems\SerializerBundle\Serializer; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Throwable; @@ -20,24 +22,45 @@ )] final class SyncBaseUsersCommand extends Command { + private const string USERS_FILE_PATH_OPT = 'file'; + private const string USERS_FILE_PATH_DEFAULT = 'users.json'; + public function __construct( - private readonly string $usersData, private readonly Serializer $serializer, private readonly UserSyncFacade $userFacade, ) { parent::__construct(); } + public function configure(): void + { + $this + ->addOption( + name: self::USERS_FILE_PATH_OPT, + mode: InputOption::VALUE_REQUIRED, + default: AnzuApp::getDataDir() . '/' . self::USERS_FILE_PATH_DEFAULT + ); + } + protected function execute(InputInterface $input, OutputInterface $output): int { - if (empty($this->usersData)) { - $output->writeln('Users data contains empty string'); + $filePath = $input->getOption(self::USERS_FILE_PATH_OPT); + + if (false === file_exists($filePath)) { + $output->writeln("File not found at path: ({$filePath})"); + + return Command::FAILURE; + } + + $contents = file_get_contents($filePath); + if (false === json_validate($contents)) { + $output->writeln("Invalid json content at path: ({$filePath})"); - return Command::SUCCESS; + return Command::FAILURE; } /** @var UserDto[] $users */ - $users = $this->serializer->deserializeIterable($this->usersData, UserDto::class, []); + $users = $this->serializer->deserializeIterable($contents, UserDto::class, []); foreach ($users as $userDto) { $output->writeln($userDto->getId() . ' ' . $userDto->getEmail()); @@ -65,7 +88,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int } } - $output->writeln(PHP_EOL . 'Done'); + $output->writeln('Done'); return Command::SUCCESS; } diff --git a/src/DependencyInjection/AnzuSystemsCommonExtension.php b/src/DependencyInjection/AnzuSystemsCommonExtension.php index a67ecc5..a0fe2b0 100644 --- a/src/DependencyInjection/AnzuSystemsCommonExtension.php +++ b/src/DependencyInjection/AnzuSystemsCommonExtension.php @@ -301,7 +301,6 @@ private function loadSettings(ContainerBuilder $container): void ); $container->getDefinition(SyncBaseUsersCommand::class) - ->setArgument('$usersData', $settings['user_sync_data']) ->setArgument('$serializer', new Reference(Serializer::class)) ->setArgument('$userFacade', new Reference(UserSyncFacade::class)) ; diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 3b7a810..58deaaf 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -186,7 +186,6 @@ private function addSettingsSection(): NodeDefinition ->scalarNode('app_redis')->cannotBeEmpty()->end() ->scalarNode('app_cache_proxy_enabled')->defaultTrue()->end() ->scalarNode('user_entity_class')->defaultValue('App\\Entity\\User')->end() - ->scalarNode('user_sync_data')->defaultValue('[]')->end() ->scalarNode('app_entity_namespace')->defaultValue('App\\Entity')->end() ->scalarNode('app_value_object_namespace')->defaultValue('App\\Model\\ValueObject')->end() ->scalarNode('app_enum_namespace')->defaultValue('App\\Model\\Enum')->end()