diff --git a/bash/entrypoint.sh b/bash/entrypoint.sh index 6cc183d..b7335b2 100644 --- a/bash/entrypoint.sh +++ b/bash/entrypoint.sh @@ -8,7 +8,7 @@ sleep $SLEEP_TIME # Provision database php /var/www/bin/console doctrine:migrations:migrate --no-interaction -php /var/www/bin/console doctrine:fixtures:load --no-interaction +php /var/www/bin/console db:seed # Start Apache in the foreground echo "Starting Apache..." diff --git a/src/Command/SeedDatabaseCommand.php b/src/Command/SeedDatabaseCommand.php new file mode 100644 index 0000000..863c974 --- /dev/null +++ b/src/Command/SeedDatabaseCommand.php @@ -0,0 +1,159 @@ +preferenceRepository = $preferenceRepository; + $this->preferenceOptionRepository = $preferenceOptionRepository; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + + $this->seedPreferences($io); + $this->seedPreferenceOptions($io); + + return Command::SUCCESS; + } + + private function seedPreferences(SymfonyStyle $io) + { + $io->info('[SeedDatabaseCommand] > Seeding preferences...'); + $preferences = $this->getPreferences(); + + foreach ($preferences as $preference) { + if ($this->preferenceRepository->find($preference['id'])) { + continue; + } + + $this->preferenceRepository->getEntityManager()->persist((new \App\User\Framework\Entity\Preference()) + ->setId($preference['id']) + ->setName($preference['name']) + ->setDescription($preference['description']) + ->setEnabled($preference['enabled']) + ); + } + + $this->preferenceRepository->getEntityManager()->flush(); + } + + private function getPreferences(): array + { + return [ + [ + 'id' => 'codec', + 'name' => 'Codec', + 'description' => null, + 'enabled' => true + ], + [ + 'id' => 'resolution', + 'name' => 'Resolution', + 'description' => null, + 'enabled' => true + ], + [ + 'id' => 'language', + 'name' => 'Language', + 'description' => null, + 'enabled' => true + ], + [ + 'id' => 'provider', + 'name' => 'Provider', + 'description' => null, + 'enabled' => true + ] + ]; + } + + private function seedPreferenceOptions(SymfonyStyle $io) + { + $io->info('[SeedDatabaseCommand] > Seeding preference options...'); + $options = $this->getPreferenceOptions(); + + foreach ($options as $option) { + if ($this->preferenceOptionRepository->findBy([ + 'preference' => $option['preference_id'], + 'name' => $option['name'], + 'value' => $option['value'], + 'enabled' => $option['enabled'], + ])) { + continue; + } + $this->preferenceOptionRepository->getEntityManager()->persist( + (new \App\User\Framework\Entity\PreferenceOption()) + ->setPreference($this->preferenceRepository->find($option['preference_id'])) + ->setName($option['name']) + ->setValue($option['value']) + ->setEnabled($option['enabled']) + ); + } + + $this->preferenceOptionRepository->getEntityManager()->flush(); + } + + private function getPreferenceOptions(): array + { + return [ + [ + 'preference_id' => 'resolution', + 'name' => '720p', + 'value' => '720p', + 'enabled' => true + ], + [ + 'preference_id' => 'resolution', + 'name' => '1080p', + 'value' => '1080p', + 'enabled' => true + ], + [ + 'preference_id' => 'resolution', + 'name' => '2160p', + 'value' => '2160p', + 'enabled' => true + ], + [ + 'preference_id' => 'codec', + 'name' => '-', + 'value' => '-', + 'enabled' => true + ], + [ + 'preference_id' => 'codec', + 'name' => 'h264', + 'value' => 'h264', + 'enabled' => true + ], + [ + 'preference_id' => 'codec', + 'name' => 'h265/HEVC', + 'value' => 'h265', + 'enabled' => true + ] + ]; + } +} diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php deleted file mode 100644 index 987f6fe..0000000 --- a/src/DataFixtures/AppFixtures.php +++ /dev/null @@ -1,17 +0,0 @@ -persist($product); - - $manager->flush(); - } -} diff --git a/src/User/Framework/DataFixtures/PreferenceFixtures.php b/src/User/Framework/DataFixtures/PreferenceFixtures.php deleted file mode 100644 index d9fa777..0000000 --- a/src/User/Framework/DataFixtures/PreferenceFixtures.php +++ /dev/null @@ -1,102 +0,0 @@ - 'codec', - 'name' => 'Codec', - 'description' => null, - 'enabled' => true - ], - [ - 'id' => 'resolution', - 'name' => 'Resolution', - 'description' => null, - 'enabled' => true - ], - [ - 'id' => 'language', - 'name' => 'Language', - 'description' => null, - 'enabled' => true - ], - [ - 'id' => 'provider', - 'name' => 'Provider', - 'description' => null, - 'enabled' => true - ] - ]; - - foreach ($preferences as $preference) { - $manager->persist((new \App\User\Framework\Entity\Preference()) - ->setId($preference['id']) - ->setName($preference['name']) - ->setDescription($preference['description']) - ->setEnabled($preference['enabled']) - ); - } - - $manager->flush(); - - $options = [ - [ - 'preference_id' => 'resolution', - 'name' => '720p', - 'value' => '720p', - 'enabled' => true - ], - [ - 'preference_id' => 'resolution', - 'name' => '1080p', - 'value' => '1080p', - 'enabled' => true - ], - [ - 'preference_id' => 'resolution', - 'name' => '2160p', - 'value' => '2160p', - 'enabled' => true - ], - [ - 'preference_id' => 'codec', - 'name' => '-', - 'value' => '-', - 'enabled' => true - ], - [ - 'preference_id' => 'codec', - 'name' => 'h264', - 'value' => 'h264', - 'enabled' => true - ], - [ - 'preference_id' => 'codec', - 'name' => 'h265/HEVC', - 'value' => 'h265', - 'enabled' => true - ] - ]; - - $preferenceRepository = $manager->getRepository(\App\User\Framework\Entity\Preference::class); - foreach ($options as $option) { - $manager->persist( - (new \App\User\Framework\Entity\PreferenceOption()) - ->setPreference($preferenceRepository->find($option['preference_id'])) - ->setName($option['name']) - ->setValue($option['value']) - ->setEnabled($option['enabled']) - ); - } - - $manager->flush(); - } -}