Merge pull request 'BUG: Improves Game Imports usage' (#22) from Task_20 into develop

Reviewed-on: #22
This commit is contained in:
neintonine 2024-11-12 18:41:28 +00:00
commit ff05142acc
2 changed files with 47 additions and 7 deletions

View file

@ -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
{
@ -25,12 +27,23 @@ 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;
}
}

View file

@ -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,19 +130,27 @@ 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,
$list,
@ -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);
}
}