BUG: Improves Game Imports usage #22
2 changed files with 47 additions and 7 deletions
|
@ -15,6 +15,8 @@ class Game
|
|||
private int|null $id;
|
||||
#[ORM\Column]
|
||||
private string $name;
|
||||
#[ORM\Column(nullable: true)]
|
||||
private string|null $internalName;
|
||||
|
||||
public function getName(): string
|
||||
{
|
||||
|
@ -26,11 +28,22 @@ class Game
|
|||
return $this->id;
|
||||
}
|
||||
|
||||
public function getInternalName(): string
|
||||
{
|
||||
return $this->internalName ?? $this->name;
|
||||
}
|
||||
|
||||
public function setInternalName(string $internalName): void
|
||||
{
|
||||
$this->internalName = $internalName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function __construct(string $name)
|
||||
public function __construct(string $internalName, string $name)
|
||||
{
|
||||
$this->internalName = $internalName;
|
||||
$this->name = $name;
|
||||
}
|
||||
}
|
|
@ -3,14 +3,17 @@ declare(strict_types=1);
|
|||
|
||||
namespace GamesShop\Importer;
|
||||
|
||||
use Doctrine\Common\Collections\Criteria;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Exception;
|
||||
use GamesShop\ContainerHandler;
|
||||
use GamesShop\Entities\Account\User;
|
||||
use GamesShop\Entities\Games\Game;
|
||||
use GamesShop\Entities\Games\Key;
|
||||
use GamesShop\Entities\Games\KeyAttribute;
|
||||
use GamesShop\Entities\Games\Store;
|
||||
use GamesShop\Entities\GamesList;
|
||||
use Monolog\Logger;
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
|
||||
final class GameImporter
|
||||
|
@ -127,18 +130,26 @@ final class GameImporter
|
|||
continue;
|
||||
}
|
||||
|
||||
$game = array_key_exists($values['name'], $foundGames) ? $foundGames[$values['name']] : null;
|
||||
$internalName = $this->prepareGameName($values['name']);
|
||||
$game = array_key_exists($internalName, $foundGames) ? $foundGames[$internalName] : null;
|
||||
|
||||
ContainerHandler::get(Logger::class)->debug('importing game ' . $internalName);
|
||||
|
||||
if ($game === null) {
|
||||
$game = $this->entityManager->getRepository(Game::class)->findOneBy([ 'name' => $values['name'] ]);
|
||||
$game = $this->entityManager->getRepository(Game::class)->matching(
|
||||
Criteria::create()
|
||||
->where(Criteria::expr()->eq('name', $values['name']))
|
||||
->orWhere(Criteria::expr()->eq('internalName', $internalName))
|
||||
)->first();
|
||||
}
|
||||
|
||||
if ($game === null) {
|
||||
$game = new Game($values['name']);
|
||||
if ($game === false) {
|
||||
$game = new Game($internalName, $values['name']);
|
||||
$this->entityManager->persist($game);
|
||||
}
|
||||
|
||||
$foundGames[$values['name']] = $game;
|
||||
$foundGames[$internalName] = $game;
|
||||
$game->setInternalName($internalName);
|
||||
|
||||
$key = new Key(
|
||||
$game,
|
||||
|
@ -174,4 +185,20 @@ final class GameImporter
|
|||
|
||||
return Store::EXTERNAL;
|
||||
}
|
||||
|
||||
private function prepareGameName(string $name): string
|
||||
{
|
||||
$replacements = [
|
||||
':' => '',
|
||||
'-' => '',
|
||||
',' => '',
|
||||
'!' => '',
|
||||
'?' => '',
|
||||
' ' => ' ',
|
||||
' ' => '_',
|
||||
];
|
||||
|
||||
$name = strtoupper($name);
|
||||
return str_replace(array_keys($replacements), array_values($replacements), $name);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue