chore: moves common code to Base namespace
This commit is contained in:
204
src/Base/Framework/Command/SeedDatabaseCommand.php
Normal file
204
src/Base/Framework/Command/SeedDatabaseCommand.php
Normal file
@@ -0,0 +1,204 @@
|
||||
<?php
|
||||
|
||||
namespace App\Base\Framework\Command;
|
||||
|
||||
use App\User\Framework\Entity\UserPreference;
|
||||
use App\User\Framework\Repository\PreferenceOptionRepository;
|
||||
use App\User\Framework\Repository\PreferencesRepository;
|
||||
use App\User\Framework\Repository\UserRepository;
|
||||
use Symfony\Component\Console\Attribute\AsCommand;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
#[AsCommand(
|
||||
name: 'db:seed',
|
||||
description: 'Seed the database with required data.',
|
||||
)]
|
||||
class SeedDatabaseCommand extends Command
|
||||
{
|
||||
private PreferencesRepository $preferenceRepository;
|
||||
private PreferenceOptionRepository $preferenceOptionRepository;
|
||||
private UserRepository $userRepository;
|
||||
|
||||
public function __construct(
|
||||
PreferencesRepository $preferenceRepository,
|
||||
PreferenceOptionRepository $preferenceOptionRepository,
|
||||
UserRepository $userRepository,
|
||||
) {
|
||||
parent::__construct();
|
||||
$this->preferenceRepository = $preferenceRepository;
|
||||
$this->preferenceOptionRepository = $preferenceOptionRepository;
|
||||
$this->userRepository = $userRepository;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
$this->seedPreferences($io);
|
||||
$this->seedPreferenceOptions($io);
|
||||
$this->updateUserPreferences($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'])
|
||||
->setType($preference['type'])
|
||||
);
|
||||
}
|
||||
|
||||
$this->preferenceRepository->getEntityManager()->flush();
|
||||
}
|
||||
|
||||
private function updateUserPreferences(SymfonyStyle $io)
|
||||
{
|
||||
$io->info('[SeedDatabaseCommand] > Updating user preferences...');
|
||||
$users = $this->userRepository->findAll();
|
||||
$preferences = $this->preferenceRepository->findAll();
|
||||
foreach ($users as $user) {
|
||||
foreach ($preferences as $preference) {
|
||||
if (false === $user->hasUserPreference($preference->getId())) {
|
||||
$user->addUserPreference(
|
||||
new UserPreference()
|
||||
->setPreference($preference)
|
||||
->setUser($user)
|
||||
->setPreferenceValue(null)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->userRepository->getEntityManager()->flush();
|
||||
}
|
||||
|
||||
private function getPreferences(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
'id' => 'codec',
|
||||
'name' => 'Codec',
|
||||
'description' => null,
|
||||
'enabled' => true,
|
||||
'type' => 'media',
|
||||
],
|
||||
[
|
||||
'id' => 'resolution',
|
||||
'name' => 'Resolution',
|
||||
'description' => null,
|
||||
'enabled' => true,
|
||||
'type' => 'media',
|
||||
],
|
||||
[
|
||||
'id' => 'language',
|
||||
'name' => 'Language',
|
||||
'description' => null,
|
||||
'enabled' => true,
|
||||
'type' => 'media',
|
||||
],
|
||||
[
|
||||
'id' => 'provider',
|
||||
'name' => 'Provider',
|
||||
'description' => null,
|
||||
'enabled' => true,
|
||||
'type' => 'media',
|
||||
],
|
||||
[
|
||||
'id' => 'quality',
|
||||
'name' => 'Quality',
|
||||
'description' => null,
|
||||
'enabled' => true,
|
||||
'type' => 'media',
|
||||
],
|
||||
[
|
||||
'id' => 'movie_folder',
|
||||
'name' => 'Create new folder for Movies',
|
||||
'description' => 'When downloading a movie, store it in a new folder in your base \'movies\' folder. (e.g.: .../movies/Inception/Inception.2160p.h265.mkv)',
|
||||
'enabled' => true,
|
||||
'type' => 'download'
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
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
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user